Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fix: use unique ID for linked accounts#3441

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
sreya merged 35 commits intomainfromjon/userauth
Aug 17, 2022
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
35 commits
Select commitHold shift + click to select a range
305f696
fix: use unique ID for linked accounts
sreyaAug 9, 2022
b4ab301
fixup a bunch of stuff
sreyaAug 9, 2022
dd2df9c
gofmt
sreyaAug 9, 2022
0356f46
make fake db happy
sreyaAug 9, 2022
6b1b900
make audit happy
sreyaAug 9, 2022
8f63d5c
fix some tests
sreyaAug 10, 2022
de7db33
make gen
sreyaAug 10, 2022
5fdf899
fix tests
sreyaAug 10, 2022
3a4d049
fmt
sreyaAug 10, 2022
4108ece
begin refactoring PR
sreyaAug 11, 2022
14b5382
finish migration
sreyaAug 12, 2022
8553501
use main sql.dump
sreyaAug 12, 2022
f748d3d
lift error
sreyaAug 12, 2022
c1b9871
new migration
sreyaAug 12, 2022
e41c103
more rewriting
sreyaAug 12, 2022
bb9b777
even more rewriting
sreyaAug 12, 2022
d940dae
finish up some test fixing
sreyaAug 12, 2022
c97d572
typos
sreyaAug 12, 2022
10bfe77
Merge branch 'main' into jon/userauth
sreyaAug 12, 2022
28a37f1
fix some remaining tests
sreyaAug 12, 2022
c889bf0
fix a gnarly bug
sreyaAug 12, 2022
0196a49
add a down migration
sreyaAug 12, 2022
b5dc95b
add fkey on user_links, fix tests, add comments
sreyaAug 12, 2022
f2f76e9
add login_type to users table
sreyaAug 12, 2022
940ced4
Merge branch 'main' into jon/userauth
sreyaAug 12, 2022
eb266db
fix login_type query
sreyaAug 13, 2022
4671bf6
fix tests
sreyaAug 13, 2022
c41f4e6
fix audit
sreyaAug 13, 2022
f3d8392
fix down
sreyaAug 13, 2022
cc8400b
fix one more test
sreyaAug 13, 2022
5c7cbae
Merge branch 'main' into jon/userauth
sreyaAug 17, 2022
083d256
pr comments
sreyaAug 17, 2022
92c185d
fix conflicting migration file
sreyaAug 17, 2022
05595d8
generate.sh
sreyaAug 17, 2022
aa90148
butcher the english language to appease colin
sreyaAug 17, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
pr comments
  • Loading branch information
@sreya
sreya committedAug 17, 2022
commit083d256c65640d68ae848f2201390f05c9263b0e
48 changes: 24 additions & 24 deletionscoderd/database/migrations/000034_linked_user_id.up.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,8 +7,8 @@ CREATE TABLE IF NOT EXISTS user_links (
oauth_access_token text DEFAULT ''::text NOT NULL,
oauth_refresh_token text DEFAULT ''::text NOT NULL,
oauth_expiry timestamp with time zone DEFAULT '0001-01-01 00:00:00+00'::timestamp with time zone NOT NULL,
UNIQUE(user_id, login_type),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
PRIMARY KEY(user_id, login_type),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- This migrates columns on api_keys to the new user_links table.
Expand All@@ -18,34 +18,34 @@ CREATE TABLE IF NOT EXISTS user_links (
-- A user should at most have a row for an OIDC account and a Github account.
-- 'password' login types are ignored.

INSERT INTO user_links
(
INSERT INTO user_links
(
user_id,
login_type,
linked_id,
oauth_access_token,
oauth_refresh_token,
oauth_expiry
)
SELECT
keys.user_id,
SELECT
keys.user_id,
keys.login_type,
'',
keys.oauth_access_token,
keys.oauth_refresh_token,
keys.oauth_expiry
FROM
(
SELECT
row_number() OVER (partition by user_id, login_type ORDER BY last_used DESC) AS x,
keys.oauth_expiry
FROM
(
SELECT
row_number() OVER (partition by user_id, login_type ORDER BY last_used DESC) AS x,
api_keys.* FROM api_keys
) as keys
WHERE x=1 AND keys.login_type != 'password';
WHERE x=1 AND keys.login_type != 'password';

-- Drop columns that have been migrated to user_links.
-- It appears the 'oauth_id_token' was unused and so it has
-- been dropped here as well to avoid future confusion.
ALTER TABLE api_keys
ALTER TABLE api_keys
DROP COLUMN oauth_access_token,
DROP COLUMN oauth_refresh_token,
DROP COLUMN oauth_id_token,
Expand All@@ -54,18 +54,18 @@ ALTER TABLE api_keys
ALTER TABLE users ADD COLUMN login_type login_type NOT NULL DEFAULT 'password';

UPDATE
users
users
SET
login_type = (
SELECT
login_type
FROM
user_links
WHERE
user_links.user_id = users.id
ORDER BY oauth_expiry DESC
LIMIT 1
)
login_type = (
SELECT
login_type
FROM
user_links
WHERE
user_links.user_id = users.id
ORDER BY oauth_expiry DESC
LIMIT 1
)
FROM
user_links
WHERE
Expand Down
46 changes: 23 additions & 23 deletionscoderd/database/queries/user_links.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,46 @@
-- name: GetUserLinkByLinkedID :one
SELECT
*
*
FROM
user_links
user_links
WHERE
linked_id = $1;
linked_id = $1;

-- name: GetUserLinkByUserIDLoginType :one
SELECT
*
*
FROM
user_links
user_links
WHERE
user_id = $1 AND login_type = $2;
user_id = $1 AND login_type = $2;

-- name: InsertUserLink :one
INSERT INTO
user_links (
user_id,
login_type,
linked_id,
oauth_access_token,
oauth_refresh_token,
oauth_expiry
)
user_links (
user_id,
login_type,
linked_id,
oauth_access_token,
oauth_refresh_token,
oauth_expiry
)
VALUES
( $1, $2, $3, $4, $5, $6 ) RETURNING *;
( $1, $2, $3, $4, $5, $6 ) RETURNING *;

-- name: UpdateUserLinkedID :one
UPDATE
user_links
user_links
SET
linked_id = $1
linked_id = $1
WHERE
user_id = $2 AND login_type = $3 RETURNING *;
user_id = $2 AND login_type = $3 RETURNING *;

-- name: UpdateUserLink :one
UPDATE
user_links
user_links
SET
oauth_access_token = $1,
oauth_refresh_token = $2,
oauth_expiry = $3
oauth_access_token = $1,
oauth_refresh_token = $2,
oauth_expiry = $3
WHERE
user_id = $4 AND login_type = $5 RETURNING *;
user_id = $4 AND login_type = $5 RETURNING *;
14 changes: 7 additions & 7 deletionscoderd/database/queries/users.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,7 +38,7 @@ INSERT INTO
created_at,
updated_at,
rbac_roles,
login_type
login_type
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *;
Expand All@@ -55,12 +55,12 @@ WHERE

-- name: UpdateUserRoles :one
UPDATE
users
users
SET
-- Remove all duplicates from the roles.
rbac_roles = ARRAY(SELECT DISTINCT UNNEST(@granted_roles :: text[]))
WHERE
id = @id
id = @id
RETURNING *;

-- name: UpdateUserHashedPassword :exec
Expand DownExpand Up@@ -123,8 +123,8 @@ WHERE
END
-- End of filters
ORDER BY
-- Deterministic and consistent ordering of all users, even if they share
-- a timestamp. This is to ensure consistent pagination.
-- Deterministic and consistent ordering of all users, even if they share
-- a timestamp. This is to ensure consistent pagination.
(created_at, id) ASC OFFSET @offset_opt
LIMIT
-- A null limit means "no limit", so 0 means return all
Expand DownExpand Up@@ -153,10 +153,10 @@ SELECT
array_append(users.rbac_roles, 'member'),
-- All org_members get the org-member role for their orgs
array_append(organization_members.roles, 'organization-member:'||organization_members.organization_id::text)) :: text[]
AS roles
AS roles
FROM
users
LEFT JOIN organization_members
ON id = user_id
WHERE
id = @user_id;
id = @user_id;
8 changes: 5 additions & 3 deletionscoderd/userauth.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -148,7 +148,7 @@ func (api *API) userOAuth2Github(rw http.ResponseWriter, r *http.Request) {

if user.ID != uuid.Nil && user.LoginType != database.LoginTypeGithub {
httpapi.Write(rw, http.StatusForbidden, codersdk.Response{
Message: fmt.Sprintf("Incorrect login type, attempting to use %q but user is of login type %q", database.LoginTypeOIDC, user.LoginType),
Message: fmt.Sprintf("Incorrect login type, attempting to use %q but user is of login type %q", database.LoginTypeGithub, user.LoginType),
})
return
}
Expand DownExpand Up@@ -215,7 +215,7 @@ func (api *API) userOAuth2Github(rw http.ResponseWriter, r *http.Request) {
if err != nil {
httpapi.Write(rw, http.StatusInternalServerError, codersdk.Response{
Message: "A database error occurred.",
Detail:xerrors.Errorf("insert user link: %w", err.Error).Error(),
Detail:fmt.Sprintf("insert user link: %s", err.Error()),
})
return
}
Expand DownExpand Up@@ -358,6 +358,8 @@ func (api *API) userOIDC(rw http.ResponseWriter, r *http.Request) {
return
}

// This can happen if a user is a built-in user but is signing in
// with OIDC for the first time.
if user.ID == uuid.Nil {
var organizationID uuid.UUID
organizations, _ := api.Database.GetOrganizations(ctx)
Expand DownExpand Up@@ -404,7 +406,7 @@ func (api *API) userOIDC(rw http.ResponseWriter, r *http.Request) {
if err != nil {
httpapi.Write(rw, http.StatusInternalServerError, codersdk.Response{
Message: "A database error occurred.",
Detail:xerrors.Errorf("insert user link: %w", err.Error).Error(),
Detail:fmt.Sprintf("insert user link: %s", err.Error()),
})
return
}
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp