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

     1  package clerk
     2  
     3  import "fmt"
     4  
     5  type SessionsService service
     6  
     7  type Session struct {
     8  	Object                   string `json:"object"`
     9  	ID                       string `json:"id"`
    10  	ClientID                 string `json:"client_id"`
    11  	UserID                   string `json:"user_id"`
    12  	Status                   string `json:"status"`
    13  	LastActiveAt             int64  `json:"last_active_at"`
    14  	LastActiveOrganizationID string `json:"last_active_organization_id,omitempty"`
    15  	ExpireAt                 int64  `json:"expire_at"`
    16  	AbandonAt                int64  `json:"abandon_at"`
    17  	CreatedAt                int64  `json:"created_at"`
    18  	UpdatedAt                int64  `json:"updated_at"`
    19  }
    20  
    21  type SessionToken struct {
    22  	Object string `json:"object"`
    23  	JWT    string `json:"jwt"`
    24  }
    25  
    26  type ListAllSessionsParams struct {
    27  	Limit    *int
    28  	Offset   *int
    29  	ClientID *string
    30  	UserID   *string
    31  	Status   *SessionStatus
    32  }
    33  
    34  type SessionStatus string
    35  
    36  const (
    37  	SessionStatusAbandoned SessionStatus = "abandoned"
    38  	SessionStatusActive    SessionStatus = "active"
    39  	SessionStatusEnded     SessionStatus = "ended"
    40  	SessionStatusExpired   SessionStatus = "expired"
    41  	SessionStatusRemoved   SessionStatus = "removed"
    42  	SessionStatusReplaced  SessionStatus = "replaced"
    43  	SessionStatusRevoked   SessionStatus = "revoked"
    44  )
    45  
    46  func (s *SessionsService) ListAll() ([]Session, error) {
    47  	sessionsUrl := "sessions"
    48  	req, _ := s.client.NewRequest("GET", sessionsUrl)
    49  
    50  	var sessions []Session
    51  	_, err := s.client.Do(req, &sessions)
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  	return sessions, nil
    56  }
    57  
    58  func (s *SessionsService) ListAllWithFiltering(params ListAllSessionsParams) ([]Session, error) {
    59  	sessionsUrl := "sessions"
    60  	req, _ := s.client.NewRequest("GET", sessionsUrl)
    61  
    62  	paginationParams := PaginationParams{Limit: params.Limit, Offset: params.Offset}
    63  	query := req.URL.Query()
    64  	addPaginationParams(query, paginationParams)
    65  
    66  	if params.ClientID != nil {
    67  		query.Add("client_id", *params.ClientID)
    68  	}
    69  	if params.UserID != nil {
    70  		query.Add("user_id", *params.UserID)
    71  	}
    72  	if params.Status != nil {
    73  		status := string(*params.Status)
    74  		query.Add("status", status)
    75  	}
    76  
    77  	req.URL.RawQuery = query.Encode()
    78  
    79  	var sessions []Session
    80  	_, err := s.client.Do(req, &sessions)
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  	return sessions, nil
    85  }
    86  
    87  func (s *SessionsService) Read(sessionId string) (*Session, error) {
    88  	sessionUrl := fmt.Sprintf("%s/%s", SessionsUrl, sessionId)
    89  	req, _ := s.client.NewRequest("GET", sessionUrl)
    90  
    91  	var session Session
    92  	_, err := s.client.Do(req, &session)
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  	return &session, nil
    97  }
    98  
    99  func (s *SessionsService) Revoke(sessionId string) (*Session, error) {
   100  	sessionUrl := fmt.Sprintf("%s/%s/revoke", SessionsUrl, sessionId)
   101  	req, _ := s.client.NewRequest("POST", sessionUrl)
   102  
   103  	var session Session
   104  	_, err := s.client.Do(req, &session)
   105  	if err != nil {
   106  		return nil, err
   107  	}
   108  	return &session, nil
   109  }
   110  
   111  func (s *SessionsService) Verify(sessionId, token string) (*Session, error) {
   112  	verifyUrl := fmt.Sprintf("%s/%s/verify", SessionsUrl, sessionId)
   113  	var sessionResponse Session
   114  
   115  	err := doVerify(s.client, verifyUrl, token, &sessionResponse)
   116  	if err != nil {
   117  		return nil, err
   118  	}
   119  	return &sessionResponse, nil
   120  }
   121  
   122  func (s *SessionsService) CreateTokenFromTemplate(sessionID, templateSlug string) (*SessionToken, error) {
   123  	sessionURL := fmt.Sprintf("%s/%s/token/%s", SessionsUrl, sessionID, templateSlug)
   124  	req, _ := s.client.NewRequest("POST", sessionURL)
   125  
   126  	var sessionToken SessionToken
   127  	_, err := s.client.Do(req, &sessionToken)
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	return &sessionToken, nil
   132  }