diff options
| author | wikiapiserver | 2026-06-25 14:40:16 +0200 |
|---|---|---|
| committer | wikiapiserver | 2026-06-25 14:40:16 +0200 |
| commit | e375b6cc68f4a9b0e91b25479538dc76d1f1e620 (patch) | |
| tree | 7cfd3c2f885a14b9a2017f738f9bbc833ae15a7b /db/db.go | |
| parent | 21fb3c12c86fe3f03531c4f323854da36fb82628 (diff) | |
| download | wikiapiserver-e375b6cc68f4a9b0e91b25479538dc76d1f1e620.tar.gz | |
refactor: extract Wikimedia auth into reusable function
- WikimediaLogin is a standalone function: POSTs to auth.enterprise.wikimedia.com
and returns the tokens. Can be called from any flow.
- Register composes WikimediaLogin + CreateAccount
- CreateAccount now takes tokens as arguments (pure DB insert)
Diffstat (limited to 'db/db.go')
| -rw-r--r-- | db/db.go | 27 |
1 files changed, 17 insertions, 10 deletions
@@ -80,7 +80,7 @@ type WikimediaTokens struct { // Wikimedialogin sends credentials to the Wikimedia Enterprise auth API // and returns the refresh and access tokens. -func Wikimedialogin(ctx context.Context, username, password string) (*WikimediaTokens, error) { +func WikimediaLogin(ctx context.Context, username, password string) (*WikimediaTokens, error) { body := fmt.Sprintf("username=%s&password=%s", url.PathEscape(username), url.PathEscape(password)) @@ -119,22 +119,29 @@ func isDupKeyError(err error) bool { // --- queries --- -// CreateAccount registers the user via the Wikimedia auth API, +// Register authenticates the user via the Wikimedia auth API, // then persists the account and tokens to the database. // If the Wikimedia API call fails, registration fails. -func (d *DB) CreateAccount(ctx context.Context, username, plaintextPW string) (*Account, error) { - // Obtain tokens from Wikimedia Enterprise auth API - tokens, err := Wikimedialogin(ctx, username, plaintextPW) +func (d *DB) Register(ctx context.Context, username, plaintextPW string) (*Account, error) { + tokens, err := WikimediaLogin(ctx, username, plaintextPW) if err != nil { return nil, fmt.Errorf("wikimedia login: %w", err) } + acct, err := d.CreateAccount(ctx, username, plaintextPW, tokens.RefreshToken, tokens.AccessToken) + if err != nil { + return nil, err + } + + return acct, nil +} + +// CreateAccount inserts an account row with the given tokens. +func (d *DB) CreateAccount(ctx context.Context, username, plaintextPW, refreshToken, accessToken string) (*Account, error) { res, err := d.conn.ExecContext(ctx, `INSERT INTO account (username, password, refresh_token, access_token, refresh_token_created, access_token_created) VALUES (?, ?, ?, ?, NOW(), NOW())`, - username, plaintextPW, - tokens.RefreshToken, - tokens.AccessToken, + username, plaintextPW, refreshToken, accessToken, ) if err != nil { if isDupKeyError(err) { @@ -152,8 +159,8 @@ func (d *DB) CreateAccount(ctx context.Context, username, plaintextPW string) (* return &Account{ ID: id, Username: username, - RefreshToken: tokens.RefreshToken, - AccessToken: tokens.AccessToken, + RefreshToken: refreshToken, + AccessToken: accessToken, AccessTokenExpiry: now.Add(accessTokenTTL), CreatedAt: now, }, nil |
