summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMar0xy <marie@kaifa.ch>2023-09-25 22:02:33 +0200
committerMar0xy <marie@kaifa.ch>2023-09-25 22:02:33 +0200
commit0fe5e8738c43b1a6b0889135b054f4eaeafe590a (patch)
tree0c8e5624299e1c52ab98082cd026fbe395aae971
parentupd: change handling of masto needed desc (diff)
downloadsharkey-0fe5e8738c43b1a6b0889135b054f4eaeafe590a.tar.gz
sharkey-0fe5e8738c43b1a6b0889135b054f4eaeafe590a.tar.bz2
sharkey-0fe5e8738c43b1a6b0889135b054f4eaeafe590a.zip
upd: attempt to accept file during update
-rw-r--r--packages/backend/src/server/api/mastodon/MastodonApiServerService.ts12
-rw-r--r--packages/megalodon/src/megalodon.ts2
-rw-r--r--packages/megalodon/src/misskey.ts94
3 files changed, 72 insertions, 36 deletions
diff --git a/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts b/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
index 08976db2b0..adcbe6077f 100644
--- a/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
+++ b/packages/backend/src/server/api/mastodon/MastodonApiServerService.ts
@@ -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);
diff --git a/packages/megalodon/src/megalodon.ts b/packages/megalodon/src/megalodon.ts
index 19cd5c5551..b293254772 100644
--- a/packages/megalodon/src/megalodon.ts
+++ b/packages/megalodon/src/megalodon.ts
@@ -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.
*
diff --git a/packages/megalodon/src/misskey.ts b/packages/megalodon/src/misskey.ts
index 5640ce19b1..b800df04d5 100644
--- a/packages/megalodon/src/misskey.ts
+++ b/packages/megalodon/src/misskey.ts
@@ -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, {
+ isBot: options.bot
+ })
+ }
+ if (options.display_name) {
params = Object.assign(params, {
- lang: options.source.language
+ name: options.display_name
})
}
- if (options.source.sensitive) {
+ if (options.note) {
params = Object.assign(params, {
- alwaysMarkNsfw: options.source.sensitive
+ 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)
+ })
+ })
+ }
}
/**