summaryrefslogtreecommitdiff
path: root/packages/client
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-07-13 18:11:54 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-07-13 18:11:54 +0900
commitad970dffdabb7b81ee18583c86898f48df0b4302 (patch)
treeb5b1e7a40c377369a4dd364b1f86a99462a469a4 /packages/client
parent:art: (diff)
downloadsharkey-ad970dffdabb7b81ee18583c86898f48df0b4302.tar.gz
sharkey-ad970dffdabb7b81ee18583c86898f48df0b4302.tar.bz2
sharkey-ad970dffdabb7b81ee18583c86898f48df0b4302.zip
fix(client): fix url encoded string handling of nirax
Fix #8878
Diffstat (limited to 'packages/client')
-rw-r--r--packages/client/src/components/global/url.vue14
-rw-r--r--packages/client/src/nirax.ts11
-rw-r--r--packages/client/src/scripts/safe-uri-decode.ts7
3 files changed, 17 insertions, 15 deletions
diff --git a/packages/client/src/components/global/url.vue b/packages/client/src/components/global/url.vue
index 34ba9024cc..dc79a20649 100644
--- a/packages/client/src/components/global/url.vue
+++ b/packages/client/src/components/global/url.vue
@@ -1,5 +1,6 @@
<template>
-<component :is="self ? 'MkA' : 'a'" ref="el" class="ieqqeuvs _link" :[attr]="self ? url.substr(local.length) : url" :rel="rel" :target="target"
+<component
+ :is="self ? 'MkA' : 'a'" ref="el" class="ieqqeuvs _link" :[attr]="self ? url.substr(local.length) : url" :rel="rel" :target="target"
@contextmenu.stop="() => {}"
>
<template v-if="!self">
@@ -23,14 +24,7 @@ import { toUnicode as decodePunycode } from 'punycode/';
import { url as local } from '@/config';
import * as os from '@/os';
import { useTooltip } from '@/scripts/use-tooltip';
-
-function safeURIDecode(str: string) {
- try {
- return decodeURIComponent(str);
- } catch {
- return str;
- }
-}
+import { safeURIDecode } from '@/scripts/safe-uri-decode';
export default defineComponent({
props: {
@@ -42,7 +36,7 @@ export default defineComponent({
type: String,
required: false,
default: null,
- }
+ },
},
setup(props) {
const self = props.url.startsWith(local);
diff --git a/packages/client/src/nirax.ts b/packages/client/src/nirax.ts
index cd29ae87a5..7587901d70 100644
--- a/packages/client/src/nirax.ts
+++ b/packages/client/src/nirax.ts
@@ -3,6 +3,7 @@
import { EventEmitter } from 'eventemitter3';
import { Ref, Component, ref, shallowRef, ShallowRef } from 'vue';
import { pleaseLogin } from '@/scripts/please-login';
+import { safeURIDecode } from '@/scripts/safe-uri-decode';
type RouteDef = {
path: string;
@@ -116,7 +117,7 @@ export class Router extends EventEmitter<{
}
if (p.wildcard) {
if (parts.length !== 0) {
- props.set(p.name, parts.join('/'));
+ props.set(p.name, safeURIDecode(parts.join('/')));
parts = [];
}
break pathMatchLoop;
@@ -124,10 +125,10 @@ export class Router extends EventEmitter<{
if (p.startsWith) {
if (parts[0] == null || !parts[0].startsWith(p.startsWith)) continue forEachRouteLoop;
- props.set(p.name, parts[0].substring(p.startsWith.length));
+ props.set(p.name, safeURIDecode(parts[0].substring(p.startsWith.length)));
parts.shift();
} else {
- props.set(p.name, parts[0]);
+ props.set(p.name, safeURIDecode(parts[0]));
parts.shift();
}
}
@@ -137,7 +138,7 @@ export class Router extends EventEmitter<{
if (parts.length !== 0) continue forEachRouteLoop;
if (route.hash != null && hash != null) {
- props.set(route.hash, hash);
+ props.set(route.hash, safeURIDecode(hash));
}
if (route.query != null && queryString != null) {
@@ -147,7 +148,7 @@ export class Router extends EventEmitter<{
for (const q in route.query) {
const as = route.query[q];
if (queryObject[q]) {
- props.set(as, queryObject[q]);
+ props.set(as, safeURIDecode(queryObject[q]));
}
}
}
diff --git a/packages/client/src/scripts/safe-uri-decode.ts b/packages/client/src/scripts/safe-uri-decode.ts
new file mode 100644
index 0000000000..301b56d7fd
--- /dev/null
+++ b/packages/client/src/scripts/safe-uri-decode.ts
@@ -0,0 +1,7 @@
+export function safeURIDecode(str: string): string {
+ try {
+ return decodeURIComponent(str);
+ } catch {
+ return str;
+ }
+}