package client import ( "bytes" "context" "encoding/json" "fmt" "net/http" "codeflow.dananglin.me.uk/apollo/enbas/internal" ) type RegisterRequest struct { ClientName string `json:"client_name"` RedirectUris string `json:"redirect_uris"` Scopes string `json:"scopes"` Website string `json:"website"` } type RegisterResponse struct { ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` ID string `json:"id"` Name string `json:"name"` RedirectUri string `json:"redirect_uri"` VapidKey string `json:"vapid_key"` Website string `json:"website"` } func (g *Client) Register() error { params := RegisterRequest{ ClientName: internal.ApplicationName, RedirectUris: internal.RedirectUri, Scopes: "read write", Website: internal.ApplicationWebsite, } data, err := json.Marshal(params) if err != nil { return fmt.Errorf("unable to marshal the request body; %w", err) } requestBody := bytes.NewBuffer(data) path := "/api/v1/apps" url := g.Authentication.Instance + path ctx, cancel := context.WithTimeout(context.Background(), g.Timeout) defer cancel() request, err := http.NewRequestWithContext(ctx, http.MethodPost, url, requestBody) if err != nil { return fmt.Errorf("unable to create the HTTP request; %w", err) } var registerResponse RegisterResponse if err := g.sendRequest(request, ®isterResponse); err != nil { return fmt.Errorf("received an error after sending the registration request; %w", err) } g.Authentication.ClientID = registerResponse.ClientID g.Authentication.ClientSecret = registerResponse.ClientSecret return nil }