29 |
29 |
30 // The Q field (query) is used when searching for accounts |
30 // The Q field (query) is used when searching for accounts |
31 Q string |
31 Q string |
32 |
32 |
33 Limit *LimitParams |
33 Limit *LimitParams |
|
34 } |
|
35 |
|
36 // UpdateAccountParams contains option fields for the UpdateAccount command |
|
37 type UpdateAccountParams struct { |
|
38 DisplayName *string |
|
39 Note *string |
|
40 AvatarImagePath *string |
|
41 HeaderImagePath *string |
|
42 Locked *bool |
|
43 Bot *bool |
|
44 //FieldsAttributes *[]Field |
|
45 //Source *SourceParams |
34 } |
46 } |
35 |
47 |
36 // updateRelationship returns a Relationship entity |
48 // updateRelationship returns a Relationship entity |
37 // The operation 'op' can be "follow", "unfollow", "block", "unblock", |
49 // The operation 'op' can be "follow", "unfollow", "block", "unblock", |
38 // "mute", "unmute". |
50 // "mute", "unmute". |
404 // The fields avatar & headerImage are considered as file paths |
416 // The fields avatar & headerImage are considered as file paths |
405 // and their content will be uploaded. |
417 // and their content will be uploaded. |
406 // Please note that currently Mastodon leaks the avatar file name: |
418 // Please note that currently Mastodon leaks the avatar file name: |
407 // https://github.com/tootsuite/mastodon/issues/5776 |
419 // https://github.com/tootsuite/mastodon/issues/5776 |
408 // |
420 // |
409 // Setting 'locked' to true means all followers should be approved. |
|
410 // All fields can be nil, in which case they are not updated. |
421 // All fields can be nil, in which case they are not updated. |
411 // displayName and note can be set to "" to delete previous values; |
422 // 'DisplayName' and 'Note' can be set to "" to delete previous values. |
|
423 // Setting 'Locked' to true means all followers should be approved. |
|
424 // You can set 'Bot' to true to indicate this is a service (automated) account. |
412 // I'm not sure images can be deleted -- only replaced AFAICS. |
425 // I'm not sure images can be deleted -- only replaced AFAICS. |
413 func (mc *Client) UpdateAccount(displayName, note, avatarImagePath, headerImagePath *string, locked *bool) (*Account, error) { |
426 func (mc *Client) UpdateAccount(cmdParams UpdateAccountParams) (*Account, error) { |
414 const endPoint = "accounts/update_credentials" |
427 const endPoint = "accounts/update_credentials" |
415 params := make(apiCallParams) |
428 params := make(apiCallParams) |
416 |
429 |
417 if displayName != nil { |
430 if cmdParams.DisplayName != nil { |
418 params["display_name"] = *displayName |
431 params["display_name"] = *cmdParams.DisplayName |
419 } |
432 } |
420 if note != nil { |
433 if cmdParams.Note != nil { |
421 params["note"] = *note |
434 params["note"] = *cmdParams.Note |
422 } |
435 } |
423 if locked != nil { |
436 if cmdParams.Locked != nil { |
424 if *locked { |
437 if *cmdParams.Locked { |
425 params["locked"] = "true" |
438 params["locked"] = "true" |
426 } else { |
439 } else { |
427 params["locked"] = "false" |
440 params["locked"] = "false" |
428 } |
441 } |
429 } |
442 } |
|
443 if cmdParams.Bot != nil { |
|
444 if *cmdParams.Bot { |
|
445 params["bot"] = "true" |
|
446 } else { |
|
447 params["bot"] = "false" |
|
448 } |
|
449 } |
430 |
450 |
431 var err error |
451 var err error |
432 var avatar, headerImage []byte |
452 var avatar, headerImage []byte |
433 |
453 |
434 avatar, err = readFile(avatarImagePath) |
454 avatar, err = readFile(cmdParams.AvatarImagePath) |
435 if err != nil { |
455 if err != nil { |
436 return nil, err |
456 return nil, err |
437 } |
457 } |
438 |
458 |
439 headerImage, err = readFile(headerImagePath) |
459 headerImage, err = readFile(cmdParams.HeaderImagePath) |
440 if err != nil { |
460 if err != nil { |
441 return nil, err |
461 return nil, err |
442 } |
462 } |
443 |
463 |
444 var formBuf bytes.Buffer |
464 var formBuf bytes.Buffer |
445 w := multipart.NewWriter(&formBuf) |
465 w := multipart.NewWriter(&formBuf) |
446 |
466 |
447 if avatar != nil { |
467 if avatar != nil { |
448 formWriter, err := w.CreateFormFile("avatar", filepath.Base(*avatarImagePath)) |
468 formWriter, err := w.CreateFormFile("avatar", filepath.Base(*cmdParams.AvatarImagePath)) |
449 if err != nil { |
469 if err != nil { |
450 return nil, errors.Wrap(err, "avatar upload") |
470 return nil, errors.Wrap(err, "avatar upload") |
451 } |
471 } |
452 formWriter.Write(avatar) |
472 formWriter.Write(avatar) |
453 } |
473 } |
454 if headerImage != nil { |
474 if headerImage != nil { |
455 formWriter, err := w.CreateFormFile("header", filepath.Base(*headerImagePath)) |
475 formWriter, err := w.CreateFormFile("header", filepath.Base(*cmdParams.HeaderImagePath)) |
456 if err != nil { |
476 if err != nil { |
457 return nil, errors.Wrap(err, "header upload") |
477 return nil, errors.Wrap(err, "header upload") |
458 } |
478 } |
459 formWriter.Write(headerImage) |
479 formWriter.Write(headerImage) |
460 } |
480 } |