chore(release): 0.2.12 v0.2.12
authorxangelo <me@xangelo.ca>
Mon, 21 Aug 2023 19:52:39 +0000 (15:52 -0400)
committerxangelo <me@xangelo.ca>
Mon, 21 Aug 2023 19:52:39 +0000 (15:52 -0400)
CHANGELOG.md
package-lock.json
package.json
public/assets/css/game.css
src/server/api.ts
src/server/views/travel.ts

index dc33716f300ea7fa3307203496ca637fc9eb284c..1569f29c9163712fc0541c3b9d9b6a59c03d479d 100644 (file)
@@ -2,6 +2,18 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+### [0.2.12](https://git.xangelo.ca/?p=risinglegends.git;a=commitdiff;h=v0.2.12;hp=v0.2.11;ds=sidebyside) (2023-08-21)
+
+
+### Features
+
+* return to town button while travelling fd070de
+
+
+### Bug Fixes
+
+* xss chat input 943cbc3
+
 ### [0.2.11](https://git.xangelo.ca/?p=risinglegends.git;a=commitdiff;h=v0.2.11;hp=v0.2.10;ds=sidebyside) (2023-08-21)
 
 
 ### [0.2.11](https://git.xangelo.ca/?p=risinglegends.git;a=commitdiff;h=v0.2.11;hp=v0.2.10;ds=sidebyside) (2023-08-21)
 
 
index 3a59fa940979d4a5ac9578458e4204311a9ac44f..b763f6180070be657268f441d220fb37b8123c42 100644 (file)
@@ -1,12 +1,12 @@
 {
   "name": "rising-legends",
 {
   "name": "rising-legends",
-  "version": "0.2.11",
+  "version": "0.2.12",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "rising-legends",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "rising-legends",
-      "version": "0.2.11",
+      "version": "0.2.12",
       "dependencies": {
         "@honeycombio/opentelemetry-node": "^0.4.0",
         "@opentelemetry/auto-instrumentations-node": "^0.37.0",
       "dependencies": {
         "@honeycombio/opentelemetry-node": "^0.4.0",
         "@opentelemetry/auto-instrumentations-node": "^0.37.0",
@@ -26,7 +26,8 @@
         "socket.io-client": "^4.6.1",
         "uuid": "^9.0.0",
         "webpack": "^5.84.1",
         "socket.io-client": "^4.6.1",
         "uuid": "^9.0.0",
         "webpack": "^5.84.1",
-        "webpack-cli": "^5.1.1"
+        "webpack-cli": "^5.1.1",
+        "xss": "^1.0.14"
       },
       "devDependencies": {
         "@commitlint/cli": "^17.6.6",
       },
       "devDependencies": {
         "@commitlint/cli": "^17.6.6",
         "node": ">= 8"
       }
     },
         "node": ">= 8"
       }
     },
+    "node_modules/cssfilter": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
+      "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw=="
+    },
     "node_modules/csv-parse": {
       "version": "5.4.0",
       "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.4.0.tgz",
     "node_modules/csv-parse": {
       "version": "5.4.0",
       "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.4.0.tgz",
       "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz",
       "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g=="
     },
       "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz",
       "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g=="
     },
+    "node_modules/xss": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz",
+      "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==",
+      "dependencies": {
+        "commander": "^2.20.3",
+        "cssfilter": "0.0.10"
+      },
+      "bin": {
+        "xss": "bin/xss"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
     "node_modules/xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
     "node_modules/xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
         "which": "^2.0.1"
       }
     },
         "which": "^2.0.1"
       }
     },
+    "cssfilter": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
+      "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw=="
+    },
     "csv-parse": {
       "version": "5.4.0",
       "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.4.0.tgz",
     "csv-parse": {
       "version": "5.4.0",
       "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.4.0.tgz",
       "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz",
       "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g=="
     },
       "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz",
       "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g=="
     },
+    "xss": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz",
+      "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==",
+      "requires": {
+        "commander": "^2.20.3",
+        "cssfilter": "0.0.10"
+      }
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
index b651e635e1ed0c298623363d0e5a739d028a4fcd..e9796e49db870ecea20148d63307347929dc673b 100644 (file)
@@ -1,7 +1,7 @@
 {
   "name": "rising-legends",
   "private": true,
 {
   "name": "rising-legends",
   "private": true,
-  "version": "0.2.11",
+  "version": "0.2.12",
   "scripts": {
     "up": "npx prisma migrate dev --name \"init\"",
     "start": "pm2 start dist/server/api.js",
   "scripts": {
     "up": "npx prisma migrate dev --name \"init\"",
     "start": "pm2 start dist/server/api.js",
@@ -60,7 +60,8 @@
     "socket.io-client": "^4.6.1",
     "uuid": "^9.0.0",
     "webpack": "^5.84.1",
     "socket.io-client": "^4.6.1",
     "uuid": "^9.0.0",
     "webpack": "^5.84.1",
-    "webpack-cli": "^5.1.1"
+    "webpack-cli": "^5.1.1",
+    "xss": "^1.0.14"
   },
   "nodemonConfig": {
     "ignore": [
   },
   "nodemonConfig": {
     "ignore": [
index 69187e73a516f180a87db12ebfc4856fc8f22ef5..4060899f36c8779d646649f0e12aba787a262e95 100644 (file)
@@ -478,7 +478,7 @@ h3 {
 }
 
 #travelling {
 }
 
 #travelling {
-  padding-top: 2rem;
+  padding: 2rem;
 }
 #travelling-actions {
   display: flex;
 }
 #travelling-actions {
   display: flex;
index baed723e2c7e50348d50aa18d36077929b718dfe..d8296fc1de79d513619a3aea18d65bdf2d920f3a 100644 (file)
@@ -4,6 +4,7 @@ import { config as dotenv } from 'dotenv';
 import { join } from 'path';
 import express, {Request, Response} from 'express';
 import bodyParser from 'body-parser';
 import { join } from 'path';
 import express, {Request, Response} from 'express';
 import bodyParser from 'body-parser';
+import xss from 'xss';
 
 import http from 'http';
 import { Server, Socket } from 'socket.io';
 
 import http from 'http';
 import { Server, Socket } from 'socket.io';
@@ -415,7 +416,7 @@ app.post('/chat', authEndpoint, async (req: AuthRequest, res: Response) => {
     }
   }
   else {
     }
   }
   else {
-    message = broadcastMessage(req.player.username, msg);
+    message = broadcastMessage(req.player.username, xss(msg));
     chatHistory.push(message);
     chatHistory.slice(-10);
   }
     chatHistory.push(message);
     chatHistory.slice(-10);
   }
@@ -975,8 +976,43 @@ app.post('/travel/step', authEndpoint, async (req: AuthRequest, res: Response) =
   }
 });
 
   }
 });
 
+app.post('/travel/return-to-source', authEndpoint, async (req: AuthRequest, res: Response) => {
+  // puts the player back in their starting town
+  // doesn't matter if they don't have one
+  // redirect them!
+  await clearTravelPlan(req.player.id);
+  const equippedItems = await getEquippedItems(req.player.id);
+
+  const fight = await loadMonsterFromFight(req.player.id);
+  if(fight) {
+    // go to the fight screen
+    const data: MonsterForFight = {
+      id: fight.id,
+      hp: fight.hp,
+      maxHp: fight.maxHp,
+      name: fight.name,
+      level: fight.level,
+      fight_trigger: fight.fight_trigger
+    };
+    const location = await getMonsterLocation(fight.ref_id);
+
+    res.send(renderPlayerBar(req.player, equippedItems) + renderFightPreRound(data, true, location, req.player.city_id));
+  }
+  else {
+    const [city, locations, paths] = await Promise.all([
+      getCityDetails(req.player.city_id),
+      getAllServices(req.player.city_id),
+      getAllPaths(req.player.city_id)
+    ]);
+
+    res.send(renderPlayerBar(req.player, equippedItems) + await renderMap({city, locations, paths}, req.player.city_id));
+
+  }
+
+});
+
 app.post('/travel/:destination_id', authEndpoint, async (req: AuthRequest, res: Response) => {
 app.post('/travel/:destination_id', authEndpoint, async (req: AuthRequest, res: Response) => {
-  if(req.player.hp <= 0) {
+if(req.player.hp <= 0) {
     logger.log(`Player didn\'t have enough hp`);
     res.send(Alert.ErrorAlert('Sorry, you need some HP to start travelling.'));
     return;
     logger.log(`Player didn\'t have enough hp`);
     res.send(Alert.ErrorAlert('Sorry, you need some HP to start travelling.'));
     return;
index cf2d7dbcc12cd71bd2f582fbd5bf910e577a10e6..9aff00eea77a0aefafdc89be0ab83b03787a7aa2 100644 (file)
@@ -9,12 +9,6 @@ export function renderTravel(data: TravelDTO): string {
   let promptText = data.walkingText;
   const blockTime = data.nextAction || 0;
 
   let promptText = data.walkingText;
   const blockTime = data.nextAction || 0;
 
-  /*
-  if(blockTime) {
-    updateStepButton();
-  }
-  */
-
   let html = `<section id="explore" class="tab active" hx-swap-oob="true" style="background-image: url('/assets/img/map/${data.closestTown}.jpeg')">
 
 <div id="travelling" class="city-details">`;
   let html = `<section id="explore" class="tab active" hx-swap-oob="true" style="background-image: url('/assets/img/map/${data.closestTown}.jpeg')">
 
 <div id="travelling" class="city-details">`;
@@ -34,6 +28,8 @@ export function renderTravel(data: TravelDTO): string {
   html += '</div>';
   html += `<p>${promptText}</p>`;
 
   html += '</div>';
   html += `<p>${promptText}</p>`;
 
+  html += `<p align="right"><a href="#" hx-post="/travel/return-to-source">Return to ${data.travelPlan.source_city_name}</a></p>`;
+
   html += '</div></section>';
 
   return html;
   html += '</div></section>';
 
   return html;