Personal Git forge.

Code git clone ssh://git.poy.ooo:6969/~poyo/farga ZIP
db/oauth.go / 1KiB #71377537
Raw
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}