summaryrefslogtreecommitdiff
path: root/src/client/components
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-05-04 15:05:34 +0900
committerGitHub <noreply@github.com>2021-05-04 15:05:34 +0900
commit6ae642245e0322f194ca5d960f669f33ba38c2fa (patch)
treef71ac2c1a2d0aa616d4e99d37c00787219c5e3d0 /src/client/components
parentFix style (diff)
downloadsharkey-6ae642245e0322f194ca5d960f669f33ba38c2fa.tar.gz
sharkey-6ae642245e0322f194ca5d960f669f33ba38c2fa.tar.bz2
sharkey-6ae642245e0322f194ca5d960f669f33ba38c2fa.zip
Password reset (#7494)
* wip * wip * Update well-known.ts * wip * clean up * Update request-reset-password.ts * Update forgot-password.vue * Update reset-password.ts * Update request-reset-password.ts
Diffstat (limited to 'src/client/components')
-rw-r--r--src/client/components/forgot-password.vue71
-rwxr-xr-xsrc/client/components/signin.vue10
2 files changed, 79 insertions, 2 deletions
diff --git a/src/client/components/forgot-password.vue b/src/client/components/forgot-password.vue
new file mode 100644
index 0000000000..1f530d7ca2
--- /dev/null
+++ b/src/client/components/forgot-password.vue
@@ -0,0 +1,71 @@
+<template>
+<XModalWindow ref="dialog"
+ :width="370"
+ :height="400"
+ @close="$refs.dialog.close()"
+ @closed="$emit('closed')"
+>
+ <template #header>{{ $ts.forgotPassword }}</template>
+
+ <form class="_monolithic_" @submit.prevent="onSubmit" v-if="$instance.enableEmail">
+ <div class="_section">
+ <MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required>
+ <span>{{ $ts.username }}</span>
+ <template #prefix>@</template>
+ </MkInput>
+
+ <MkInput v-model:value="email" type="email" spellcheck="false" required>
+ <span>{{ $ts.emailAddress }}</span>
+ <template #desc>{{ $ts._forgotPassword.enterEmail }}</template>
+ </MkInput>
+
+ <MkButton type="submit" :disabled="processing" primary style="margin: 0 auto;">{{ $ts.send }}</MkButton>
+ </div>
+ <div class="_section">
+ <MkA to="/about" class="_link">{{ $ts._forgotPassword.ifNoEmail }}</MkA>
+ </div>
+ </form>
+ <div v-else>
+ {{ $ts._forgotPassword.contactAdmin }}
+ </div>
+</XModalWindow>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import XModalWindow from '@client/components/ui/modal-window.vue';
+import MkButton from '@client/components/ui/button.vue';
+import MkInput from '@client/components/ui/input.vue';
+import * as os from '@client/os';
+
+export default defineComponent({
+ components: {
+ XModalWindow,
+ MkButton,
+ MkInput,
+ },
+
+ emits: ['done', 'closed'],
+
+ data() {
+ return {
+ username: '',
+ email: '',
+ processing: false,
+ };
+ },
+
+ methods: {
+ async onSubmit() {
+ this.processing = true;
+ await os.apiWithDialog('request-reset-password', {
+ username: this.username,
+ email: this.email,
+ });
+
+ this.$emit('done');
+ this.$refs.dialog.close();
+ }
+ }
+});
+</script>
diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue
index 2c883e0c32..f8249ffcd6 100755
--- a/src/client/components/signin.vue
+++ b/src/client/components/signin.vue
@@ -11,6 +11,7 @@
<MkInput v-model:value="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required>
<span>{{ $ts.password }}</span>
<template #prefix><i class="fas fa-lock"></i></template>
+ <template #desc><button class="_textButton" @click="resetPassword">{{ $ts.forgotPassword }}</button></template>
</MkInput>
<MkButton type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? $ts.loggingIn : $ts.login }}</MkButton>
</div>
@@ -49,8 +50,8 @@
<script lang="ts">
import { defineComponent } from 'vue';
import { toUnicode } from 'punycode/';
-import MkButton from './ui/button.vue';
-import MkInput from './ui/input.vue';
+import MkButton from '@client/components/ui/button.vue';
+import MkInput from '@client/components/ui/input.vue';
import { apiUrl, host } from '@client/config';
import { byteify, hexify } from '@client/scripts/2fa';
import * as os from '@client/os';
@@ -197,6 +198,11 @@ export default defineComponent({
this.signing = false;
});
}
+ },
+
+ resetPassword() {
+ os.popup(import('@client/components/forgot-password.vue'), {}, {
+ }, 'closed');
}
}
});