mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-30 07:03:08 +02:00
Implement suspend account
This commit is contained in:
parent
38b9ed3f27
commit
bd207b5012
8 changed files with 54 additions and 4 deletions
18
cli/suspend.js
Normal file
18
cli/suspend.js
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
const mongo = require('mongodb');
|
||||||
|
const User = require('../built/models/user').default;
|
||||||
|
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
|
||||||
|
const userId = new mongo.ObjectID(args[0]);
|
||||||
|
|
||||||
|
console.log(`Suspending ${userId}...`);
|
||||||
|
|
||||||
|
User.update({ _id: userId }, {
|
||||||
|
$set: {
|
||||||
|
isSuspended: true
|
||||||
|
}
|
||||||
|
}).then(() => {
|
||||||
|
console.log(`Suspended ${userId}`);
|
||||||
|
}, e => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
|
@ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue:
|
||||||
no-users: "No users"
|
no-users: "No users"
|
||||||
|
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "This user is a remote user, so the information is not accurate. "
|
is-remote: "This user is a remote user, so the information is not accurate. "
|
||||||
view-remote: "See accurate information"
|
view-remote: "See accurate information"
|
||||||
|
|
||||||
|
@ -594,6 +595,7 @@ mobile/views/pages/user.vue:
|
||||||
overview: "Overview"
|
overview: "Overview"
|
||||||
timeline: "Timeline"
|
timeline: "Timeline"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "This user is a remote user, so the information is not accurate. "
|
is-remote: "This user is a remote user, so the information is not accurate. "
|
||||||
view-remote: "See accurate information"
|
view-remote: "See accurate information"
|
||||||
|
|
||||||
|
|
|
@ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue:
|
||||||
no-users: "Pas d'utilisateurs"
|
no-users: "Pas d'utilisateurs"
|
||||||
|
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées "
|
is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées "
|
||||||
view-remote: "Voir les informations détaillées"
|
view-remote: "Voir les informations détaillées"
|
||||||
|
|
||||||
|
@ -594,6 +595,7 @@ mobile/views/pages/user.vue:
|
||||||
overview: "Aperçu"
|
overview: "Aperçu"
|
||||||
timeline: "Fil d'actualité"
|
timeline: "Fil d'actualité"
|
||||||
media: "Media"
|
media: "Media"
|
||||||
|
is-suspended: "This account has been suspended."
|
||||||
is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées "
|
is-remote: "Cet utilisateur n'est pas un utilisateur de Misskey. Certaines informations peuvent être erronées "
|
||||||
view-remote: "Voir les informations détaillées"
|
view-remote: "Voir les informations détaillées"
|
||||||
|
|
||||||
|
|
|
@ -406,6 +406,7 @@ desktop/views/pages/user/user.friends.vue:
|
||||||
no-users: "よく話すユーザーはいません"
|
no-users: "よく話すユーザーはいません"
|
||||||
|
|
||||||
desktop/views/pages/user/user.header.vue:
|
desktop/views/pages/user/user.header.vue:
|
||||||
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
is-remote: "このユーザーはリモートユーザーです。"
|
||||||
view-remote: "正確な情報を見る"
|
view-remote: "正確な情報を見る"
|
||||||
|
|
||||||
|
@ -594,6 +595,7 @@ mobile/views/pages/user.vue:
|
||||||
overview: "概要"
|
overview: "概要"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
media: "メディア"
|
media: "メディア"
|
||||||
|
is-suspended: "このユーザーは凍結されています。"
|
||||||
is-remote: "このユーザーはリモートユーザーです。"
|
is-remote: "このユーザーはリモートユーザーです。"
|
||||||
view-remote: "正確な情報を見る"
|
view-remote: "正確な情報を見る"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="header" :data-is-dark-background="user.bannerUrl != null">
|
<div class="header" :data-is-dark-background="user.bannerUrl != null">
|
||||||
|
<div class="is-suspended" v-if="user.isSuspended"><p>%fa:exclamation-triangle% %i18n:@is-suspended%</p></div>
|
||||||
<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div>
|
<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div>
|
||||||
<div class="banner-container" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''">
|
<div class="banner-container" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''">
|
||||||
<div class="banner" ref="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''" @click="onBannerClick"></div>
|
<div class="banner" ref="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=2048)` : ''" @click="onBannerClick"></div>
|
||||||
|
@ -73,10 +74,17 @@ export default Vue.extend({
|
||||||
background #f7f7f7
|
background #f7f7f7
|
||||||
box-shadow 0 1px 1px rgba(0, 0, 0, 0.075)
|
box-shadow 0 1px 1px rgba(0, 0, 0, 0.075)
|
||||||
|
|
||||||
|
> .is-suspended
|
||||||
> .is-remote
|
> .is-remote
|
||||||
padding 16px
|
padding 16px
|
||||||
color #573c08
|
|
||||||
background #fff0db
|
&.is-suspended
|
||||||
|
color #570808
|
||||||
|
background #ffdbdb
|
||||||
|
|
||||||
|
&.is-remote
|
||||||
|
color #573c08
|
||||||
|
background #fff0db
|
||||||
|
|
||||||
> p
|
> p
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
<mk-ui>
|
<mk-ui>
|
||||||
<span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span>
|
<span slot="header" v-if="!fetching">%fa:user% {{ user | userName }}</span>
|
||||||
<main v-if="!fetching">
|
<main v-if="!fetching">
|
||||||
|
<div class="is-suspended" v-if="user.isSuspended"><p>%fa:exclamation-triangle% %i18n:@is-suspended%</p></div>
|
||||||
<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div>
|
<div class="is-remote" v-if="user.host != null"><p>%fa:exclamation-triangle% %i18n:@is-remote%<a :href="user.url || user.uri" target="_blank">%i18n:@view-remote%</a></p></div>
|
||||||
<header>
|
<header>
|
||||||
<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''"></div>
|
<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''"></div>
|
||||||
|
@ -110,10 +111,17 @@ export default Vue.extend({
|
||||||
@import '~const.styl'
|
@import '~const.styl'
|
||||||
|
|
||||||
main
|
main
|
||||||
|
> .is-suspended
|
||||||
> .is-remote
|
> .is-remote
|
||||||
padding 16px
|
padding 16px
|
||||||
color #573c08
|
|
||||||
background #fff0db
|
&.is-suspended
|
||||||
|
color #570808
|
||||||
|
background #ffdbdb
|
||||||
|
|
||||||
|
&.is-remote
|
||||||
|
color #573c08
|
||||||
|
background #fff0db
|
||||||
|
|
||||||
> p
|
> p
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
|
|
|
@ -11,6 +11,11 @@ const log = debug('misskey:activitypub');
|
||||||
* Imageを作成します。
|
* Imageを作成します。
|
||||||
*/
|
*/
|
||||||
export async function createImage(actor: IRemoteUser, value): Promise<IDriveFile> {
|
export async function createImage(actor: IRemoteUser, value): Promise<IDriveFile> {
|
||||||
|
// 投稿者が凍結されていたらスキップ
|
||||||
|
if (actor.isSuspended) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const image = await new Resolver().resolve(value);
|
const image = await new Resolver().resolve(value);
|
||||||
|
|
||||||
if (image.url == null) {
|
if (image.url == null) {
|
||||||
|
|
|
@ -58,6 +58,11 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
|
||||||
// 投稿者をフェッチ
|
// 投稿者をフェッチ
|
||||||
const actor = await resolvePerson(note.attributedTo) as IRemoteUser;
|
const actor = await resolvePerson(note.attributedTo) as IRemoteUser;
|
||||||
|
|
||||||
|
// 投稿者が凍結されていたらスキップ
|
||||||
|
if (actor.isSuspended) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
//#region Visibility
|
//#region Visibility
|
||||||
let visibility = 'public';
|
let visibility = 'public';
|
||||||
if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted';
|
if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted';
|
||||||
|
|
Loading…
Reference in a new issue