upd: attempt to accept file during update
This commit is contained in:
		
							parent
							
								
									8b55fc7917
								
							
						
					
					
						commit
						0fe5e8738c
					
				
					 3 changed files with 72 additions and 36 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
   *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
        })
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue