Personal Git forge.
package dbimport ( "crypto/rand" "encoding/base64" "farga/db/types" "farga/lib" "time" "github.com/google/uuid" "golang.org/x/oauth2")// gets an oauth state from the tokenfunc (db *DB) OAuthState(token string) (types.OAuthState, error) { var state types.OAuthState err := db.First(&state, "state = ?", token).Error return state, err}// creates an OAuth state.func (db *DB) CreateOAuthState(id uuid.UUID) (*types.OAuthState, error) { b := make([]byte, 32) if _, err := rand.Read(b); err != nil { return nil, err } state := base64.RawURLEncoding.EncodeToString(b) verifier := oauth2.GenerateVerifier() oauthState := &types.OAuthState{ State: state, Verifier: verifier, ExpiresAt: time.Now().Add(lib.OAuthStateDurationMins * time.Minute), UserID: id, } if err := db.Create(oauthState).Error; err != nil { return nil, err } return oauthState, nil}// checks states' expiresAt and if they expired, it Deletes themfunc (db *DB) DeleteExpiredOAuthStates() { db.Where("expires_at < ?", time.Now()).Delete(&types.OAuthState{})}// Deletes a given oauth state from the databasefunc (db *DB) DeleteOAuthState(id uuid.UUID) error { var state = types.OAuthState{ UUID_ID: types.UUID_ID{ID: id}, } result := db.Delete(&state) return result.Error}