Something went wrong. Try again.
Lightweight and easily self-hostable Git forge.
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758package db
import ( "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}