github.com/gravitational/teleport/api@v0.0.0-20240507183017-3110591cbafc/types/usertoken.go (about)

     1  /*
     2  Copyright 2020 Gravitational, Inc.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package types
    18  
    19  import (
    20  	"fmt"
    21  	"time"
    22  
    23  	"github.com/gravitational/trace"
    24  )
    25  
    26  // UserToken represents a temporary token used for various user related actions ie: change password.
    27  type UserToken interface {
    28  	// Resource provides common resource properties
    29  	Resource
    30  	// GetUser returns User
    31  	GetUser() string
    32  	// SetUser sets User
    33  	SetUser(string)
    34  	// GetCreated returns Created
    35  	GetCreated() time.Time
    36  	// SetCreated sets Created
    37  	SetCreated(time.Time)
    38  	// GetURL returns URL
    39  	GetURL() string
    40  	// SetURL returns URL
    41  	SetURL(string)
    42  	// GetUsage returns usage type.
    43  	GetUsage() UserTokenUsage
    44  	// SetUsage sets usage type.
    45  	SetUsage(UserTokenUsage)
    46  }
    47  
    48  // NewUserToken creates an instance of UserToken.
    49  func NewUserToken(tokenID string) (UserToken, error) {
    50  	u := &UserTokenV3{
    51  		Metadata: Metadata{
    52  			Name: tokenID,
    53  		},
    54  	}
    55  	if err := u.CheckAndSetDefaults(); err != nil {
    56  		return nil, trace.Wrap(err)
    57  	}
    58  	return u, nil
    59  }
    60  
    61  // GetName returns token ID.
    62  func (u *UserTokenV3) GetName() string {
    63  	return u.Metadata.Name
    64  }
    65  
    66  // SetName sets the name of the resource
    67  func (u *UserTokenV3) SetName(name string) {
    68  	u.Metadata.Name = name
    69  }
    70  
    71  // GetUser returns User
    72  func (u *UserTokenV3) GetUser() string {
    73  	return u.Spec.User
    74  }
    75  
    76  // SetUser sets the name of the resource
    77  func (u *UserTokenV3) SetUser(name string) {
    78  	u.Spec.User = name
    79  }
    80  
    81  // GetCreated returns Created
    82  func (u *UserTokenV3) GetCreated() time.Time {
    83  	return u.Spec.Created
    84  }
    85  
    86  // SetCreated sets the name of the resource
    87  func (u *UserTokenV3) SetCreated(t time.Time) {
    88  	u.Spec.Created = t
    89  }
    90  
    91  // GetURL returns URL
    92  func (u *UserTokenV3) GetURL() string {
    93  	return u.Spec.URL
    94  }
    95  
    96  // SetURL sets URL
    97  func (u *UserTokenV3) SetURL(url string) {
    98  	u.Spec.URL = url
    99  }
   100  
   101  // Expiry returns object expiry setting
   102  func (u *UserTokenV3) Expiry() time.Time {
   103  	return u.Metadata.Expiry()
   104  }
   105  
   106  // SetExpiry sets object expiry
   107  func (u *UserTokenV3) SetExpiry(t time.Time) {
   108  	u.Metadata.SetExpiry(t)
   109  }
   110  
   111  // GetMetadata returns object metadata
   112  func (u *UserTokenV3) GetMetadata() Metadata {
   113  	return u.Metadata
   114  }
   115  
   116  // GetVersion returns resource version
   117  func (u *UserTokenV3) GetVersion() string {
   118  	return u.Version
   119  }
   120  
   121  // GetKind returns resource kind
   122  func (u *UserTokenV3) GetKind() string {
   123  	return u.Kind
   124  }
   125  
   126  // GetResourceID returns resource ID
   127  func (u *UserTokenV3) GetResourceID() int64 {
   128  	return u.Metadata.ID
   129  }
   130  
   131  // SetResourceID sets resource ID
   132  func (u *UserTokenV3) SetResourceID(id int64) {
   133  	u.Metadata.ID = id
   134  }
   135  
   136  // GetRevision returns the revision
   137  func (u *UserTokenV3) GetRevision() string {
   138  	return u.Metadata.GetRevision()
   139  }
   140  
   141  // SetRevision sets the revision
   142  func (u *UserTokenV3) SetRevision(rev string) {
   143  	u.Metadata.SetRevision(rev)
   144  }
   145  
   146  // GetSubKind returns resource sub kind
   147  func (u *UserTokenV3) GetSubKind() string {
   148  	return u.SubKind
   149  }
   150  
   151  // SetSubKind sets resource subkind
   152  func (u *UserTokenV3) SetSubKind(s string) {
   153  	u.SubKind = s
   154  }
   155  
   156  // setStaticFields sets static resource header and metadata fields.
   157  func (u *UserTokenV3) setStaticFields() {
   158  	u.Kind = KindUserToken
   159  	u.Version = V3
   160  }
   161  
   162  // CheckAndSetDefaults checks and set default values for any missing fields.
   163  func (u *UserTokenV3) CheckAndSetDefaults() error {
   164  	u.setStaticFields()
   165  	if err := u.Metadata.CheckAndSetDefaults(); err != nil {
   166  		return trace.Wrap(err)
   167  	}
   168  	return nil
   169  }
   170  
   171  // String represents a human readable version of the token
   172  func (u *UserTokenV3) String() string {
   173  	return fmt.Sprintf("UserTokenV3(tokenID=%v, type=%v user=%v, expires at %v)", u.GetName(), u.GetSubKind(), u.Spec.User, u.Expiry())
   174  }
   175  
   176  // GetUsage returns a usage type.
   177  func (u *UserTokenV3) GetUsage() UserTokenUsage {
   178  	return u.Spec.Usage
   179  }
   180  
   181  // SetUsage sets a usage type.
   182  func (u *UserTokenV3) SetUsage(r UserTokenUsage) {
   183  	u.Spec.Usage = r
   184  }