storage: add extra fields to refresh token and update method
This commit is contained in:
		| @@ -244,14 +244,16 @@ func (c *conn) CreateRefresh(r storage.RefreshToken) error { | ||||
| 			id, client_id, scopes, nonce, | ||||
| 			claims_user_id, claims_username, claims_email, claims_email_verified, | ||||
| 			claims_groups, | ||||
| 			connector_id, connector_data | ||||
| 			connector_id, connector_data, | ||||
| 			token, created_at, last_used | ||||
| 		) | ||||
| 		values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11); | ||||
| 		values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14); | ||||
| 	`, | ||||
| 		r.RefreshToken, r.ClientID, encoder(r.Scopes), r.Nonce, | ||||
| 		r.ID, r.ClientID, encoder(r.Scopes), r.Nonce, | ||||
| 		r.Claims.UserID, r.Claims.Username, r.Claims.Email, r.Claims.EmailVerified, | ||||
| 		encoder(r.Claims.Groups), | ||||
| 		r.ConnectorID, r.ConnectorData, | ||||
| 		r.Token, r.CreatedAt, r.LastUsed, | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("insert refresh_token: %v", err) | ||||
| @@ -259,13 +261,57 @@ func (c *conn) CreateRefresh(r storage.RefreshToken) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (c *conn) UpdateRefreshToken(id string, updater func(old storage.RefreshToken) (storage.RefreshToken, error)) error { | ||||
| 	return c.ExecTx(func(tx *trans) error { | ||||
| 		r, err := getRefresh(tx, id) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if r, err = updater(r); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		_, err = tx.Exec(` | ||||
| 			update refresh_token | ||||
| 			set | ||||
| 				client_id = $1, | ||||
| 				scopes = $2, | ||||
| 				nonce = $3, | ||||
| 				claims_user_id = $4, | ||||
| 				claims_username = $5, | ||||
| 				claims_email = $6, | ||||
| 				claims_email_verified = $7, | ||||
| 				claims_groups = $8, | ||||
| 				connector_id = $9, | ||||
| 				connector_data = $10, | ||||
| 				token = $11, | ||||
| 				created_at = $12, | ||||
| 				last_used = $13 | ||||
| 		`, | ||||
| 			r.ClientID, encoder(r.Scopes), r.Nonce, | ||||
| 			r.Claims.UserID, r.Claims.Username, r.Claims.Email, r.Claims.EmailVerified, | ||||
| 			encoder(r.Claims.Groups), | ||||
| 			r.ConnectorID, r.ConnectorData, | ||||
| 			r.Token, r.CreatedAt, r.LastUsed, | ||||
| 		) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("update refresh token: %v", err) | ||||
| 		} | ||||
| 		return nil | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (c *conn) GetRefresh(id string) (storage.RefreshToken, error) { | ||||
| 	return scanRefresh(c.QueryRow(` | ||||
| 	return getRefresh(c, id) | ||||
| } | ||||
|  | ||||
| func getRefresh(q querier, id string) (storage.RefreshToken, error) { | ||||
| 	return scanRefresh(q.QueryRow(` | ||||
| 		select | ||||
| 			id, client_id, scopes, nonce, | ||||
| 			claims_user_id, claims_username, claims_email, claims_email_verified, | ||||
| 			claims_groups, | ||||
| 			connector_id, connector_data | ||||
| 			connector_id, connector_data, | ||||
| 			token, created_at, last_used | ||||
| 		from refresh_token where id = $1; | ||||
| 	`, id)) | ||||
| } | ||||
| @@ -276,7 +322,8 @@ func (c *conn) ListRefreshTokens() ([]storage.RefreshToken, error) { | ||||
| 			id, client_id, scopes, nonce, | ||||
| 			claims_user_id, claims_username, claims_email, claims_email_verified, | ||||
| 			claims_groups, | ||||
| 			connector_id, connector_data | ||||
| 			connector_id, connector_data, | ||||
| 			token, created_at, last_used | ||||
| 		from refresh_token; | ||||
| 	`) | ||||
| 	if err != nil { | ||||
| @@ -298,10 +345,11 @@ func (c *conn) ListRefreshTokens() ([]storage.RefreshToken, error) { | ||||
|  | ||||
| func scanRefresh(s scanner) (r storage.RefreshToken, err error) { | ||||
| 	err = s.Scan( | ||||
| 		&r.RefreshToken, &r.ClientID, decoder(&r.Scopes), &r.Nonce, | ||||
| 		&r.ID, &r.ClientID, decoder(&r.Scopes), &r.Nonce, | ||||
| 		&r.Claims.UserID, &r.Claims.Username, &r.Claims.Email, &r.Claims.EmailVerified, | ||||
| 		decoder(&r.Claims.Groups), | ||||
| 		&r.ConnectorID, &r.ConnectorData, | ||||
| 		&r.Token, &r.CreatedAt, &r.LastUsed, | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		if err == sql.ErrNoRows { | ||||
|   | ||||
| @@ -155,4 +155,14 @@ var migrations = []migration{ | ||||
| 			); | ||||
| 		`, | ||||
| 	}, | ||||
| 	{ | ||||
| 		stmt: ` | ||||
| 			alter table refresh_token | ||||
| 				add column token text not null default ''; | ||||
| 			alter table refresh_token | ||||
| 				add column created_at timestamptz not null default '0001-01-01 00:00:00 UTC'; | ||||
| 			alter table refresh_token | ||||
| 				add column last_used timestamptz not null default '0001-01-01 00:00:00 UTC'; | ||||
| 		`, | ||||
| 	}, | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user