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 }