(ctx context.Context, conn *storage.Connection, user *models.User)
| 180 | } |
| 181 | |
| 182 | func (a *API) issueRefreshToken(ctx context.Context, conn *storage.Connection, user *models.User) (*AccessTokenResponse, error) { |
| 183 | config := a.getConfig(ctx) |
| 184 | |
| 185 | now := time.Now() |
| 186 | user.LastSignInAt = &now |
| 187 | |
| 188 | var tokenString string |
| 189 | var refreshToken *models.RefreshToken |
| 190 | |
| 191 | err := conn.Transaction(func(tx *storage.Connection) error { |
| 192 | var terr error |
| 193 | refreshToken, terr = models.GrantAuthenticatedUser(tx, user) |
| 194 | if terr != nil { |
| 195 | return internalServerError("Database error granting user").WithInternalError(terr) |
| 196 | } |
| 197 | |
| 198 | tokenString, terr = generateAccessToken(user, time.Second*time.Duration(config.JWT.Exp), config.JWT.Secret) |
| 199 | if terr != nil { |
| 200 | return internalServerError("error generating jwt token").WithInternalError(terr) |
| 201 | } |
| 202 | return nil |
| 203 | }) |
| 204 | if err != nil { |
| 205 | return nil, err |
| 206 | } |
| 207 | |
| 208 | return &AccessTokenResponse{ |
| 209 | Token: tokenString, |
| 210 | TokenType: "bearer", |
| 211 | ExpiresIn: config.JWT.Exp, |
| 212 | RefreshToken: refreshToken.Token, |
| 213 | }, nil |
| 214 | } |
| 215 | |
| 216 | func (a *API) setCookieToken(config *conf.Configuration, tokenString string, session bool, w http.ResponseWriter) error { |
| 217 | exp := time.Second * time.Duration(config.Cookie.Duration) |
no test coverage detected