Files
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

76 lines
2.7 KiB
Go

package client
import (
"context"
"net/http"
"strconv"
)
// RegisterUser creates an inactive user account.
func (c *Client) RegisterUser(ctx context.Context, input RegisterUserInput) (User, *Response, error) {
var envelope struct {
User User `json:"user"`
}
response, err := c.do(ctx, http.MethodPost, "v1/users", input, &envelope)
return envelope.User, response, err
}
// ActivateUser activates an account using a plaintext activation token.
func (c *Client) ActivateUser(ctx context.Context, token string) (User, *Response, error) {
return c.activateUser(ctx, map[string]string{"token": token})
}
// ActivateInvitedUser activates an account and sets its initial password.
func (c *Client) ActivateInvitedUser(ctx context.Context, token, password string) (User, *Response, error) {
return c.activateUser(ctx, map[string]string{"token": token, "password": password})
}
func (c *Client) activateUser(ctx context.Context, input any) (User, *Response, error) {
var envelope struct {
User User `json:"user"`
}
response, err := c.do(ctx, http.MethodPut, "v1/users/activated", input, &envelope)
return envelope.User, response, err
}
// UpdatePassword replaces a password using a valid reset token.
func (c *Client) UpdatePassword(ctx context.Context, input UpdatePasswordInput) (string, *Response, error) {
var envelope struct {
Message string `json:"message"`
}
response, err := c.do(ctx, http.MethodPut, "v1/users/password", input, &envelope)
return envelope.Message, response, err
}
// AdminUsers lists all non-deleted user accounts.
func (c *Client) AdminUsers(ctx context.Context) ([]User, *Response, error) {
var envelope struct {
Users []User `json:"users"`
}
response, err := c.do(ctx, http.MethodGet, "v1/admin/users", nil, &envelope)
return envelope.Users, response, err
}
// InviteAdminUser creates an inactive account and sends its invitation.
func (c *Client) InviteAdminUser(ctx context.Context, input AdminUserInviteInput) (User, *Response, error) {
var envelope struct {
User User `json:"user"`
}
response, err := c.do(ctx, http.MethodPost, "v1/admin/users", input, &envelope)
return envelope.User, response, err
}
// UpdateAdminUserRole changes an account's application role.
func (c *Client) UpdateAdminUserRole(ctx context.Context, userID int, role string) (User, *Response, error) {
var envelope struct {
User User `json:"user"`
}
response, err := c.do(ctx, http.MethodPatch, "v1/admin/users/"+strconv.Itoa(userID), map[string]string{"role": role}, &envelope)
return envelope.User, response, err
}
// DeleteAdminUser permanently anonymizes and deactivates an account.
func (c *Client) DeleteAdminUser(ctx context.Context, userID int) (*Response, error) {
return c.do(ctx, http.MethodDelete, "v1/admin/users/"+strconv.Itoa(userID), nil, nil)
}