pl-api: Support instance rules management on GoToSocial
Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
@ -4308,11 +4308,11 @@ class PlApiClient {
|
||||
/**
|
||||
* List rules
|
||||
*
|
||||
* Requires features{@link Features['pleromaAdminRules']}.
|
||||
* Requires features{@link Features['adminRules']}.
|
||||
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminrules}
|
||||
*/
|
||||
getRules: async () => {
|
||||
const response = await this.request('/api/v1/pleroma/admin/rules');
|
||||
const response = await this.request(this.features.version.software === GOTOSOCIAL ? '/api/v1/admin/instance/rules' : '/api/v1/pleroma/admin/rules');
|
||||
|
||||
return v.parse(filteredArray(adminRuleSchema), response.json);
|
||||
},
|
||||
@ -4320,11 +4320,14 @@ class PlApiClient {
|
||||
/**
|
||||
* Create a rule
|
||||
*
|
||||
* Requires features{@link Features['pleromaAdminRules']}.
|
||||
* Requires features{@link Features['adminRules']}.
|
||||
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#post-apiv1pleromaadminrules}
|
||||
*/
|
||||
createRule: async (params: AdminCreateRuleParams) => {
|
||||
const response = await this.request('/api/v1/pleroma/admin/rules', { method: 'POST', body: params });
|
||||
const response = await this.request(
|
||||
this.features.version.software === GOTOSOCIAL ? '/api/v1/admin/instance/rules' : '/api/v1/pleroma/admin/rules',
|
||||
{ method: 'POST', body: params },
|
||||
);
|
||||
|
||||
return v.parse(adminRuleSchema, response.json);
|
||||
},
|
||||
@ -4332,11 +4335,14 @@ class PlApiClient {
|
||||
/**
|
||||
* Update a rule
|
||||
*
|
||||
* Requires features{@link Features['pleromaAdminRules']}.
|
||||
* Requires features{@link Features['adminRules']}.
|
||||
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#patch-apiv1pleromaadminrulesid}
|
||||
*/
|
||||
updateRule: async (ruleId: string, params: AdminUpdateRuleParams) => {
|
||||
const response = await this.request(`/api/v1/pleroma/admin/rules/${ruleId}`, { method: 'PATCH', body: params });
|
||||
const response = await this.request(
|
||||
`/api/v1/${this.features.version.software === GOTOSOCIAL ? 'admin/instance' : 'pleroma/admin'}/rules/${ruleId}`,
|
||||
{ method: 'PATCH', body: params },
|
||||
);
|
||||
|
||||
return v.parse(adminRuleSchema, response.json);
|
||||
},
|
||||
@ -4344,11 +4350,14 @@ class PlApiClient {
|
||||
/**
|
||||
* Delete a rule
|
||||
*
|
||||
* Requires features{@link Features['pleromaAdminRules']}.
|
||||
* Requires features{@link Features['adminRules']}.
|
||||
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#delete-apiv1pleromaadminrulesid}
|
||||
*/
|
||||
deleteRule: async (ruleId: string) => {
|
||||
const response = await this.request(`/api/v1/pleroma/admin/rules/${ruleId}`, { method: 'DELETE' });
|
||||
const response = await this.request(
|
||||
`/api/v1/${this.features.version.software === GOTOSOCIAL ? 'admin/instance' : 'pleroma/admin'}/rules/${ruleId}`,
|
||||
{ method: 'DELETE' },
|
||||
);
|
||||
|
||||
return response.json as {};
|
||||
},
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import * as v from 'valibot';
|
||||
|
||||
import { datetimeSchema } from '../utils';
|
||||
|
||||
/**
|
||||
* @category Admin schemas
|
||||
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminrules}
|
||||
@ -9,6 +11,9 @@ const adminRuleSchema = v.object({
|
||||
text: v.fallback(v.string(), ''),
|
||||
hint: v.fallback(v.string(), ''),
|
||||
priority: v.fallback(v.nullable(v.number()), null),
|
||||
|
||||
created_at: v.fallback(v.optional(datetimeSchema), undefined),
|
||||
updated_at: v.fallback(v.optional(datetimeSchema), undefined),
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@ -681,6 +681,28 @@ const getFeatures = (instance: Instance) => {
|
||||
v.software === PLEROMA,
|
||||
]),
|
||||
|
||||
/**
|
||||
* Ability to manage instance rules by admins.
|
||||
* @see GET /api/v1/pleroma/admin/rules
|
||||
* @see POST /api/v1/pleroma/admin/rules
|
||||
* @see PATCH /api/v1/pleroma/admin/rules/:id
|
||||
* @see DELETE /api/v1/pleroma/admin/rules/:id
|
||||
* @see GET /api/v1/admin/instance/rules
|
||||
* @see GET /api/v1/admin/instance/rules/:id
|
||||
* @see POST /api/v1/admin/instance/rules
|
||||
* @see PATCH /api/v1/admin/instance/rules/:id
|
||||
* @see DELETE /api/v1/admin/instance/rules/:id
|
||||
*/
|
||||
adminRules: any([
|
||||
v.software === GOTOSOCIAL,
|
||||
v.software === PLEROMA && v.build === REBASED && gte(v.version, '2.5.0'),
|
||||
v.software === PLEROMA && gte(v.version, '2.7.0'),
|
||||
]),
|
||||
|
||||
adminRulesPriority: any([
|
||||
v.software === PLEROMA && gte(v.version, '2.7.0'),
|
||||
])
|
||||
|
||||
/**
|
||||
* @see GET /api/v2/notifications/:group_key
|
||||
* @see GET /api/v2/notifications/:group_key
|
||||
@ -1011,18 +1033,6 @@ const getFeatures = (instance: Instance) => {
|
||||
|
||||
pleromaAdminRelays: v.software === PLEROMA,
|
||||
|
||||
/**
|
||||
* Ability to manage instance rules by admins.
|
||||
* @see GET /api/v1/pleroma/admin/rules
|
||||
* @see POST /api/v1/pleroma/admin/rules
|
||||
* @see PATCH /api/v1/pleroma/admin/rules/:id
|
||||
* @see DELETE /api/v1/pleroma/admin/rules/:id
|
||||
*/
|
||||
pleromaAdminRules: any([
|
||||
v.software === PLEROMA && v.build === REBASED && gte(v.version, '2.5.0'),
|
||||
v.software === PLEROMA && gte(v.version, '2.7.0'),
|
||||
]),
|
||||
|
||||
pleromaAdminStatuses: v.software === PLEROMA,
|
||||
|
||||
/**
|
||||
|
||||
@ -81,7 +81,7 @@ const Dashboard: React.FC = () => {
|
||||
/>
|
||||
)}
|
||||
|
||||
{features.pleromaAdminRules && (
|
||||
{features.adminRules && (
|
||||
<ListItem
|
||||
to='/pl-fe/admin/rules'
|
||||
label={<FormattedMessage id='column.admin.rules' defaultMessage='Instance rules' />}
|
||||
|
||||
@ -6,6 +6,7 @@ import FormGroup from 'pl-fe/components/ui/form-group';
|
||||
import Input from 'pl-fe/components/ui/input';
|
||||
import Modal from 'pl-fe/components/ui/modal';
|
||||
import { useTextField } from 'pl-fe/hooks/forms/use-text-field';
|
||||
import { useFeatures } from 'pl-fe/hooks/use-features';
|
||||
import { useRules } from 'pl-fe/queries/admin/use-rules';
|
||||
import toast from 'pl-fe/toast';
|
||||
|
||||
@ -26,6 +27,7 @@ interface EditRuleModalProps {
|
||||
|
||||
const EditRuleModal: React.FC<BaseModalProps & EditRuleModalProps> = ({ onClose, rule }) => {
|
||||
const intl = useIntl();
|
||||
const features = useFeatures();
|
||||
|
||||
const { createRule, updateRule } = useRules();
|
||||
|
||||
@ -79,15 +81,17 @@ const EditRuleModal: React.FC<BaseModalProps & EditRuleModalProps> = ({ onClose,
|
||||
{...text}
|
||||
/>
|
||||
</FormGroup>
|
||||
<FormGroup
|
||||
labelText={<FormattedMessage id='admin.edit_rule.fields.priority_label' defaultMessage='Rule priority' />}
|
||||
>
|
||||
<Input
|
||||
placeholder={intl.formatMessage(messages.rulePriorityPlaceholder)}
|
||||
type='number'
|
||||
{...priority}
|
||||
/>
|
||||
</FormGroup>
|
||||
{features.adminRulesPriority && (
|
||||
<FormGroup
|
||||
labelText={<FormattedMessage id='admin.edit_rule.fields.priority_label' defaultMessage='Rule priority' />}
|
||||
>
|
||||
<Input
|
||||
placeholder={intl.formatMessage(messages.rulePriorityPlaceholder)}
|
||||
type='number'
|
||||
{...priority}
|
||||
/>
|
||||
</FormGroup>
|
||||
)}
|
||||
</Form>
|
||||
</Modal>
|
||||
);
|
||||
|
||||
@ -316,7 +316,7 @@ const SwitchingColumnsArea: React.FC<ISwitchingColumnsArea> = React.memo(({ chil
|
||||
<WrappedRoute path='/pl-fe/admin/relays' staffOnly layout={AdminLayout} component={Relays} content={children} exact />
|
||||
{features.pleromaAdminAnnouncements && <WrappedRoute path='/pl-fe/admin/announcements' staffOnly layout={AdminLayout} component={Announcements} content={children} exact />}
|
||||
{features.domains && <WrappedRoute path='/pl-fe/admin/domains' staffOnly layout={AdminLayout} component={Domains} content={children} exact />}
|
||||
{features.pleromaAdminRules && <WrappedRoute path='/pl-fe/admin/rules' staffOnly layout={AdminLayout} component={Rules} content={children} exact />}
|
||||
{features.adminRules && <WrappedRoute path='/pl-fe/admin/rules' staffOnly layout={AdminLayout} component={Rules} content={children} exact />}
|
||||
<WrappedRoute path='/info' layout={EmptyLayout} component={ServerInfo} content={children} />
|
||||
|
||||
<WrappedRoute path='/developers/apps/create' developerOnly layout={DefaultLayout} component={CreateApp} content={children} />
|
||||
|
||||
Reference in New Issue
Block a user