diff --git a/src/views/settings/components/Inputs.vue b/src/views/settings/components/Inputs.vue index 4fe634ebfdb069fb118cd29ee7759c44da798a11..2f582cd782fcea11cd8ba106256b153e18403dc3 100644 --- a/src/views/settings/components/Inputs.vue +++ b/src/views/settings/components/Inputs.vue @@ -99,6 +99,30 @@ @change="updateSetting($event, settingGroup.key, setting.key)"/> </el-form-item> </div> + <div v-if="settingGroup.key === ':rate_limit'"> + <div v-if="!rateLimitAuthUsers"> + <el-input :value="rateLimitAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, setting.key, 'scale', 'oneLimit', rateLimitAllUsers)"/> : + <el-input :value="rateLimitAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, setting.key, 'limit', 'oneLimit', rateLimitAllUsers)"/> + <div class="limit-button-container"> + <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], setting.key)"/> + <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> + </div> + </div> + <div v-if="rateLimitAuthUsers"> + <el-form-item label="Authenticated users:"> + <el-input :value="rateLimitAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, setting.key, 'scale', 'authUserslimit', [rateLimitUnauthUsers, rateLimitAuthUsers])"/> : + <el-input :value="rateLimitAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, setting.key, 'limit', 'authUserslimit', [rateLimitUnauthUsers, rateLimitAuthUsers])"/> + </el-form-item> + <el-form-item label="Unauthenticated users:"> + <el-input :value="rateLimitUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, setting.key, 'scale', 'unauthUsersLimit', [rateLimitUnauthUsers, rateLimitAuthUsers])"/> : + <el-input :value="rateLimitUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, setting.key, 'limit', 'unauthUsersLimit', [rateLimitUnauthUsers, rateLimitAuthUsers])"/> + </el-form-item> + <div class="limit-button-container"> + <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, setting.key)"/> + <p class="expl limit-expl">Set limit for all users</p> + </div> + </div> + </div> <p class="expl">{{ setting.description }}</p> </el-form-item> </template> @@ -153,6 +177,19 @@ export default { return this.data[this.setting.key] === ':disabled' ? ':disabled' : Object.keys(this.data[this.setting.key])[0] + }, + rateLimitAllUsers() { + return this.data[this.setting.key] ? Object.entries(this.data[this.setting.key])[0] : [null, null] + }, + rateLimitAuthUsers() { + return Array.isArray(this.data[this.setting.key]) + ? Object.entries(this.data[this.setting.key][1])[0] + : false + }, + rateLimitUnauthUsers() { + return Array.isArray(this.data[this.setting.key]) + ? Object.entries(this.data[this.setting.key][0])[0] + : false } }, methods: { @@ -194,6 +231,22 @@ export default { console.log(updatedValue) this.updateSetting(updatedValue, this.settingGroup.key, this.setting.key) }, + parseRateLimiter(value, input, typeOfInput, typeOfLimit, currentValue) { + if (typeOfLimit === 'oneLimit') { + const valueToSend = typeOfInput === 'scale' ? { 'tuple': [value, currentValue[1]] } : { 'tuple': [currentValue[0], value] } + this.updateSetting(valueToSend, 'rate_limit', input) + } else if (typeOfLimit === 'authUserslimit') { + const valueToSend = typeOfInput === 'scale' + ? [{ 'tuple': [currentValue[0][0], currentValue[0][1]] }, { 'tuple': [value, currentValue[1][1]] }] + : [{ 'tuple': [currentValue[0][0], currentValue[0][1]] }, { 'tuple': [currentValue[1][0], value] }] + this.updateSetting(valueToSend, 'rate_limit', input) + } else if (typeOfLimit === 'unauthUsersLimit') { + const valueToSend = typeOfInput === 'scale' + ? [{ 'tuple': [value, currentValue[0][1]] }, { 'tuple': [currentValue[1][0], currentValue[1][1]] }] + : [{ 'tuple': [currentValue[0][0], value] }, { 'tuple': [currentValue[1][0], currentValue[1][1]] }] + this.updateSetting(valueToSend, 'rate_limit', input) + } + }, processNestedData(value, tab, inputName, childName) { const updatedValue = { ...this.$store.state.settings.settings[tab][inputName], ...{ [childName]: value }} this.updateSetting(updatedValue, tab, inputName) @@ -209,6 +262,9 @@ export default { toggleAtomTuple(value, tab, input) { console.log(value) }, + toggleLimits(value, input) { + this.updateSetting(value, 'rate_limit', input) + }, updateSetting(value, tab, input) { this.$store.dispatch('UpdateSettings', { tab, data: { [input]: value }}) } diff --git a/src/views/settings/components/RateLimiters.vue b/src/views/settings/components/RateLimiters.vue index f0381846f4ce4df691a1cc5037ab9631abbfbd94..5c079b83f8bfb8a4baead7e63e7b58d4f1c6b8ba 100644 --- a/src/views/settings/components/RateLimiters.vue +++ b/src/views/settings/components/RateLimiters.vue @@ -1,221 +1,6 @@ <template> - <el-form v-if="!loading" ref="rateLimiters" :model="rateLimiters" :label-width="labelWidth"> - <el-form-item label="Search:"> - <div v-if="!searchLimitAuthUsers"> - <el-input :value="searchLimitAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'search', 'scale', 'oneLimit', searchLimitAllUsers)"/> : - <el-input :value="searchLimitAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'search', 'limit', 'oneLimit', searchLimitAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'search')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="searchLimitAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="searchLimitAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'search', 'scale', 'authUserslimit', [searchLimitUnauthUsers, searchLimitAuthUsers])"/> : - <el-input :value="searchLimitAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'search', 'limit', 'authUserslimit', [searchLimitUnauthUsers, searchLimitAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="searchLimitUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'search', 'scale', 'unauthUsersLimit', [searchLimitUnauthUsers, searchLimitAuthUsers])"/> : - <el-input :value="searchLimitUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'search', 'limit', 'unauthUsersLimit', [searchLimitUnauthUsers, searchLimitAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'search')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="App account creation:"> - <div v-if="!appAccountCreationAuthUsers"> - <el-input :value="appAccountCreationAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'app_account_creation', 'scale', 'oneLimit', appAccountCreationAllUsers)"/> : - <el-input :value="appAccountCreationAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'app_account_creation', 'limit', 'oneLimit', appAccountCreationAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'app_account_creation')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="appAccountCreationAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="appAccountCreationAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'app_account_creation', 'scale', 'authUserslimit', [appAccountCreationUnauthUsers, appAccountCreationAuthUsers])"/> : - <el-input :value="appAccountCreationAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'app_account_creation', 'limit', 'authUserslimit', [appAccountCreationUnauthUsers, appAccountCreationAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="appAccountCreationUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'app_account_creation', 'scale', 'unauthUsersLimit', [appAccountCreationUnauthUsers, appAccountCreationAuthUsers])"/> : - <el-input :value="appAccountCreationUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'app_account_creation', 'limit', 'unauthUsersLimit', [appAccountCreationUnauthUsers, appAccountCreationAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'app_account_creation')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Relations actions:"> - <div v-if="!relationsActionsAuthUsers"> - <el-input :value="relationsActionsAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relations_actions', 'scale', 'oneLimit', relationsActionsAllUsers)"/> : - <el-input :value="relationsActionsAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relations_actions', 'limit', 'oneLimit', relationsActionsAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'relations_actions')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="relationsActionsAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="relationsActionsAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relations_actions', 'scale', 'authUserslimit', [relationsActionsUnauthUsers, relationsActionsAuthUsers])"/> : - <el-input :value="relationsActionsAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relations_actions', 'limit', 'authUserslimit', [relationsActionsUnauthUsers, relationsActionsAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="relationsActionsUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relations_actions', 'scale', 'unauthUsersLimit', [relationsActionsUnauthUsers, relationsActionsAuthUsers])"/> : - <el-input :value="relationsActionsUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relations_actions', 'limit', 'unauthUsersLimit', [relationsActionsUnauthUsers, relationsActionsAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'relations_actions')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Relation ID Action:"> - <div v-if="!relationIdActionAuthUsers"> - <el-input :value="relationIdActionAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relation_id_action', 'scale', 'oneLimit', relationIdActionAllUsers)"/> : - <el-input :value="relationIdActionAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relation_id_action', 'limit', 'oneLimit', relationIdActionAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'relation_id_action')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="relationIdActionAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="relationIdActionAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relation_id_action', 'scale', 'authUserslimit', [relationIdActionUnauthUsers, relationIdActionAuthUsers])"/> : - <el-input :value="relationIdActionAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relation_id_action', 'limit', 'authUserslimit', [relationIdActionUnauthUsers, relationIdActionAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="relationIdActionUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'relation_id_action', 'scale', 'unauthUsersLimit', [relationIdActionUnauthUsers, relationIdActionAuthUsers])"/> : - <el-input :value="relationIdActionUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'relation_id_action', 'limit', 'unauthUsersLimit', [relationIdActionUnauthUsers, relationIdActionAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'relation_id_action')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Statuses actions:"> - <div v-if="!statusesActionsAuthUsers"> - <el-input :value="statusesActionsAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'statuses_actions', 'scale', 'oneLimit', statusesActionsAllUsers)"/> : - <el-input :value="statusesActionsAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'statuses_actions', 'limit', 'oneLimit', statusesActionsAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'statuses_actions')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="statusesActionsAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="statusesActionsAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'statuses_actions', 'scale', 'authUserslimit', [statusesActionsUnauthUsers, statusesActionsAuthUsers])"/> : - <el-input :value="statusesActionsAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'statuses_actions', 'limit', 'authUserslimit', [statusesActionsUnauthUsers, statusesActionsAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="statusesActionsUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'statuses_actions', 'scale', 'unauthUsersLimit', [statusesActionsUnauthUsers, statusesActionsAuthUsers])"/> : - <el-input :value="statusesActionsUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'statuses_actions', 'limit', 'unauthUsersLimit', [statusesActionsUnauthUsers, statusesActionsAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'statuses_actions')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Status ID Action:"> - <div v-if="!statusIdActionAuthUsers"> - <el-input :value="statusIdActionAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'status_id_action', 'scale', 'oneLimit', statusIdActionAllUsers)"/> : - <el-input :value="statusIdActionAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'status_id_action', 'limit', 'oneLimit', statusIdActionAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'status_id_action')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="statusIdActionAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="statusIdActionAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'status_id_action', 'scale', 'authUserslimit', [statusIdActionUnauthUsers, statusIdActionAuthUsers])"/> : - <el-input :value="statusIdActionAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'status_id_action', 'limit', 'authUserslimit', [statusIdActionUnauthUsers, statusIdActionAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="statusIdActionUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'status_id_action', 'scale', 'unauthUsersLimit', [statusIdActionUnauthUsers, statusIdActionAuthUsers])"/> : - <el-input :value="statusIdActionUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'status_id_action', 'limit', 'unauthUsersLimit', [statusIdActionUnauthUsers, statusIdActionAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'status_id_action')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Password reset:"> - <div v-if="!passwordResetAuthUsers"> - <el-input :value="passwordResetAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'password_reset', 'scale', 'oneLimit', passwordResetAllUsers)"/> : - <el-input :value="passwordResetAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'password_reset', 'limit', 'oneLimit', passwordResetAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'password_reset')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="passwordResetAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="passwordResetAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'password_reset', 'scale', 'authUserslimit', [passwordResetUnauthUsers, passwordResetAuthUsers])"/> : - <el-input :value="passwordResetAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'password_reset', 'limit', 'authUserslimit', [passwordResetUnauthUsers, passwordResetAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="passwordResetUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'password_reset', 'scale', 'unauthUsersLimit', [passwordResetUnauthUsers, passwordResetAuthUsers])"/> : - <el-input :value="passwordResetUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'password_reset', 'limit', 'unauthUsersLimit', [passwordResetUnauthUsers, passwordResetAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'password_reset')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Account confirmation resend:"> - <div v-if="!accountConfirmationResendAuthUsers"> - <el-input :value="accountConfirmationResendAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'scale', 'oneLimit', accountConfirmationResendAllUsers)"/> : - <el-input :value="accountConfirmationResendAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'limit', 'oneLimit', accountConfirmationResendAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'account_confirmation_resend')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="accountConfirmationResendAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="accountConfirmationResendAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'scale', 'authUserslimit', [accountConfirmationResendUnauthUsers, accountConfirmationResendAuthUsers])"/> : - <el-input :value="accountConfirmationResendAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'limit', 'authUserslimit', [accountConfirmationResendUnauthUsers, accountConfirmationResendAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="accountConfirmationResendUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'scale', 'unauthUsersLimit', [accountConfirmationResendUnauthUsers, accountConfirmationResendAuthUsers])"/> : - <el-input :value="accountConfirmationResendUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'account_confirmation_resend', 'limit', 'unauthUsersLimit', [accountConfirmationResendUnauthUsers, accountConfirmationResendAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'account_confirmation_resend')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> - <el-form-item label="Activity pub routes:"> - <div v-if="!activityPubRoutesAuthUsers"> - <el-input :value="activityPubRoutesAllUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'ap_routes', 'scale', 'oneLimit', activityPubRoutesAllUsers)"/> : - <el-input :value="activityPubRoutesAllUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'ap_routes', 'limit', 'oneLimit', activityPubRoutesAllUsers)"/> - <div class="limit-button-container"> - <el-button icon="el-icon-plus" circle @click="toggleLimits([{ 'tuple': [null, null] }, { 'tuple': [null, null] }], 'ap_routes')"/> - <p class="expl limit-expl">Set different limits for unauthenticated and authenticated users</p> - </div> - </div> - <div v-if="activityPubRoutesAuthUsers"> - <el-form-item label="Authenticated users:"> - <el-input :value="activityPubRoutesAuthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'ap_routes', 'scale', 'authUserslimit', [activityPubRoutesUnauthUsers, activityPubRoutesAuthUsers])"/> : - <el-input :value="activityPubRoutesAuthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'ap_routes', 'limit', 'authUserslimit', [activityPubRoutesUnauthUsers, activityPubRoutesAuthUsers])"/> - </el-form-item> - <el-form-item label="Unauthenticated users:"> - <el-input :value="activityPubRoutesUnauthUsers[0]" placeholder="scale" class="scale-input" @input="parseRateLimiter($event, 'ap_routes', 'scale', 'unauthUsersLimit', [activityPubRoutesUnauthUsers, activityPubRoutesAuthUsers])"/> : - <el-input :value="activityPubRoutesUnauthUsers[1]" placeholder="limit" class="limit-input" @input="parseRateLimiter($event, 'ap_routes', 'limit', 'unauthUsersLimit', [activityPubRoutesUnauthUsers, activityPubRoutesAuthUsers])"/> - </el-form-item> - <div class="limit-button-container"> - <el-button icon="el-icon-minus" circle @click="toggleLimits({ 'tuple': [null, null] }, 'ap_routes')"/> - <p class="expl limit-expl">Set limit for all users</p> - </div> - </div> - </el-form-item> + <el-form v-if="!loading" ref="rateLimiters" :model="rateLimitersData" :label-width="labelWidth"> + <setting :setting-group="rateLimiters" :data="rateLimitersData"/> <el-form-item> <el-button type="primary" @click="onSubmit">Submit</el-button> </el-form-item> @@ -225,129 +10,20 @@ <script> import i18n from '@/lang' import { mapGetters } from 'vuex' +import Setting from './Setting' export default { name: 'RateLimiters', + components: { Setting }, computed: { ...mapGetters([ - 'rateLimiters' + 'settings' ]), - accountConfirmationResendAllUsers() { - return this.rateLimiters.account_confirmation_resend ? this.rateLimiters.account_confirmation_resend.tuple : [null, null] - }, - accountConfirmationResendAuthUsers() { - return Array.isArray(this.rateLimiters.account_confirmation_resend) - ? this.rateLimiters.account_confirmation_resend[1].tuple - : false - }, - accountConfirmationResendUnauthUsers() { - return Array.isArray(this.rateLimiters.account_confirmation_resend) - ? this.rateLimiters.account_confirmation_resend[0].tuple - : false - }, - activityPubRoutesAllUsers() { - return this.rateLimiters.ap_routes ? this.rateLimiters.ap_routes.tuple : [null, null] - }, - activityPubRoutesAuthUsers() { - return Array.isArray(this.rateLimiters.ap_routes) - ? this.rateLimiters.ap_routes[1].tuple - : false - }, - activityPubRoutesUnauthUsers() { - return Array.isArray(this.rateLimiters.ap_routes) - ? this.rateLimiters.ap_routes[0].tuple - : false - }, - appAccountCreationAllUsers() { - return this.rateLimiters.app_account_creation ? this.rateLimiters.app_account_creation.tuple : [null, null] - }, - appAccountCreationAuthUsers() { - return Array.isArray(this.rateLimiters.app_account_creation) - ? this.rateLimiters.app_account_creation[1].tuple - : false - }, - appAccountCreationUnauthUsers() { - return Array.isArray(this.rateLimiters.app_account_creation) - ? this.rateLimiters.app_account_creation[0].tuple - : false - }, - passwordResetAllUsers() { - return this.rateLimiters.password_reset ? this.rateLimiters.password_reset.tuple : [null, null] - }, - passwordResetAuthUsers() { - return Array.isArray(this.rateLimiters.password_reset) - ? this.rateLimiters.password_reset[1].tuple - : false + rateLimiters() { + return this.settings.description.find(setting => setting.key === ':rate_limit') }, - passwordResetUnauthUsers() { - return Array.isArray(this.rateLimiters.password_reset) - ? this.rateLimiters.password_reset[0].tuple - : false - }, - relationsActionsAllUsers() { - return this.rateLimiters.relations_actions ? this.rateLimiters.relations_actions.tuple : [null, null] - }, - relationsActionsAuthUsers() { - return Array.isArray(this.rateLimiters.relations_actions) - ? this.rateLimiters.relations_actions[1].tuple - : false - }, - relationsActionsUnauthUsers() { - return Array.isArray(this.rateLimiters.relations_actions) - ? this.rateLimiters.relations_actions[0].tuple - : false - }, - relationIdActionAllUsers() { - return this.rateLimiters.relation_id_action ? this.rateLimiters.relation_id_action.tuple : [null, null] - }, - relationIdActionAuthUsers() { - return Array.isArray(this.rateLimiters.relation_id_action) - ? this.rateLimiters.relation_id_action[1].tuple - : false - }, - relationIdActionUnauthUsers() { - return Array.isArray(this.rateLimiters.relation_id_action) - ? this.rateLimiters.relation_id_action[0].tuple - : false - }, - searchLimitAllUsers() { - return this.rateLimiters.search ? this.rateLimiters.search.tuple : [null, null] - }, - searchLimitAuthUsers() { - return Array.isArray(this.rateLimiters.search) - ? this.rateLimiters.search[1].tuple - : false - }, - searchLimitUnauthUsers() { - return Array.isArray(this.rateLimiters.search) - ? this.rateLimiters.search[0].tuple - : false - }, - statusesActionsAllUsers() { - return this.rateLimiters.statuses_actions ? this.rateLimiters.statuses_actions.tuple : [null, null] - }, - statusesActionsAuthUsers() { - return Array.isArray(this.rateLimiters.statuses_actions) - ? this.rateLimiters.statuses_actions[1].tuple - : false - }, - statusesActionsUnauthUsers() { - return Array.isArray(this.rateLimiters.statuses_actions) - ? this.rateLimiters.statuses_actions[0].tuple - : false - }, - statusIdActionAllUsers() { - return this.rateLimiters.status_id_action ? this.rateLimiters.status_id_action.tuple : [null, null] - }, - statusIdActionAuthUsers() { - return Array.isArray(this.rateLimiters.status_id_action) - ? this.rateLimiters.status_id_action[1].tuple - : false - }, - statusIdActionUnauthUsers() { - return Array.isArray(this.rateLimiters.status_id_action) - ? this.rateLimiters.status_id_action[0].tuple - : false + rateLimitersData() { + return this.settings.settings[':rate_limit'] }, isMobile() { return this.$store.state.app.device === 'mobile' @@ -360,28 +36,6 @@ export default { } }, methods: { - parseRateLimiter(value, input, typeOfInput, typeOfLimit, currentValue) { - if (typeOfLimit === 'oneLimit') { - const valueToSend = typeOfInput === 'scale' ? { 'tuple': [value, currentValue[1]] } : { 'tuple': [currentValue[0], value] } - this.updateSetting(valueToSend, 'rate_limit', input) - } else if (typeOfLimit === 'authUserslimit') { - const valueToSend = typeOfInput === 'scale' - ? [{ 'tuple': [currentValue[0][0], currentValue[0][1]] }, { 'tuple': [value, currentValue[1][1]] }] - : [{ 'tuple': [currentValue[0][0], currentValue[0][1]] }, { 'tuple': [currentValue[1][0], value] }] - this.updateSetting(valueToSend, 'rate_limit', input) - } else if (typeOfLimit === 'unauthUsersLimit') { - const valueToSend = typeOfInput === 'scale' - ? [{ 'tuple': [value, currentValue[0][1]] }, { 'tuple': [currentValue[1][0], currentValue[1][1]] }] - : [{ 'tuple': [currentValue[0][0], value] }, { 'tuple': [currentValue[1][0], currentValue[1][1]] }] - this.updateSetting(valueToSend, 'rate_limit', input) - } - }, - toggleLimits(value, input) { - this.updateSetting(value, 'rate_limit', input) - }, - updateSetting(value, tab, input) { - this.$store.dispatch('UpdateSettings', { tab, data: { [input]: value }}) - }, async onSubmit() { try { await this.$store.dispatch('SubmitChanges')