@@ -145,15 +145,20 @@ func (lc *LineConnector) LoadUserLogin(ctx context.Context, login *bridgev2.User
145145 return nil
146146}
147147
148+ const LoginFlowIDEmail = "dev.highest.matrix.line.email_login"
149+
148150func (lc * LineConnector ) GetLoginFlows () []bridgev2.LoginFlow {
149151 return []bridgev2.LoginFlow {{
150152 Name : "Login" ,
151153 Description : "Login with your LINE Email and Password" ,
152- ID : "dev.highest.matrix.line.email_login" ,
154+ ID : LoginFlowIDEmail ,
153155 }}
154156}
155157
156158func (lc * LineConnector ) CreateLogin (ctx context.Context , user * bridgev2.User , flowID string ) (bridgev2.LoginProcess , error ) {
159+ if flowID != LoginFlowIDEmail {
160+ return nil , bridgev2 .ErrInvalidLoginFlowID
161+ }
157162 return & LineEmailLogin {User : user , finalizeMu : & lc .loginFinalizeMu }, nil
158163}
159164
@@ -233,7 +238,7 @@ func (ll *LineEmailLogin) StartWithOverride(ctx context.Context, override *bridg
233238 ll .logLoginFailure (err , "reconnect" )
234239 reason := loginErrorReason (err )
235240 if reason == "" {
236- reason = fmt . Sprintf ( "Login failed: %v" , err )
241+ reason = genericLoginFailureReason
237242 }
238243 return ll .loginErrorStep (reason ), nil
239244 }
@@ -260,7 +265,7 @@ func (ll *LineEmailLogin) SubmitUserInput(ctx context.Context, input map[string]
260265 ll .logLoginFailure (err , "credentials" )
261266 reason := loginErrorReason (err )
262267 if reason == "" {
263- reason = fmt . Sprintf ( "Login failed: %v" , err )
268+ reason = genericLoginFailureReason
264269 }
265270 return ll .loginErrorStep (reason ), nil
266271 }
@@ -456,10 +461,10 @@ func (ll *LineEmailLogin) Wait(ctx context.Context) (*bridgev2.LoginStep, error)
456461 if res .AuthToken != "" {
457462 return ll .finishLogin (ctx , res )
458463 }
459- return nil , fmt . Errorf ( "verification failed: no auth token received" )
464+ return nil , ErrLoginVerificationFailed
460465 case err := <- ll .pollErr :
461466 ll .logLoginFailure (err , "verification_poll" )
462- return nil , fmt . Errorf ( "verification failed: %w" , err )
467+ return nil , wrapLineLoginError ( err )
463468 case <- ctx .Done ():
464469 return nil , ctx .Err ()
465470 }
@@ -469,7 +474,7 @@ func (ll *LineEmailLogin) Wait(ctx context.Context) (*bridgev2.LoginStep, error)
469474 res , err := loginWithCredentials (ll .Email , ll .Password , ll .Certificate )
470475 if err != nil {
471476 ll .logLoginFailure (err , "pin_continuation" )
472- return nil , fmt . Errorf ( "login failed: %w" , err )
477+ return nil , wrapLineLoginError ( err )
473478 }
474479 return ll .handleLoginResponse (ctx , res )
475480 }
@@ -581,7 +586,7 @@ func (ll *LineEmailLogin) finishLogin(ctx context.Context, res *line.LoginResult
581586 ll .User .Bridge .Log .Info ().Int ("keys" , len (meta .ExportedKeyMap )).Msg ("Preserved existing E2EE keys after re-login" )
582587 }
583588 if ! res .NoE2EE && len (meta .ExportedKeyMap ) == 0 {
584- return nil , fmt . Errorf ( "LINE login completed without E2EE keychain; please reconnect again and complete the LINE verification prompt" )
589+ return nil , ErrLoginNoKeychain
585590 }
586591
587592 detectedLineID := networkid .UserLoginID (mid )
0 commit comments