2016-12-15 03:36:07 -08:00
|
|
|
from trezor import ui
|
2017-12-08 08:26:51 -08:00
|
|
|
from trezor import config
|
2017-12-15 12:06:29 -08:00
|
|
|
from trezor.pin import pin_to_int, show_pin_timeout
|
2016-12-15 03:36:07 -08:00
|
|
|
|
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
async def request_pin(ctx):
|
|
|
|
from trezor.messages.ButtonRequest import ButtonRequest
|
|
|
|
from trezor.messages.wire_types import ButtonAck
|
|
|
|
from apps.common.request_pin import request_pin
|
2016-12-15 03:36:07 -08:00
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
await ctx.call(ButtonRequest(), ButtonAck)
|
2016-12-15 03:36:07 -08:00
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
return await request_pin()
|
2016-12-15 03:36:07 -08:00
|
|
|
|
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
async def request_pin_confirm(ctx):
|
|
|
|
while True:
|
|
|
|
pin1 = await request_pin(ctx)
|
|
|
|
pin2 = await request_pin(ctx)
|
|
|
|
if pin1 == pin2:
|
|
|
|
return pin1
|
|
|
|
# TODO: display a message and wait
|
|
|
|
|
|
|
|
|
|
|
|
def confirm_change_pin(ctx, msg):
|
2016-12-15 03:36:07 -08:00
|
|
|
from apps.common.confirm import require_confirm
|
|
|
|
from trezor.ui.text import Text
|
2017-12-08 08:26:51 -08:00
|
|
|
|
|
|
|
has_pin = config.has_pin()
|
|
|
|
|
|
|
|
if msg.remove and has_pin: # removing pin
|
|
|
|
return require_confirm(ctx, Text(
|
|
|
|
'Remove PIN', ui.ICON_RESET,
|
|
|
|
'Do you really want to', ui.BOLD,
|
|
|
|
'remove current PIN?'))
|
|
|
|
|
|
|
|
if not msg.remove and has_pin: # changing pin
|
|
|
|
return require_confirm(ctx, Text(
|
|
|
|
'Change PIN', ui.ICON_RESET,
|
|
|
|
'Do you really want to', ui.BOLD,
|
|
|
|
'change current PIN?'))
|
|
|
|
|
|
|
|
if not msg.remove and not has_pin: # setting new pin
|
|
|
|
return require_confirm(ctx, Text(
|
|
|
|
'Change PIN', ui.ICON_RESET,
|
|
|
|
'Do you really want to', ui.BOLD,
|
|
|
|
'set new PIN?'))
|
2016-12-15 03:36:07 -08:00
|
|
|
|
|
|
|
|
2017-08-15 06:09:09 -07:00
|
|
|
async def layout_change_pin(ctx, msg):
|
2016-12-15 03:36:07 -08:00
|
|
|
from trezor.messages.Success import Success
|
2017-12-15 01:27:36 -08:00
|
|
|
from trezor.messages.Failure import Failure
|
|
|
|
from trezor.messages.FailureType import PinInvalid
|
2016-12-15 03:36:07 -08:00
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
await confirm_change_pin(ctx, msg)
|
2016-12-15 03:36:07 -08:00
|
|
|
|
2017-12-08 08:26:51 -08:00
|
|
|
if config.has_pin():
|
|
|
|
curr_pin = await request_pin(ctx)
|
2016-12-15 03:36:07 -08:00
|
|
|
else:
|
2017-12-08 08:26:51 -08:00
|
|
|
curr_pin = ''
|
|
|
|
if msg.remove:
|
|
|
|
new_pin = ''
|
|
|
|
else:
|
|
|
|
new_pin = await request_pin_confirm(ctx)
|
|
|
|
|
2017-12-15 01:27:36 -08:00
|
|
|
if config.change_pin(pin_to_int(curr_pin), pin_to_int(new_pin), show_pin_timeout):
|
|
|
|
if new_pin:
|
|
|
|
return Success(message='PIN changed')
|
|
|
|
else:
|
|
|
|
return Success(message='PIN removed')
|
2016-12-19 02:32:39 -08:00
|
|
|
else:
|
2017-12-15 01:27:36 -08:00
|
|
|
return Failure(code=PinInvalid, message='PIN invalid')
|