diff --git a/auth/auth.go b/auth/auth.go deleted file mode 100644 index 238af50..0000000 --- a/auth/auth.go +++ /dev/null @@ -1,29 +0,0 @@ -package auth - -import ( - "context" - "github.com/1f349/lavender/auth/process" - "github.com/1f349/lavender/database" -) - -type Provider interface { - // AccessState defines the state at which the provider is allowed to show. - // Some factors might be unavailable due to user preference. - AccessState() process.State - - // Name defines a string value for the provider. - Name() string -} - -type LookupUserDB interface { - GetUser(ctx context.Context, subject string) (database.User, error) -} - -func LookupUser(ctx context.Context, db LookupUserDB, subject string, user *database.User) error { - getUser, err := db.GetUser(ctx, subject) - if err != nil { - return err - } - *user = getUser - return nil -} diff --git a/auth/auth-buttons.go b/auth/button.go similarity index 100% rename from auth/auth-buttons.go rename to auth/button.go diff --git a/auth/auth-callback.go b/auth/callback.go similarity index 100% rename from auth/auth-callback.go rename to auth/callback.go diff --git a/auth/auth-form.go b/auth/form.go similarity index 100% rename from auth/auth-form.go rename to auth/form.go diff --git a/auth/provider.go b/auth/provider.go new file mode 100644 index 0000000..e889127 --- /dev/null +++ b/auth/provider.go @@ -0,0 +1,14 @@ +package auth + +import ( + "github.com/1f349/lavender/auth/process" +) + +type Provider interface { + // AccessState defines the state at which the provider is allowed to show. + // Some factors might be unavailable due to user preference. + AccessState() process.State + + // Name defines a string value for the provider. + Name() string +} diff --git a/auth/providers/passkey.go b/auth/providers/passkey.go index b6b06d3..07bd58c 100644 --- a/auth/providers/passkey.go +++ b/auth/providers/passkey.go @@ -1,13 +1,15 @@ package providers import ( + "context" "github.com/1f349/lavender/auth" "github.com/1f349/lavender/auth/authContext" "github.com/1f349/lavender/auth/process" + "github.com/1f349/lavender/database" ) type passkeyLoginDB interface { - auth.LookupUserDB + GetUser(ctx context.Context, subject string) (database.User, error) } var ( diff --git a/auth/providers/password.go b/auth/providers/password.go index e860f8f..49d4f5c 100644 --- a/auth/providers/password.go +++ b/auth/providers/password.go @@ -12,7 +12,7 @@ import ( ) type passwordLoginDB interface { - auth.LookupUserDB + GetUser(ctx context.Context, subject string) (database.User, error) CheckLogin(ctx context.Context, un, pw string) (database.CheckLoginResult, error) } @@ -58,7 +58,16 @@ func (b *PasswordLogin) AttemptLogin(ctx authContext.FormContext) error { login, err := b.DB.CheckLogin(ctx.Context(), un, pw) switch { case err == nil: - return auth.LookupUser(ctx.Context(), b.DB, login.Subject, ctx.User()) + user, err := b.DB.GetUser(ctx.Context(), login.Subject) + if err != nil { + return err + } + ctx.SetUser(&user) + ctx.UpdateSession(process.LoginProcessData{ + State: process.StateBasic, + Email: un, + }) + return nil case errors.Is(err, sql.ErrNoRows): return auth.BasicUserSafeError(http.StatusForbidden, "Username or password is invalid") default: