github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/protocol/keybase1/login.go (about)

     1  // Auto-generated to Go types and interfaces using avdl-compiler v1.4.10 (https://github.com/keybase/node-avdl-compiler)
     2  //   Input file: avdl/keybase1/login.avdl
     3  
     4  package keybase1
     5  
     6  import (
     7  	"github.com/keybase/go-framed-msgpack-rpc/rpc"
     8  	context "golang.org/x/net/context"
     9  	"time"
    10  )
    11  
    12  type ConfiguredAccount struct {
    13  	Username        string   `codec:"username" json:"username"`
    14  	Fullname        FullName `codec:"fullname" json:"fullname"`
    15  	HasStoredSecret bool     `codec:"hasStoredSecret" json:"hasStoredSecret"`
    16  	IsCurrent       bool     `codec:"isCurrent" json:"isCurrent"`
    17  }
    18  
    19  func (o ConfiguredAccount) DeepCopy() ConfiguredAccount {
    20  	return ConfiguredAccount{
    21  		Username:        o.Username,
    22  		Fullname:        o.Fullname.DeepCopy(),
    23  		HasStoredSecret: o.HasStoredSecret,
    24  		IsCurrent:       o.IsCurrent,
    25  	}
    26  }
    27  
    28  type GetConfiguredAccountsArg struct {
    29  	SessionID int `codec:"sessionID" json:"sessionID"`
    30  }
    31  
    32  type LoginArg struct {
    33  	SessionID    int          `codec:"sessionID" json:"sessionID"`
    34  	DeviceType   DeviceTypeV2 `codec:"deviceType" json:"deviceType"`
    35  	Username     string       `codec:"username" json:"username"`
    36  	ClientType   ClientType   `codec:"clientType" json:"clientType"`
    37  	DoUserSwitch bool         `codec:"doUserSwitch" json:"doUserSwitch"`
    38  	PaperKey     string       `codec:"paperKey" json:"paperKey"`
    39  	DeviceName   string       `codec:"deviceName" json:"deviceName"`
    40  }
    41  
    42  type LoginProvisionedDeviceArg struct {
    43  	SessionID          int    `codec:"sessionID" json:"sessionID"`
    44  	Username           string `codec:"username" json:"username"`
    45  	NoPassphrasePrompt bool   `codec:"noPassphrasePrompt" json:"noPassphrasePrompt"`
    46  }
    47  
    48  type LoginWithPaperKeyArg struct {
    49  	SessionID int    `codec:"sessionID" json:"sessionID"`
    50  	Username  string `codec:"username" json:"username"`
    51  }
    52  
    53  type LogoutArg struct {
    54  	SessionID   int  `codec:"sessionID" json:"sessionID"`
    55  	Force       bool `codec:"force" json:"force"`
    56  	KeepSecrets bool `codec:"keepSecrets" json:"keepSecrets"`
    57  }
    58  
    59  type DeprovisionArg struct {
    60  	SessionID int    `codec:"sessionID" json:"sessionID"`
    61  	Username  string `codec:"username" json:"username"`
    62  	DoRevoke  bool   `codec:"doRevoke" json:"doRevoke"`
    63  }
    64  
    65  type RecoverAccountFromEmailAddressArg struct {
    66  	Email string `codec:"email" json:"email"`
    67  }
    68  
    69  type RecoverPassphraseArg struct {
    70  	SessionID int    `codec:"sessionID" json:"sessionID"`
    71  	Username  string `codec:"username" json:"username"`
    72  }
    73  
    74  type PaperKeyArg struct {
    75  	SessionID int `codec:"sessionID" json:"sessionID"`
    76  }
    77  
    78  type PaperKeySubmitArg struct {
    79  	SessionID   int    `codec:"sessionID" json:"sessionID"`
    80  	PaperPhrase string `codec:"paperPhrase" json:"paperPhrase"`
    81  }
    82  
    83  type UnlockArg struct {
    84  	SessionID int `codec:"sessionID" json:"sessionID"`
    85  }
    86  
    87  type UnlockWithPassphraseArg struct {
    88  	SessionID  int    `codec:"sessionID" json:"sessionID"`
    89  	Passphrase string `codec:"passphrase" json:"passphrase"`
    90  }
    91  
    92  type AccountDeleteArg struct {
    93  	SessionID  int     `codec:"sessionID" json:"sessionID"`
    94  	Passphrase *string `codec:"passphrase,omitempty" json:"passphrase,omitempty"`
    95  }
    96  
    97  type LoginOneshotArg struct {
    98  	SessionID int    `codec:"sessionID" json:"sessionID"`
    99  	Username  string `codec:"username" json:"username"`
   100  	PaperKey  string `codec:"paperKey" json:"paperKey"`
   101  }
   102  
   103  type IsOnlineArg struct {
   104  }
   105  
   106  type LoginInterface interface {
   107  	// Returns an array of information about accounts configured on the local
   108  	// machine. Currently configured accounts are defined as those that have stored
   109  	// secrets, but this definition may be expanded in the future.
   110  	GetConfiguredAccounts(context.Context, int) ([]ConfiguredAccount, error)
   111  	// Performs login.  deviceType should be keybase1.DeviceTypeV2_DESKTOP
   112  	// or keybase1.DeviceTypeV2_MOBILE. username is optional. If the current
   113  	// device isn't provisioned, this function will provision it.
   114  	Login(context.Context, LoginArg) error
   115  	// Login a user only if the user is on a provisioned device. Username is optional.
   116  	// If noPassphrasePrompt is set, then only a stored secret will be used to unlock
   117  	// the device keys.
   118  	LoginProvisionedDevice(context.Context, LoginProvisionedDeviceArg) error
   119  	// Login and unlock by
   120  	// - trying unlocked device keys if available
   121  	// - prompting for a paper key and using that
   122  	LoginWithPaperKey(context.Context, LoginWithPaperKeyArg) error
   123  	Logout(context.Context, LogoutArg) error
   124  	Deprovision(context.Context, DeprovisionArg) error
   125  	RecoverAccountFromEmailAddress(context.Context, string) error
   126  	// Guide the user through possibilities of changing their passphrase.
   127  	// Lets them change their passphrase using a paper key or enter the reset pipeline.
   128  	RecoverPassphrase(context.Context, RecoverPassphraseArg) error
   129  	// PaperKey generates paper backup keys for restoring an account.
   130  	// It calls login_ui.displayPaperKeyPhrase with the phrase.
   131  	PaperKey(context.Context, int) error
   132  	// paperKeySubmit checks that paperPhrase is a valid paper key
   133  	// for the logged in user, caches the keys, and sends a notification.
   134  	PaperKeySubmit(context.Context, PaperKeySubmitArg) error
   135  	// Unlock restores access to local key store by priming passphrase stream cache.
   136  	Unlock(context.Context, int) error
   137  	UnlockWithPassphrase(context.Context, UnlockWithPassphraseArg) error
   138  	// accountDelete deletes the current user's account.
   139  	AccountDelete(context.Context, AccountDeleteArg) error
   140  	// loginOneshot allows a service to have a "onetime login", without
   141  	// provisioning a device. It bootstraps credentials with the given
   142  	// paperkey
   143  	LoginOneshot(context.Context, LoginOneshotArg) error
   144  	// isOnline returns whether the device is able to open a connection to keybase.io.
   145  	// Used for determining whether to offer proxy settings on the login screen.
   146  	IsOnline(context.Context) (bool, error)
   147  }
   148  
   149  func LoginProtocol(i LoginInterface) rpc.Protocol {
   150  	return rpc.Protocol{
   151  		Name: "keybase.1.login",
   152  		Methods: map[string]rpc.ServeHandlerDescription{
   153  			"getConfiguredAccounts": {
   154  				MakeArg: func() interface{} {
   155  					var ret [1]GetConfiguredAccountsArg
   156  					return &ret
   157  				},
   158  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   159  					typedArgs, ok := args.(*[1]GetConfiguredAccountsArg)
   160  					if !ok {
   161  						err = rpc.NewTypeError((*[1]GetConfiguredAccountsArg)(nil), args)
   162  						return
   163  					}
   164  					ret, err = i.GetConfiguredAccounts(ctx, typedArgs[0].SessionID)
   165  					return
   166  				},
   167  			},
   168  			"login": {
   169  				MakeArg: func() interface{} {
   170  					var ret [1]LoginArg
   171  					return &ret
   172  				},
   173  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   174  					typedArgs, ok := args.(*[1]LoginArg)
   175  					if !ok {
   176  						err = rpc.NewTypeError((*[1]LoginArg)(nil), args)
   177  						return
   178  					}
   179  					err = i.Login(ctx, typedArgs[0])
   180  					return
   181  				},
   182  			},
   183  			"loginProvisionedDevice": {
   184  				MakeArg: func() interface{} {
   185  					var ret [1]LoginProvisionedDeviceArg
   186  					return &ret
   187  				},
   188  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   189  					typedArgs, ok := args.(*[1]LoginProvisionedDeviceArg)
   190  					if !ok {
   191  						err = rpc.NewTypeError((*[1]LoginProvisionedDeviceArg)(nil), args)
   192  						return
   193  					}
   194  					err = i.LoginProvisionedDevice(ctx, typedArgs[0])
   195  					return
   196  				},
   197  			},
   198  			"loginWithPaperKey": {
   199  				MakeArg: func() interface{} {
   200  					var ret [1]LoginWithPaperKeyArg
   201  					return &ret
   202  				},
   203  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   204  					typedArgs, ok := args.(*[1]LoginWithPaperKeyArg)
   205  					if !ok {
   206  						err = rpc.NewTypeError((*[1]LoginWithPaperKeyArg)(nil), args)
   207  						return
   208  					}
   209  					err = i.LoginWithPaperKey(ctx, typedArgs[0])
   210  					return
   211  				},
   212  			},
   213  			"logout": {
   214  				MakeArg: func() interface{} {
   215  					var ret [1]LogoutArg
   216  					return &ret
   217  				},
   218  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   219  					typedArgs, ok := args.(*[1]LogoutArg)
   220  					if !ok {
   221  						err = rpc.NewTypeError((*[1]LogoutArg)(nil), args)
   222  						return
   223  					}
   224  					err = i.Logout(ctx, typedArgs[0])
   225  					return
   226  				},
   227  			},
   228  			"deprovision": {
   229  				MakeArg: func() interface{} {
   230  					var ret [1]DeprovisionArg
   231  					return &ret
   232  				},
   233  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   234  					typedArgs, ok := args.(*[1]DeprovisionArg)
   235  					if !ok {
   236  						err = rpc.NewTypeError((*[1]DeprovisionArg)(nil), args)
   237  						return
   238  					}
   239  					err = i.Deprovision(ctx, typedArgs[0])
   240  					return
   241  				},
   242  			},
   243  			"recoverAccountFromEmailAddress": {
   244  				MakeArg: func() interface{} {
   245  					var ret [1]RecoverAccountFromEmailAddressArg
   246  					return &ret
   247  				},
   248  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   249  					typedArgs, ok := args.(*[1]RecoverAccountFromEmailAddressArg)
   250  					if !ok {
   251  						err = rpc.NewTypeError((*[1]RecoverAccountFromEmailAddressArg)(nil), args)
   252  						return
   253  					}
   254  					err = i.RecoverAccountFromEmailAddress(ctx, typedArgs[0].Email)
   255  					return
   256  				},
   257  			},
   258  			"recoverPassphrase": {
   259  				MakeArg: func() interface{} {
   260  					var ret [1]RecoverPassphraseArg
   261  					return &ret
   262  				},
   263  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   264  					typedArgs, ok := args.(*[1]RecoverPassphraseArg)
   265  					if !ok {
   266  						err = rpc.NewTypeError((*[1]RecoverPassphraseArg)(nil), args)
   267  						return
   268  					}
   269  					err = i.RecoverPassphrase(ctx, typedArgs[0])
   270  					return
   271  				},
   272  			},
   273  			"paperKey": {
   274  				MakeArg: func() interface{} {
   275  					var ret [1]PaperKeyArg
   276  					return &ret
   277  				},
   278  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   279  					typedArgs, ok := args.(*[1]PaperKeyArg)
   280  					if !ok {
   281  						err = rpc.NewTypeError((*[1]PaperKeyArg)(nil), args)
   282  						return
   283  					}
   284  					err = i.PaperKey(ctx, typedArgs[0].SessionID)
   285  					return
   286  				},
   287  			},
   288  			"paperKeySubmit": {
   289  				MakeArg: func() interface{} {
   290  					var ret [1]PaperKeySubmitArg
   291  					return &ret
   292  				},
   293  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   294  					typedArgs, ok := args.(*[1]PaperKeySubmitArg)
   295  					if !ok {
   296  						err = rpc.NewTypeError((*[1]PaperKeySubmitArg)(nil), args)
   297  						return
   298  					}
   299  					err = i.PaperKeySubmit(ctx, typedArgs[0])
   300  					return
   301  				},
   302  			},
   303  			"unlock": {
   304  				MakeArg: func() interface{} {
   305  					var ret [1]UnlockArg
   306  					return &ret
   307  				},
   308  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   309  					typedArgs, ok := args.(*[1]UnlockArg)
   310  					if !ok {
   311  						err = rpc.NewTypeError((*[1]UnlockArg)(nil), args)
   312  						return
   313  					}
   314  					err = i.Unlock(ctx, typedArgs[0].SessionID)
   315  					return
   316  				},
   317  			},
   318  			"unlockWithPassphrase": {
   319  				MakeArg: func() interface{} {
   320  					var ret [1]UnlockWithPassphraseArg
   321  					return &ret
   322  				},
   323  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   324  					typedArgs, ok := args.(*[1]UnlockWithPassphraseArg)
   325  					if !ok {
   326  						err = rpc.NewTypeError((*[1]UnlockWithPassphraseArg)(nil), args)
   327  						return
   328  					}
   329  					err = i.UnlockWithPassphrase(ctx, typedArgs[0])
   330  					return
   331  				},
   332  			},
   333  			"accountDelete": {
   334  				MakeArg: func() interface{} {
   335  					var ret [1]AccountDeleteArg
   336  					return &ret
   337  				},
   338  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   339  					typedArgs, ok := args.(*[1]AccountDeleteArg)
   340  					if !ok {
   341  						err = rpc.NewTypeError((*[1]AccountDeleteArg)(nil), args)
   342  						return
   343  					}
   344  					err = i.AccountDelete(ctx, typedArgs[0])
   345  					return
   346  				},
   347  			},
   348  			"loginOneshot": {
   349  				MakeArg: func() interface{} {
   350  					var ret [1]LoginOneshotArg
   351  					return &ret
   352  				},
   353  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   354  					typedArgs, ok := args.(*[1]LoginOneshotArg)
   355  					if !ok {
   356  						err = rpc.NewTypeError((*[1]LoginOneshotArg)(nil), args)
   357  						return
   358  					}
   359  					err = i.LoginOneshot(ctx, typedArgs[0])
   360  					return
   361  				},
   362  			},
   363  			"isOnline": {
   364  				MakeArg: func() interface{} {
   365  					var ret [1]IsOnlineArg
   366  					return &ret
   367  				},
   368  				Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) {
   369  					ret, err = i.IsOnline(ctx)
   370  					return
   371  				},
   372  			},
   373  		},
   374  	}
   375  }
   376  
   377  type LoginClient struct {
   378  	Cli rpc.GenericClient
   379  }
   380  
   381  // Returns an array of information about accounts configured on the local
   382  // machine. Currently configured accounts are defined as those that have stored
   383  // secrets, but this definition may be expanded in the future.
   384  func (c LoginClient) GetConfiguredAccounts(ctx context.Context, sessionID int) (res []ConfiguredAccount, err error) {
   385  	__arg := GetConfiguredAccountsArg{SessionID: sessionID}
   386  	err = c.Cli.Call(ctx, "keybase.1.login.getConfiguredAccounts", []interface{}{__arg}, &res, 0*time.Millisecond)
   387  	return
   388  }
   389  
   390  // Performs login.  deviceType should be keybase1.DeviceTypeV2_DESKTOP
   391  // or keybase1.DeviceTypeV2_MOBILE. username is optional. If the current
   392  // device isn't provisioned, this function will provision it.
   393  func (c LoginClient) Login(ctx context.Context, __arg LoginArg) (err error) {
   394  	err = c.Cli.Call(ctx, "keybase.1.login.login", []interface{}{__arg}, nil, 0*time.Millisecond)
   395  	return
   396  }
   397  
   398  // Login a user only if the user is on a provisioned device. Username is optional.
   399  // If noPassphrasePrompt is set, then only a stored secret will be used to unlock
   400  // the device keys.
   401  func (c LoginClient) LoginProvisionedDevice(ctx context.Context, __arg LoginProvisionedDeviceArg) (err error) {
   402  	err = c.Cli.Call(ctx, "keybase.1.login.loginProvisionedDevice", []interface{}{__arg}, nil, 0*time.Millisecond)
   403  	return
   404  }
   405  
   406  // Login and unlock by
   407  // - trying unlocked device keys if available
   408  // - prompting for a paper key and using that
   409  func (c LoginClient) LoginWithPaperKey(ctx context.Context, __arg LoginWithPaperKeyArg) (err error) {
   410  	err = c.Cli.Call(ctx, "keybase.1.login.loginWithPaperKey", []interface{}{__arg}, nil, 0*time.Millisecond)
   411  	return
   412  }
   413  
   414  func (c LoginClient) Logout(ctx context.Context, __arg LogoutArg) (err error) {
   415  	err = c.Cli.Call(ctx, "keybase.1.login.logout", []interface{}{__arg}, nil, 0*time.Millisecond)
   416  	return
   417  }
   418  
   419  func (c LoginClient) Deprovision(ctx context.Context, __arg DeprovisionArg) (err error) {
   420  	err = c.Cli.Call(ctx, "keybase.1.login.deprovision", []interface{}{__arg}, nil, 0*time.Millisecond)
   421  	return
   422  }
   423  
   424  func (c LoginClient) RecoverAccountFromEmailAddress(ctx context.Context, email string) (err error) {
   425  	__arg := RecoverAccountFromEmailAddressArg{Email: email}
   426  	err = c.Cli.Call(ctx, "keybase.1.login.recoverAccountFromEmailAddress", []interface{}{__arg}, nil, 0*time.Millisecond)
   427  	return
   428  }
   429  
   430  // Guide the user through possibilities of changing their passphrase.
   431  // Lets them change their passphrase using a paper key or enter the reset pipeline.
   432  func (c LoginClient) RecoverPassphrase(ctx context.Context, __arg RecoverPassphraseArg) (err error) {
   433  	err = c.Cli.Call(ctx, "keybase.1.login.recoverPassphrase", []interface{}{__arg}, nil, 0*time.Millisecond)
   434  	return
   435  }
   436  
   437  // PaperKey generates paper backup keys for restoring an account.
   438  // It calls login_ui.displayPaperKeyPhrase with the phrase.
   439  func (c LoginClient) PaperKey(ctx context.Context, sessionID int) (err error) {
   440  	__arg := PaperKeyArg{SessionID: sessionID}
   441  	err = c.Cli.Call(ctx, "keybase.1.login.paperKey", []interface{}{__arg}, nil, 0*time.Millisecond)
   442  	return
   443  }
   444  
   445  // paperKeySubmit checks that paperPhrase is a valid paper key
   446  // for the logged in user, caches the keys, and sends a notification.
   447  func (c LoginClient) PaperKeySubmit(ctx context.Context, __arg PaperKeySubmitArg) (err error) {
   448  	err = c.Cli.Call(ctx, "keybase.1.login.paperKeySubmit", []interface{}{__arg}, nil, 0*time.Millisecond)
   449  	return
   450  }
   451  
   452  // Unlock restores access to local key store by priming passphrase stream cache.
   453  func (c LoginClient) Unlock(ctx context.Context, sessionID int) (err error) {
   454  	__arg := UnlockArg{SessionID: sessionID}
   455  	err = c.Cli.Call(ctx, "keybase.1.login.unlock", []interface{}{__arg}, nil, 0*time.Millisecond)
   456  	return
   457  }
   458  
   459  func (c LoginClient) UnlockWithPassphrase(ctx context.Context, __arg UnlockWithPassphraseArg) (err error) {
   460  	err = c.Cli.Call(ctx, "keybase.1.login.unlockWithPassphrase", []interface{}{__arg}, nil, 0*time.Millisecond)
   461  	return
   462  }
   463  
   464  // accountDelete deletes the current user's account.
   465  func (c LoginClient) AccountDelete(ctx context.Context, __arg AccountDeleteArg) (err error) {
   466  	err = c.Cli.Call(ctx, "keybase.1.login.accountDelete", []interface{}{__arg}, nil, 0*time.Millisecond)
   467  	return
   468  }
   469  
   470  // loginOneshot allows a service to have a "onetime login", without
   471  // provisioning a device. It bootstraps credentials with the given
   472  // paperkey
   473  func (c LoginClient) LoginOneshot(ctx context.Context, __arg LoginOneshotArg) (err error) {
   474  	err = c.Cli.Call(ctx, "keybase.1.login.loginOneshot", []interface{}{__arg}, nil, 0*time.Millisecond)
   475  	return
   476  }
   477  
   478  // isOnline returns whether the device is able to open a connection to keybase.io.
   479  // Used for determining whether to offer proxy settings on the login screen.
   480  func (c LoginClient) IsOnline(ctx context.Context) (res bool, err error) {
   481  	err = c.Cli.Call(ctx, "keybase.1.login.isOnline", []interface{}{IsOnlineArg{}}, &res, 0*time.Millisecond)
   482  	return
   483  }