// deviceName gets a new device name from the user. func (e *loginProvision) deviceName(ctx *Context) (string, error) { names, err := e.arg.User.DeviceNames() if err != nil { e.G().Log.Debug("error getting device names: %s", err) e.G().Log.Debug("proceeding to ask user for a device name despite error...") } arg := keybase1.PromptNewDeviceNameArg{ ExistingDevices: names, } for i := 0; i < 10; i++ { devname, err := ctx.ProvisionUI.PromptNewDeviceName(ctx.GetNetContext(), arg) if err != nil { return "", err } if !libkb.CheckDeviceName.F(devname) { arg.ErrorMessage = "Invalid device name. Device names should be " + libkb.CheckDeviceName.Hint continue } duplicate := false for _, name := range names { if devname == name { duplicate = true break } } if duplicate { arg.ErrorMessage = fmt.Sprintf("Device name %q already used", devname) continue } return devname, nil } return "", libkb.RetryExhaustedError{} }
func (u *RemoteProvisionUI) PromptNewDeviceName(ctx context.Context, arg keybase1.PromptNewDeviceNameArg) (string, error) { arg.SessionID = u.sessionID return u.cli.PromptNewDeviceName(ctx, arg) }