ente/cli/internal/api/login.go
2024-03-01 12:39:01 +05:30

164 lines
3.1 KiB
Go

package api
import (
"context"
"github.com/google/uuid"
)
func (c *Client) GetSRPAttributes(ctx context.Context, email string) (*SRPAttributes, error) {
var res struct {
SRPAttributes *SRPAttributes `json:"attributes"`
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetQueryParam("email", email).
Get("/users/srp/attributes")
if err != nil {
return nil, err
}
if r.IsError() {
return nil, &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return res.SRPAttributes, err
}
func (c *Client) CreateSRPSession(
ctx context.Context,
srpUserID uuid.UUID,
clientPub string,
) (*CreateSRPSessionResponse, error) {
var res CreateSRPSessionResponse
payload := map[string]interface{}{
"srpUserID": srpUserID.String(),
"srpA": clientPub,
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetBody(payload).
Post("/users/srp/create-session")
if err != nil {
return nil, err
}
if r.IsError() {
return nil, &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return &res, nil
}
func (c *Client) VerifySRPSession(
ctx context.Context,
srpUserID uuid.UUID,
sessionID uuid.UUID,
clientM1 string,
) (*AuthorizationResponse, error) {
var res AuthorizationResponse
payload := map[string]interface{}{
"srpUserID": srpUserID.String(),
"sessionID": sessionID.String(),
"srpM1": clientM1,
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetBody(payload).
Post("/users/srp/verify-session")
if err != nil {
return nil, err
}
if r.IsError() {
return nil, &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return &res, nil
}
func (c *Client) SendEmailOTP(
ctx context.Context,
email string,
) error {
var res AuthorizationResponse
payload := map[string]interface{}{
"email": email,
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetBody(payload).
Post("/users/ott")
if err != nil {
return err
}
if r.IsError() {
return &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return nil
}
func (c *Client) VerifyEmail(
ctx context.Context,
email string,
otp string,
) (*AuthorizationResponse, error) {
var res AuthorizationResponse
payload := map[string]interface{}{
"email": email,
"ott": otp,
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetBody(payload).
Post("/users/verify-email")
if err != nil {
return nil, err
}
if r.IsError() {
return nil, &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return &res, nil
}
func (c *Client) VerifyTotp(
ctx context.Context,
sessionID string,
otp string,
) (*AuthorizationResponse, error) {
var res AuthorizationResponse
payload := map[string]interface{}{
"sessionID": sessionID,
"code": otp,
}
r, err := c.restClient.R().
SetContext(ctx).
SetResult(&res).
SetBody(payload).
Post("/users/two-factor/verify")
if err != nil {
return nil, err
}
if r.IsError() {
return nil, &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return &res, nil
}