upd: attempt to accept file during update

This commit is contained in:
Mar0xy 2023-09-25 22:02:33 +02:00
parent 8b55fc7917
commit 0fe5e8738c
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
3 changed files with 72 additions and 36 deletions

View file

@ -236,14 +236,20 @@ export class MastodonApiServerService {
} }
}); });
fastify.patch('/v1/accounts/update_credentials', { preHandler: upload.none() }, async (_request, reply) => { fastify.patch('/v1/accounts/update_credentials', { preHandler: upload.single('file') }, async (_request, reply) => {
const BASE_URL = `${_request.protocol}://${_request.hostname}`; const BASE_URL = `${_request.protocol}://${_request.hostname}`;
const accessTokens = _request.headers.authorization; const accessTokens = _request.headers.authorization;
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 {
const data = await client.updateCredentials(_request.body!); const multipartData = await _request.file;
reply.send(convertAccount(data.data)); if (!multipartData) {
const data = await client.updateCredentials(_request.body!);
reply.send(convertAccount(data.data));
} else {
const data = await client.updateCredentials(_request.body!, multipartData);
reply.send(convertAccount(data.data));
}
} catch (e: any) { } catch (e: any) {
/* console.error(e); */ /* console.error(e); */
reply.code(401).send(e.response.data); reply.code(401).send(e.response.data);

View file

@ -149,7 +149,7 @@ export interface MegalodonInterface {
language?: string language?: string
} }
fields_attributes?: Array<{ name: string; value: string }> fields_attributes?: Array<{ name: string; value: string }>
}): Promise<Response<Entity.Account>> }, file?: any): Promise<Response<Entity.Account>>
/** /**
* View information about a profile. * View information about a profile.
* *

View file

@ -220,47 +220,77 @@ export default class Misskey implements MegalodonInterface {
language?: string language?: string
} | null } | null
fields_attributes?: Array<{ name: string; value: string }> fields_attributes?: Array<{ name: string; value: string }>
}): Promise<Response<Entity.Account>> { }, file?: any): Promise<Response<Entity.Account>> {
let params = {} let params = {}
if (options) { if (!file) {
if (options.bot !== undefined) { if (options) {
params = Object.assign(params, { if (options.bot !== undefined) {
isBot: options.bot
})
}
if (options.display_name) {
params = Object.assign(params, {
name: options.display_name
})
}
if (options.note) {
params = Object.assign(params, {
description: options.note
})
}
if (options.locked !== undefined) {
params = Object.assign(params, {
isLocked: options.locked
})
}
if (options.source) {
if (options.source.language) {
params = Object.assign(params, { params = Object.assign(params, {
lang: options.source.language isBot: options.bot
}) })
} }
if (options.source.sensitive) { if (options.display_name) {
params = Object.assign(params, { params = Object.assign(params, {
alwaysMarkNsfw: options.source.sensitive name: options.display_name
}) })
} }
if (options.note) {
params = Object.assign(params, {
description: options.note
})
}
if (options.locked !== undefined) {
params = Object.assign(params, {
isLocked: options.locked
})
}
if (options.source) {
if (options.source.language) {
params = Object.assign(params, {
lang: options.source.language
})
}
if (options.source.sensitive) {
params = Object.assign(params, {
alwaysMarkNsfw: options.source.sensitive
})
}
}
} }
} return this.client.post<MisskeyAPI.Entity.UserDetail>('/api/i/update', params).then(res => {
return this.client.post<MisskeyAPI.Entity.UserDetail>('/api/i/update', params).then(res => { return Object.assign(res, {
return Object.assign(res, { data: MisskeyAPI.Converter.userDetail(res.data)
data: MisskeyAPI.Converter.userDetail(res.data) })
}) })
}) } else {
const formData = new FormData()
formData.append('file', fs.createReadStream(file.path), {
contentType: file.mimetype,
});
if (file.originalname != null && file.originalname !== "file") formData.append("name", file.originalname);
let headers: { [key: string]: string } = {}
if (typeof formData.getHeaders === 'function') {
headers = formData.getHeaders()
}
await this.client
.post<MisskeyAPI.Entity.File>('/api/drive/files/create', formData, headers)
.then(res => {
if (file.name === "header") {
params = Object.assign(params, {
bannerId: res.data.id
})
} else if (file.name === "avatar") {
params = Object.assign(params, {
avatarId: res.data.id
})
}
})
return this.client.post<MisskeyAPI.Entity.UserDetail>('/api/i/update', params).then(res => {
return Object.assign(res, {
data: MisskeyAPI.Converter.userDetail(res.data)
})
})
}
} }
/** /**