upd: allow updating of fields

This commit is contained in:
Mar0xy 2023-10-30 01:32:48 +01:00
parent c88fbe843a
commit 81def9457b
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
3 changed files with 32 additions and 17 deletions

View file

@ -14,7 +14,6 @@ import { ApiAuthMastodon, ApiAccountMastodon, ApiFilterMastodon, ApiNotifyMastod
import type { FastifyInstance, FastifyPluginOptions } from 'fastify'; import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { DriveService } from '@/core/DriveService.js'; import { DriveService } from '@/core/DriveService.js';
import { toSingleLast } from '@/misc/prelude/array.js';
export function getClient(BASE_URL: string, authorization: string | undefined): MegalodonInterface { export function getClient(BASE_URL: string, authorization: string | undefined): MegalodonInterface {
const accessTokenArr = authorization?.split(' ') ?? [null]; const accessTokenArr = authorization?.split(' ') ?? [null];
@ -256,6 +255,7 @@ export class MastodonApiServerService {
const client = getClient(BASE_URL, accessTokens); // we are using this here, because in private mode some info isnt const client = getClient(BASE_URL, accessTokens); // we are using this here, because in private mode some info isnt
// displayed without being logged in // displayed without being logged in
try { try {
// Check if there is an Header or Avatar being uploaded, if there is proceed to upload it to the drive of the user and then set it.
if (_request.files.length > 0 && accessTokens) { if (_request.files.length > 0 && accessTokens) {
const tokeninfo = await this.accessTokensRepository.findOneBy({ token: accessTokens.replace('Bearer ', '') }); const tokeninfo = await this.accessTokensRepository.findOneBy({ token: accessTokens.replace('Bearer ', '') });
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
@ -291,6 +291,20 @@ export class MastodonApiServerService {
} }
} }
} }
if ((_request.body as any).fields_attributes) {
const fields = (_request.body as any).fields_attributes.map((field: any) => {
if (!(field.name.trim() === '' && field.value.trim() === '')) {
if (field.name.trim() === '') return reply.code(400).send('Field name can not be empty');
if (field.value.trim() === '') return reply.code(400).send('Field value can not be empty');
}
return {
...field,
};
});
(_request.body as any).fields_attributes = fields.filter((field: any) => field.name.trim().length > 0 && field.value.length > 0);
}
const data = await client.updateCredentials(_request.body!); const data = await client.updateCredentials(_request.body!);
reply.send(await this.mastoConverter.convertAccount(data.data)); reply.send(await this.mastoConverter.convertAccount(data.data));
} catch (e: any) { } catch (e: any) {

View file

@ -39,22 +39,18 @@ export class ApiAccountMastodon {
public async verifyCredentials() { public async verifyCredentials() {
try { try {
const data = await this.client.verifyAccountCredentials(); const data = await this.client.verifyAccountCredentials();
const acct = data.data; const acct = await this.mastoconverter.convertAccount(data.data);
acct.display_name = acct.display_name || acct.username; const newAcct = Object.assign({}, acct, {
acct.url = `${this.BASE_URL}/@${acct.url}`; source: {
acct.note = acct.note || '';
acct.avatar_static = acct.avatar;
acct.header = acct.header || '/static-assets/transparent.png';
acct.header_static = acct.header || '/static-assets/transparent.png';
acct.source = {
note: acct.note, note: acct.note,
fields: acct.fields, fields: acct.fields,
privacy: '', privacy: '',
sensitive: false, sensitive: false,
language: '', language: '',
}; },
console.log(acct); });
return acct; console.log(newAcct);
return newAcct;
} catch (e: any) { } catch (e: any) {
/* console.error(e); /* console.error(e);
console.error(e.response.data); */ console.error(e.response.data); */

View file

@ -248,6 +248,11 @@ export default class Misskey implements MegalodonInterface {
bannerId: options.header bannerId: options.header
}) })
} }
if (options.fields_attributes) {
params = Object.assign(params, {
fields: options.fields_attributes
})
}
if (options.locked !== undefined) { if (options.locked !== undefined) {
params = Object.assign(params, { params = Object.assign(params, {
isLocked: options.locked.toString() === 'true' ? true : false isLocked: options.locked.toString() === 'true' ? true : false