login: relocate shared login finalization logic into embedded struct

All of the login methods need to do (effectively) the same thing once we
have a token, so refactor this out into something we can reuse.
This commit is contained in:
Skip R
2026-01-07 20:10:18 -08:00
parent b764f489de
commit 4fb0cdb847
5 changed files with 141 additions and 200 deletions

View File

@@ -27,16 +27,16 @@ const LoginStepIDComplete = "fi.mau.discord.login.complete"
func (d *DiscordConnector) GetLoginFlows() []bridgev2.LoginFlow {
return []bridgev2.LoginFlow{
{
ID: LoginFlowIDBrowser,
Name: "Browser",
Description: "Log in to your Discord account in a web browser.",
},
{
ID: LoginFlowIDRemoteAuth,
Name: "QR Code",
Description: "Scan a QR code with the Discord mobile app to log in.",
},
{
ID: LoginFlowIDBrowser,
Name: "Browser",
Description: "Log in to your Discord account in a web browser.",
},
{
ID: LoginFlowIDToken,
Name: "Token",
@@ -46,13 +46,18 @@ func (d *DiscordConnector) GetLoginFlows() []bridgev2.LoginFlow {
}
func (d *DiscordConnector) CreateLogin(ctx context.Context, user *bridgev2.User, flowID string) (bridgev2.LoginProcess, error) {
login := DiscordGenericLogin{
connector: d,
User: user,
}
switch flowID {
case LoginFlowIDToken:
return &DiscordTokenLogin{connector: d, User: user}, nil
return &DiscordTokenLogin{DiscordGenericLogin: &login}, nil
case LoginFlowIDRemoteAuth:
return &DiscordRemoteAuthLogin{connector: d, User: user}, nil
return &DiscordRemoteAuthLogin{DiscordGenericLogin: &login}, nil
case LoginFlowIDBrowser:
return &DiscordBrowserLogin{connector: d, User: user}, nil
return &DiscordBrowserLogin{DiscordGenericLogin: &login}, nil
default:
return nil, fmt.Errorf("unknown discord login flow id")
}