- Notifications
You must be signed in to change notification settings - Fork928
feat: audit login#5925
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
feat: audit login#5925
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
coderd/users.go Outdated
var loginWithPassword codersdk.LoginWithPasswordRequest | ||
if !httpapi.Read(ctx, rw, r, &loginWithPassword) { | ||
// We pass a disposable user ID just to force an audit diff | ||
// and generate a log for a failed login | ||
aReq.New = database.APIKey{UserID: uuid.New()} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Down for another approach here. The auditor will skip audit log generation if there's not a valid diff. We don't have a proper UUID onAPIKey
and anyways, we bail before we actually create the model. I figured generating a garbage UUID was the fastest path forward but admittedly it's kinda gross.
coderd/users.go Outdated
@@ -995,9 +995,25 @@ func (api *API) organizationByUserAndName(rw http.ResponseWriter, r *http.Reques | |||
// @Success 201 {object} codersdk.LoginWithPasswordResponse | |||
// @Router /users/login [post] | |||
func (api *API) postLogin(rw http.ResponseWriter, r *http.Request) { | |||
ctx := r.Context() | |||
var ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Does this handler handle all authentication paths? What if a user isn't logging with a password?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
There's a file calleduserauth.go
with all of the other ways to login. This endpoint should probably be in there anyways.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Alright, added auditing for OAuth and OIDC. I am not sure how best to smoke-test locally, but I made sure to update all the auth tests.
return xerrors.Errorf("find linked user: %w", err) | ||
} | ||
user = params.User | ||
link = params.Link |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I thought it was safe to lift finding the user outside of the transaction and into the callers so we can accessUser.ID
in those places. If, in the callers, we don't find a user, we bail early, never enteringoauthLogin
.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think we can make things a bit nicer and not repeataReq.New = database.APIKey{}
all the time when we return an error. Feels like a bug waiting to happen since we have to always rememeber to put that.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Minor nits on comments, LG!
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Steven Masley <Emyrk@users.noreply.github.com>
Uh oh!
There was an error while loading.Please reload this page.
Part of#4538

Logout coming next