github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/jwt_templates.go (about)

     1  package clerk
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  )
     8  
     9  type JWTTemplatesService service
    10  
    11  type JWTTemplate struct {
    12  	ID               string          `json:"id"`
    13  	Object           string          `json:"object"`
    14  	Name             string          `json:"name"`
    15  	Claims           json.RawMessage `json:"claims"`
    16  	Lifetime         int             `json:"lifetime"`
    17  	AllowedClockSkew int             `json:"allowed_clock_skew"`
    18  	CustomSigningKey bool            `json:"custom_signing_key"`
    19  	SigningAlgorithm string          `json:"signing_algorithm"`
    20  	CreatedAt        int64           `json:"created_at"`
    21  	UpdatedAt        int64           `json:"updated_at"`
    22  }
    23  
    24  type CreateUpdateJWTTemplate struct {
    25  	Name             string                 `json:"name"`
    26  	Claims           map[string]interface{} `json:"claims"`
    27  	Lifetime         *int                   `json:"lifetime"`
    28  	AllowedClockSkew *int                   `json:"allowed_clock_skew"`
    29  
    30  	CustomSigningKey bool    `json:"custom_signing_key"`
    31  	SigningAlgorithm *string `json:"signing_algorithm"`
    32  	SigningKey       *string `json:"signing_key"`
    33  }
    34  
    35  func (t CreateUpdateJWTTemplate) toRequest() (*createUpdateJWTTemplateRequest, error) {
    36  	claimsBytes, err := json.Marshal(t.Claims)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	return &createUpdateJWTTemplateRequest{
    42  		Claims:           string(claimsBytes),
    43  		Name:             t.Name,
    44  		Lifetime:         t.Lifetime,
    45  		AllowedClockSkew: t.AllowedClockSkew,
    46  		CustomSigningKey: t.CustomSigningKey,
    47  		SigningAlgorithm: t.SigningAlgorithm,
    48  		SigningKey:       t.SigningKey,
    49  	}, nil
    50  }
    51  
    52  type createUpdateJWTTemplateRequest struct {
    53  	Claims           string  `json:"claims"`
    54  	Name             string  `json:"name"`
    55  	Lifetime         *int    `json:"lifetime,omitempty"`
    56  	AllowedClockSkew *int    `json:"allowed_clock_skew,omitempty"`
    57  	CustomSigningKey bool    `json:"custom_signing_key"`
    58  	SigningAlgorithm *string `json:"signing_algorithm,omitempty"`
    59  	SigningKey       *string `json:"signing_key,omitempty"`
    60  }
    61  
    62  func (s JWTTemplatesService) ListAll() ([]JWTTemplate, error) {
    63  	req, err := s.client.NewRequest(http.MethodGet, JWTTemplatesUrl)
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	jwtTemplates := make([]JWTTemplate, 0)
    69  	if _, err = s.client.Do(req, &jwtTemplates); err != nil {
    70  		return nil, err
    71  	}
    72  
    73  	return jwtTemplates, nil
    74  }
    75  
    76  func (s JWTTemplatesService) Read(id string) (*JWTTemplate, error) {
    77  	reqURL := fmt.Sprintf("%s/%s", JWTTemplatesUrl, id)
    78  	req, err := s.client.NewRequest(http.MethodGet, reqURL)
    79  	if err != nil {
    80  		return nil, err
    81  	}
    82  
    83  	jwtTemplate := &JWTTemplate{}
    84  	if _, err = s.client.Do(req, jwtTemplate); err != nil {
    85  		return nil, err
    86  	}
    87  
    88  	return jwtTemplate, nil
    89  }
    90  
    91  func (s JWTTemplatesService) Create(params *CreateUpdateJWTTemplate) (*JWTTemplate, error) {
    92  	reqBody, err := params.toRequest()
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  
    97  	req, err := s.client.NewRequest(http.MethodPost, JWTTemplatesUrl, reqBody)
    98  	if err != nil {
    99  		return nil, err
   100  	}
   101  
   102  	resp := JWTTemplate{}
   103  	if _, err = s.client.Do(req, &resp); err != nil {
   104  		return nil, err
   105  	}
   106  
   107  	return &resp, nil
   108  }
   109  
   110  func (s JWTTemplatesService) Update(id string, params *CreateUpdateJWTTemplate) (*JWTTemplate, error) {
   111  	reqURL := fmt.Sprintf("%s/%s", JWTTemplatesUrl, id)
   112  
   113  	reqBody, err := params.toRequest()
   114  	if err != nil {
   115  		return nil, err
   116  	}
   117  
   118  	req, err := s.client.NewRequest(http.MethodPatch, reqURL, reqBody)
   119  	if err != nil {
   120  		return nil, err
   121  	}
   122  
   123  	resp := JWTTemplate{}
   124  	if _, err = s.client.Do(req, &resp); err != nil {
   125  		return nil, err
   126  	}
   127  
   128  	return &resp, nil
   129  }
   130  
   131  func (s JWTTemplatesService) Delete(id string) (*DeleteResponse, error) {
   132  	reqURL := fmt.Sprintf("%s/%s", JWTTemplatesUrl, id)
   133  	req, err := s.client.NewRequest(http.MethodDelete, reqURL)
   134  	if err != nil {
   135  		return nil, err
   136  	}
   137  
   138  	resp := &DeleteResponse{}
   139  	if _, err = s.client.Do(req, resp); err != nil {
   140  		return nil, err
   141  	}
   142  	return resp, nil
   143  }