summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-08-29 00:20:47 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-08-29 00:20:47 +0900
commit8f0e6a70cf22f1248b99bd3b300feed8b1b1efc8 (patch)
tree6c476a25c24c14b2fa6deaa8d1f530cea8e44d20 /src
parentMerge branch 'master' of https://github.com/syuilo/misskey (diff)
downloadsharkey-8f0e6a70cf22f1248b99bd3b300feed8b1b1efc8.tar.gz
sharkey-8f0e6a70cf22f1248b99bd3b300feed8b1b1efc8.tar.bz2
sharkey-8f0e6a70cf22f1248b99bd3b300feed8b1b1efc8.zip
#364
Diffstat (limited to 'src')
-rw-r--r--src/api/endpoints.ts4
-rw-r--r--src/api/endpoints/i/change_password.ts42
-rw-r--r--src/web/app/desktop/tags/settings.tag38
3 files changed, 82 insertions, 2 deletions
diff --git a/src/api/endpoints.ts b/src/api/endpoints.ts
index a658c9a42e..c6661533e8 100644
--- a/src/api/endpoints.ts
+++ b/src/api/endpoints.ts
@@ -160,6 +160,10 @@ const endpoints: Endpoint[] = [
kind: 'account-write'
},
{
+ name: 'i/change_password',
+ withCredential: true
+ },
+ {
name: 'i/regenerate_token',
withCredential: true
},
diff --git a/src/api/endpoints/i/change_password.ts b/src/api/endpoints/i/change_password.ts
new file mode 100644
index 0000000000..faceded29d
--- /dev/null
+++ b/src/api/endpoints/i/change_password.ts
@@ -0,0 +1,42 @@
+/**
+ * Module dependencies
+ */
+import $ from 'cafy';
+import * as bcrypt from 'bcryptjs';
+import User from '../../models/user';
+
+/**
+ * Change password
+ *
+ * @param {any} params
+ * @param {any} user
+ * @return {Promise<any>}
+ */
+module.exports = async (params, user) => new Promise(async (res, rej) => {
+ // Get 'current_password' parameter
+ const [currentPassword, currentPasswordErr] = $(params.current_password).string().$;
+ if (currentPasswordErr) return rej('invalid current_password param');
+
+ // Get 'new_password' parameter
+ const [newPassword, newPasswordErr] = $(params.new_password).string().$;
+ if (newPasswordErr) return rej('invalid new_password param');
+
+ // Compare password
+ const same = bcrypt.compareSync(currentPassword, user.password);
+
+ if (!same) {
+ return rej('incorrect password');
+ }
+
+ // Generate hash of password
+ const salt = bcrypt.genSaltSync(8);
+ const hash = bcrypt.hashSync(newPassword, salt);
+
+ await User.update(user._id, {
+ $set: {
+ password: hash
+ }
+ });
+
+ res();
+});
diff --git a/src/web/app/desktop/tags/settings.tag b/src/web/app/desktop/tags/settings.tag
index 7fc6acb4a8..80a42d6652 100644
--- a/src/web/app/desktop/tags/settings.tag
+++ b/src/web/app/desktop/tags/settings.tag
@@ -7,7 +7,7 @@
<p class={ active: page == 'apps' } onmousedown={ setPage.bind(null, 'apps') }><i class="fa fa-fw fa-puzzle-piece"></i>アプリ</p>
<p class={ active: page == 'twitter' } onmousedown={ setPage.bind(null, 'twitter') }><i class="fa fa-fw fa-twitter"></i>Twitter</p>
<p class={ active: page == 'signin' } onmousedown={ setPage.bind(null, 'signin') }><i class="fa fa-fw fa-sign-in"></i>ログイン履歴</p>
- <p class={ active: page == 'password' } onmousedown={ setPage.bind(null, 'password') }><i class="fa fa-fw fa-unlock-alt"></i>パスワード</p>
+ <p class={ active: page == 'password' } onmousedown={ setPage.bind(null, 'password') }><i class="fa fa-fw fa-unlock-alt"></i>%i18n:desktop.tags.mk-settings.password%</p>
<p class={ active: page == 'api' } onmousedown={ setPage.bind(null, 'api') }><i class="fa fa-fw fa-key"></i>API</p>
</div>
<div class="pages">
@@ -58,6 +58,11 @@
<mk-signin-history/>
</section>
+ <section class="password" show={ page == 'password' }>
+ <h1>%i18n:desktop.tags.mk-settings.password%</h1>
+ <mk-password-setting/>
+ </section>
+
<section class="api" show={ page == 'api' }>
<h1>API</h1>
<mk-api-info/>
@@ -236,8 +241,37 @@
passwordDialog('%i18n:desktop.tags.mk-api-info.regenerate-token%', password => {
this.api('i/regenerate_token', {
password: password
- })
+ });
});
};
</script>
</mk-api-info>
+
+<mk-password-setting>
+ <button onclick={ reset }>%i18n:desktop.tags.mk-password-setting.reset%</button>
+ <style>
+ :scope
+ display block
+ color #4a535a
+ </style>
+ <script>
+ import passwordDialog from '../scripts/password-dialog';
+ import notify from '../scripts/notify';
+
+ this.mixin('i');
+ this.mixin('api');
+
+ this.reset = () => {
+ passwordDialog('%i18n:desktop.tags.mk-password-setting.enter-current-password%', currentPassword => {
+ passwordDialog('%i18n:desktop.tags.mk-password-setting.enter-new-password%', newPassword => {
+ this.api('i/change_password', {
+ current_password: currentPassword,
+ new_password: newPassword
+ }).then(() => {
+ notify('%i18n:desktop.tags.mk-password-setting.changed%');
+ });
+ });
+ });
+ };
+ </script>
+</mk-password-setting>