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 accessTokens = _request.headers.authorization;
const client = getClient(BASE_URL, accessTokens); // we are using this here, because in private mode some info isnt
// displayed without being logged in
try {
const data = await client.updateCredentials(_request.body!);
reply.send(convertAccount(data.data));
const multipartData = await _request.file;
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) {
/* console.error(e); */
reply.code(401).send(e.response.data);

View file

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

View file

@ -220,47 +220,77 @@ export default class Misskey implements MegalodonInterface {
language?: string
} | null
fields_attributes?: Array<{ name: string; value: string }>
}): Promise<Response<Entity.Account>> {
}, file?: any): Promise<Response<Entity.Account>> {
let params = {}
if (options) {
if (options.bot !== undefined) {
params = Object.assign(params, {
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) {
if (!file) {
if (options) {
if (options.bot !== undefined) {
params = Object.assign(params, {
lang: options.source.language
isBot: options.bot
})
}
if (options.source.sensitive) {
if (options.display_name) {
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 Object.assign(res, {
data: MisskeyAPI.Converter.userDetail(res.data)
return this.client.post<MisskeyAPI.Entity.UserDetail>('/api/i/update', params).then(res => {
return Object.assign(res, {
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)
})
})
}
}
/**