インスタンスブロックを設定できるように
This commit is contained in:
		| @@ -1486,6 +1486,8 @@ admin/views/federation.vue: | |||||||
|   chart-spans: |   chart-spans: | ||||||
|     hour: "1時間ごと" |     hour: "1時間ごと" | ||||||
|     day: "1日ごと" |     day: "1日ごと" | ||||||
|  |   blocked-hosts: "ブロック" | ||||||
|  |   blocked-hosts-info: "ブロックしたいホストを改行で区切って記述します。" | ||||||
|  |  | ||||||
| desktop/views/pages/welcome.vue: | desktop/views/pages/welcome.vue: | ||||||
|   about: "詳しく..." |   about: "詳しく..." | ||||||
|   | |||||||
| @@ -54,7 +54,6 @@ | |||||||
| 					<span>{{ $t('latest-request-received-at') }}</span> | 					<span>{{ $t('latest-request-received-at') }}</span> | ||||||
| 					<template #prefix><fa :icon="faInbox"/></template> | 					<template #prefix><fa :icon="faInbox"/></template> | ||||||
| 				</ui-input> | 				</ui-input> | ||||||
| 				<ui-switch v-model="instance.isBlocked" @change="updateInstance()">{{ $t('block') }}</ui-switch> |  | ||||||
| 				<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch> | 				<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch> | ||||||
| 				<details> | 				<details> | ||||||
| 					<summary>{{ $t('charts') }}</summary> | 					<summary>{{ $t('charts') }}</summary> | ||||||
| @@ -142,6 +141,16 @@ | |||||||
| 			<ui-info v-if="instances.length == limit">{{ $t('result-is-truncated', { n: limit }) }}</ui-info> | 			<ui-info v-if="instances.length == limit">{{ $t('result-is-truncated', { n: limit }) }}</ui-info> | ||||||
| 		</section> | 		</section> | ||||||
| 	</ui-card> | 	</ui-card> | ||||||
|  |  | ||||||
|  | 	<ui-card> | ||||||
|  | 		<template #title><fa :icon="faBan"/> {{ $t('blocked-hosts') }}</template> | ||||||
|  | 		<section class="fit-top"> | ||||||
|  | 			<ui-textarea v-model="blockedHosts"> | ||||||
|  | 				<template #desc>{{ $t('blocked-hosts-info') }}</template> | ||||||
|  | 			</ui-textarea> | ||||||
|  | 			<ui-button @click="saveBlockedHosts">{{ $t('save') }}</ui-button> | ||||||
|  | 		</section> | ||||||
|  | 	</ui-card> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| @@ -149,7 +158,7 @@ | |||||||
| import Vue from 'vue'; | import Vue from 'vue'; | ||||||
| import i18n from '../../i18n'; | import i18n from '../../i18n'; | ||||||
| import { faPaperPlane } from '@fortawesome/free-regular-svg-icons'; | import { faPaperPlane } from '@fortawesome/free-regular-svg-icons'; | ||||||
| import { faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; | import { faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; | ||||||
| import ApexCharts from 'apexcharts'; | import ApexCharts from 'apexcharts'; | ||||||
| import * as tinycolor from 'tinycolor2'; | import * as tinycolor from 'tinycolor2'; | ||||||
|  |  | ||||||
| @@ -176,7 +185,8 @@ export default Vue.extend({ | |||||||
| 			chartSrc: 'requests', | 			chartSrc: 'requests', | ||||||
| 			chartSpan: 'hour', | 			chartSpan: 'hour', | ||||||
| 			chartInstance: null, | 			chartInstance: null, | ||||||
| 			faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox | 			blockedHosts: '', | ||||||
|  | 			faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox | ||||||
| 		}; | 		}; | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| @@ -246,6 +256,10 @@ export default Vue.extend({ | |||||||
|  |  | ||||||
| 	mounted() { | 	mounted() { | ||||||
| 		this.fetchInstances(); | 		this.fetchInstances(); | ||||||
|  |  | ||||||
|  | 		this.$root.getMeta().then(meta => { | ||||||
|  | 			this.blockedHosts = meta.blockedHosts.join('\n'); | ||||||
|  | 		}); | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	beforeDestroy() { | 	beforeDestroy() { | ||||||
| @@ -477,6 +491,22 @@ export default Vue.extend({ | |||||||
| 				}] | 				}] | ||||||
| 			}; | 			}; | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | 		saveBlockedHosts() { | ||||||
|  | 			this.$root.api('admin/update-meta', { | ||||||
|  | 				blockedHosts: this.blockedHosts.split('\n') | ||||||
|  | 			}).then(() => { | ||||||
|  | 				this.$root.dialog({ | ||||||
|  | 					type: 'success', | ||||||
|  | 					text: this.$t('saved') | ||||||
|  | 				}); | ||||||
|  | 			}).catch(e => { | ||||||
|  | 				this.$root.dialog({ | ||||||
|  | 					type: 'error', | ||||||
|  | 					text: e | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -70,6 +70,13 @@ export const meta = { | |||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | 		blockedHosts: { | ||||||
|  | 			validator: $.optional.nullable.arr($.str), | ||||||
|  | 			desc: { | ||||||
|  | 				'ja-JP': 'ブロックするホスト' | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  |  | ||||||
| 		mascotImageUrl: { | 		mascotImageUrl: { | ||||||
| 			validator: $.optional.nullable.str, | 			validator: $.optional.nullable.str, | ||||||
| 			desc: { | 			desc: { | ||||||
| @@ -389,6 +396,10 @@ export default define(meta, async (ps) => { | |||||||
| 		set.hiddenTags = ps.hiddenTags; | 		set.hiddenTags = ps.hiddenTags; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (Array.isArray(ps.blockedHosts)) { | ||||||
|  | 		set.blockedHosts = ps.blockedHosts; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (ps.mascotImageUrl !== undefined) { | 	if (ps.mascotImageUrl !== undefined) { | ||||||
| 		set.mascotImageUrl = ps.mascotImageUrl; | 		set.mascotImageUrl = ps.mascotImageUrl; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -165,6 +165,7 @@ export default define(meta, async (ps, me) => { | |||||||
| 		response.useStarForReactionFallback = instance.useStarForReactionFallback; | 		response.useStarForReactionFallback = instance.useStarForReactionFallback; | ||||||
| 		response.pinnedUsers = instance.pinnedUsers; | 		response.pinnedUsers = instance.pinnedUsers; | ||||||
| 		response.hiddenTags = instance.hiddenTags; | 		response.hiddenTags = instance.hiddenTags; | ||||||
|  | 		response.blockedHosts = instance.blockedHosts; | ||||||
| 		response.recaptchaSecretKey = instance.recaptchaSecretKey; | 		response.recaptchaSecretKey = instance.recaptchaSecretKey; | ||||||
| 		response.proxyAccount = instance.proxyAccount; | 		response.proxyAccount = instance.proxyAccount; | ||||||
| 		response.twitterConsumerKey = instance.twitterConsumerKey; | 		response.twitterConsumerKey = instance.twitterConsumerKey; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo