provisioning: implement legacy endpoints

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-08-27 15:32:07 -06:00
parent ced27a9974
commit bbf53fb28b
6 changed files with 209 additions and 24 deletions
-6
View File
@@ -38,12 +38,6 @@ var _ bridgev2.NetworkConnector = (*TelegramConnector)(nil)
// var _ bridgev2.MaxFileSizeingNetwork = (*TelegramConnector)(nil)
func NewConnector() *TelegramConnector {
return &TelegramConnector{
Config: &TelegramConfig{},
}
}
func (tg *TelegramConnector) Init(bridge *bridgev2.Bridge) {
tg.Store = store.NewStore(bridge.DB.Database, dbutil.ZeroLogger(bridge.Log.With().Str("db_section", "telegram").Logger()))
tg.Bridge = bridge
+14 -14
View File
@@ -54,10 +54,10 @@ func (tg *TelegramConnector) CreateLogin(ctx context.Context, user *bridgev2.Use
}
const (
phoneNumberStep = "fi.mau.telegram.phone_number"
codeStep = "fi.mau.telegram.code"
passwordStep = "fi.mau.telegram.password"
completeStep = "fi.mau.telegram.complete"
LoginStepIDPhoneNumber = "fi.mau.telegram.phone_number"
LoginStepIDCode = "fi.mau.telegram.code"
LoginStepIDPassword = "fi.mau.telegram.password"
LoginStepIDComplete = "fi.mau.telegram.complete"
)
type PhoneLogin struct {
@@ -80,13 +80,13 @@ func (p *PhoneLogin) Cancel() {
func (p *PhoneLogin) Start(ctx context.Context) (*bridgev2.LoginStep, error) {
return &bridgev2.LoginStep{
Type: bridgev2.LoginStepTypeUserInput,
StepID: phoneNumberStep,
StepID: LoginStepIDPhoneNumber,
Instructions: "Please enter your phone number",
UserInputParams: &bridgev2.LoginUserInputParams{
Fields: []bridgev2.LoginInputDataField{
{
Type: bridgev2.LoginInputFieldTypePhoneNumber,
ID: phoneNumberStep,
ID: LoginStepIDPhoneNumber,
Name: "Phone Number",
Description: "Include the country code with +",
},
@@ -96,7 +96,7 @@ func (p *PhoneLogin) Start(ctx context.Context) (*bridgev2.LoginStep, error) {
}
func (p *PhoneLogin) SubmitUserInput(ctx context.Context, input map[string]string) (*bridgev2.LoginStep, error) {
if phone, ok := input[phoneNumberStep]; ok {
if phone, ok := input[LoginStepIDPhoneNumber]; ok {
p.phone = phone
p.client = telegram.NewClient(p.main.Config.APIID, p.main.Config.APIHash, telegram.Options{
CustomSessionStorage: &p.authData,
@@ -116,13 +116,13 @@ func (p *PhoneLogin) SubmitUserInput(ctx context.Context, input map[string]strin
p.hash = s.PhoneCodeHash
return &bridgev2.LoginStep{
Type: bridgev2.LoginStepTypeUserInput,
StepID: codeStep,
StepID: LoginStepIDCode,
Instructions: "Please enter the code sent to your phone",
UserInputParams: &bridgev2.LoginUserInputParams{
Fields: []bridgev2.LoginInputDataField{
{
Type: bridgev2.LoginInputFieldType2FACode,
ID: codeStep,
ID: LoginStepIDCode,
Name: "Code",
},
},
@@ -141,18 +141,18 @@ func (p *PhoneLogin) SubmitUserInput(ctx context.Context, input map[string]strin
default:
return nil, fmt.Errorf("unexpected sent code type: %T", sentCode)
}
} else if code, ok := input[codeStep]; ok {
} else if code, ok := input[LoginStepIDCode]; ok {
authorization, err := p.client.Auth().SignIn(ctx, p.phone, code, p.hash)
if errors.Is(err, auth.ErrPasswordAuthNeeded) {
return &bridgev2.LoginStep{
Type: bridgev2.LoginStepTypeUserInput,
StepID: passwordStep,
StepID: LoginStepIDPassword,
Instructions: "Please enter your password",
UserInputParams: &bridgev2.LoginUserInputParams{
Fields: []bridgev2.LoginInputDataField{
{
Type: bridgev2.LoginInputFieldTypePassword,
ID: passwordStep,
ID: LoginStepIDPassword,
Name: "Password",
},
},
@@ -164,7 +164,7 @@ func (p *PhoneLogin) SubmitUserInput(ctx context.Context, input map[string]strin
return nil, fmt.Errorf("failed to submit code: %w", err)
}
return p.handleAuthSuccess(ctx, authorization)
} else if password, ok := input[passwordStep]; ok {
} else if password, ok := input[LoginStepIDPassword]; ok {
authorization, err := p.client.Auth().Password(ctx, password)
if err != nil {
return nil, fmt.Errorf("failed to submit password: %w", err)
@@ -208,7 +208,7 @@ func (p *PhoneLogin) handleAuthSuccess(ctx context.Context, authorization *tg.Au
}()
return &bridgev2.LoginStep{
Type: bridgev2.LoginStepTypeComplete,
StepID: completeStep,
StepID: LoginStepIDComplete,
Instructions: fmt.Sprintf("Successfully logged in as %d / +%s (%s)", user.ID, user.Phone, util.FormatFullName(user.FirstName, user.LastName)),
CompleteParams: &bridgev2.LoginCompleteParams{
UserLoginID: ul.ID,