summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-01-26 17:53:35 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-01-26 17:53:35 +0900
commit0854f2e180be7b2ed4e7ea68d7f45cc156a95627 (patch)
treeddf9b81d6a0b3c2d3e85ba73ae3aab3c6107221a /src
parentResolve #2253 (diff)
downloadsharkey-0854f2e180be7b2ed4e7ea68d7f45cc156a95627.tar.gz
sharkey-0854f2e180be7b2ed4e7ea68d7f45cc156a95627.tar.bz2
sharkey-0854f2e180be7b2ed4e7ea68d7f45cc156a95627.zip
管理画面からリモートユーザー情報を更新できるように (#3992)
Diffstat (limited to 'src')
-rw-r--r--src/client/app/admin/views/users.vue16
-rw-r--r--src/server/api/common/getters.ts42
-rw-r--r--src/server/api/endpoints/admin/update-remote-user.ts36
3 files changed, 92 insertions, 2 deletions
diff --git a/src/client/app/admin/views/users.vue b/src/client/app/admin/views/users.vue
index 6b829a2f8d..09d074eee2 100644
--- a/src/client/app/admin/views/users.vue
+++ b/src/client/app/admin/views/users.vue
@@ -20,6 +20,7 @@
<ui-button @click="suspendUser" :disabled="suspending"><fa :icon="faSnowflake"/> {{ $t('suspend') }}</ui-button>
<ui-button @click="unsuspendUser" :disabled="unsuspending">{{ $t('unsuspend') }}</ui-button>
</ui-horizon-group>
+ <ui-button v-if="user.host != null" @click="updateRemoteUser"><fa :icon="faSync"/> {{ $t('update-remote-user') }}</ui-button>
<ui-textarea v-if="user" :value="user | json5" readonly tall style="margin-top:16px;"></ui-textarea>
</div>
</div>
@@ -65,7 +66,7 @@
import Vue from 'vue';
import i18n from '../../i18n';
import parseAcct from "../../../../misc/acct/parse";
-import { faCertificate, faUsers, faTerminal, faSearch, faKey } from '@fortawesome/free-solid-svg-icons';
+import { faCertificate, faUsers, faTerminal, faSearch, faKey, faSync } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake } from '@fortawesome/free-regular-svg-icons';
import XUser from './users.user.vue';
@@ -89,7 +90,7 @@ export default Vue.extend({
offset: 0,
users: [],
existMore: false,
- faTerminal, faCertificate, faUsers, faSnowflake, faSearch, faKey
+ faTerminal, faCertificate, faUsers, faSnowflake, faSearch, faKey, faSync
};
},
@@ -265,6 +266,17 @@ export default Vue.extend({
this.refreshUser();
},
+ async updateRemoteUser() {
+ this.$root.api('admin/update-remote-user', { userId: this.user._id }).then(res => {
+ this.$root.dialog({
+ type: 'success',
+ text: this.$t('remote-user-updated')
+ });
+ });
+
+ this.refreshUser();
+ },
+
async getConfirmed(text: string): Promise<Boolean> {
const confirm = await this.$root.dialog({
type: 'warning',
diff --git a/src/server/api/common/getters.ts b/src/server/api/common/getters.ts
index 1fce58b20a..1cd054cab1 100644
--- a/src/server/api/common/getters.ts
+++ b/src/server/api/common/getters.ts
@@ -1,5 +1,6 @@
import * as mongo from 'mongodb';
import Note from "../../../models/note";
+import User, { isRemoteUser, isLocalUser } from "../../../models/user";
/**
* Get valied note for API processing
@@ -16,3 +17,44 @@ export async function getValiedNote(noteId: mongo.ObjectID) {
return note;
}
+
+/**
+ * Get user for API processing
+ */
+export async function getUser(userId: mongo.ObjectID) {
+ const user = await User.findOne({
+ _id: userId
+ });
+
+ if (user == null) {
+ throw 'user not found';
+ }
+
+ return user;
+}
+
+/**
+ * Get remote user for API processing
+ */
+export async function getRemoteUser(userId: mongo.ObjectID) {
+ const user = await getUser(userId);
+
+ if (!isRemoteUser(user)) {
+ throw 'user is not a remote user';
+ }
+
+ return user;
+}
+
+/**
+ * Get local user for API processing
+ */
+export async function getLocalUser(userId: mongo.ObjectID) {
+ const user = await getUser(userId);
+
+ if (!isLocalUser(user)) {
+ throw 'user is not a local user';
+ }
+
+ return user;
+}
diff --git a/src/server/api/endpoints/admin/update-remote-user.ts b/src/server/api/endpoints/admin/update-remote-user.ts
new file mode 100644
index 0000000000..9288ce1fb7
--- /dev/null
+++ b/src/server/api/endpoints/admin/update-remote-user.ts
@@ -0,0 +1,36 @@
+import * as mongo from 'mongodb';
+import $ from 'cafy';
+import ID, { transform } from '../../../../misc/cafy-id';
+import define from '../../define';
+import { getRemoteUser } from '../../common/getters';
+import { updatePerson } from '../../../../remote/activitypub/models/person';
+
+export const meta = {
+ desc: {
+ 'ja-JP': '指定されたリモートユーザーの情報を更新します。',
+ 'en-US': 'Update specified remote user information.'
+ },
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ userId: {
+ validator: $.type(ID),
+ transform: transform,
+ desc: {
+ 'ja-JP': '対象のユーザーID',
+ 'en-US': 'The user ID which you want to update'
+ }
+ },
+ }
+};
+
+export default define(meta, (ps) => new Promise((res, rej) => {
+ updatePersonById(ps.userId).then(() => res(), e => rej(e));
+}));
+
+async function updatePersonById(userId: mongo.ObjectID) {
+ const user = await getRemoteUser(userId);
+ await updatePerson(user.uri);
+}