account.go
changeset 229 69f29aacd5bc
parent 226 212a0e74e719
child 231 741291bb4772
equal deleted inserted replaced
228:21056fc9563e 229:69f29aacd5bc
    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 	}