减少密码哈希迭代次数防止把手机卡烂

原来的登录和注册界面改为密码登录和邮箱登录
邮箱登录界面不再分状态,设置密码独立出一个界面
自动登录不再检测本地用过密码登录,第一次邮箱登录不设置密码但存了token也可以
整理代码
This commit is contained in:
MrZ_26
2022-10-23 04:36:19 +08:00
parent f9bbb8fce6
commit d12f8a27e7
23 changed files with 313 additions and 220 deletions

View File

@@ -17,6 +17,8 @@ local history,hisPtr={"?"}
local sumode=false
local the_secret=(0xe^2*10)..(2*0xb)
local scene={}
local commands={} do
--[[
format of elements in table 'commands':
@@ -708,7 +710,7 @@ local commands={} do
outputBox.h=500
local button=WIDGET.newButton{name='bye',x=640,y=615,w=426,h=100,code=function()
TASK.new(function()
WIDGET.active.bye.hide=true
scene.widgetList.bye.hide=true
for _=1,30 do coroutine.yield() end
log{C.R,"Deleting all data in 10..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
log{C.R,"Deleting all data in 9..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
@@ -726,7 +728,7 @@ local commands={} do
end)
end}
button:setObject("Techmino is fun. Bye.")
ins(WIDGET.active,button)
ins(scene.widgetList,button)
else
log"Are you sure you want to reset everything?"
log"This will delete EVERYTHING in your saved game data, including but not limited to:"
@@ -1012,8 +1014,6 @@ userG.the_key=first_key
local scene={}
function scene.sceneInit()
WIDGET.focus(inputBox)
BG.set('none')

View File

@@ -72,7 +72,7 @@ function scene.keyDown(key)
local l={1,2,3,4,5,6,7}
repeat scene.keyDown(rem(l,math.random(#l))) until not l[1]
elseif key=='tab' then
WIDGET.active.sequence:scroll(kb.isDown('lshift','rshift') and -1 or 1)
scene.widgetList.sequence:scroll(kb.isDown('lshift','rshift') and -1 or 1)
elseif key=='c' and kb.isDown('lctrl','rctrl') or key=='cC' then
if #BAG>0 then
sys.setClipboardText("Techmino SEQ:"..DATA.copySequence())

View File

@@ -18,24 +18,24 @@ local repRateStrings={[0]="pause",[.125]="0.125x",[.5]="0.5x",[1]="1x",[2]="2x",
local scene={}
local function _updateMenuButtons()
WIDGET.active.restart.hide=replaying
scene.widgetList.restart.hide=replaying
local pos=(GAME.tasUsed or replaying) and 'right' or SETTING.menuPos
modeTextWidK=math.min(280/TEXTOBJ.modeName:getWidth(),1)
if GAME.replaying then
WIDGET.active.pause.x=1195
scene.widgetList.pause.x=1195
modeTextPos=1185-TEXTOBJ.modeName:getWidth()*modeTextWidK
elseif pos=='right' then
WIDGET.active.restart.x=1125
WIDGET.active.pause.x=1195
scene.widgetList.restart.x=1125
scene.widgetList.pause.x=1195
modeTextPos=1115-TEXTOBJ.modeName:getWidth()*modeTextWidK
elseif pos=='middle' then
WIDGET.active.restart.x=360
WIDGET.active.pause.x=860
scene.widgetList.restart.x=360
scene.widgetList.pause.x=860
modeTextPos=940
elseif pos=='left' then
WIDGET.active.restart.x=120
WIDGET.active.pause.x=190
scene.widgetList.restart.x=120
scene.widgetList.pause.x=190
modeTextPos=1200-TEXTOBJ.modeName:getWidth()*modeTextWidK
end
end

View File

@@ -2,7 +2,7 @@ local scene={}
function scene.sceneInit()
BG.set('cubes')
WIDGET.active.texts:setTexts(require"parts.updateLog":split("\n"))
scene.widgetList.texts:setTexts(require"parts.updateLog":split("\n"))
end
function scene.wheelMoved(_,y)
@@ -10,13 +10,13 @@ function scene.wheelMoved(_,y)
end
function scene.keyDown(key)
if key=='up' then
WIDGET.active.texts:scroll(-5)
scene.widgetList.texts:scroll(-5)
elseif key=='down' then
WIDGET.active.texts:scroll(5)
scene.widgetList.texts:scroll(5)
elseif key=='pageup' then
WIDGET.active.texts:scroll(-20)
scene.widgetList.texts:scroll(-20)
elseif key=='pagedown' then
WIDGET.active.texts:scroll(20)
scene.widgetList.texts:scroll(20)
elseif key=='escape' then
SCN.back()
end

View File

@@ -3,9 +3,9 @@ function scene.sceneInit()
BG.set('cubes')
local fileData=love.filesystem.read("legals.md")
if fileData then
WIDGET.active.texts:setTexts(fileData:split('\n'))
scene.widgetList.texts:setTexts(fileData:split('\n'))
else
WIDGET.active.texts:setTexts{"[legals.md not found]"}
scene.widgetList.texts:setTexts{"[legals.md not found]"}
end
end
@@ -14,13 +14,13 @@ function scene.wheelMoved(_,y)
end
function scene.keyDown(key)
if key=='up' then
WIDGET.active.texts:scroll(-5)
scene.widgetList.texts:scroll(-5)
elseif key=='down' then
WIDGET.active.texts:scroll(5)
scene.widgetList.texts:scroll(5)
elseif key=='pageup' then
WIDGET.active.texts:scroll(-20)
scene.widgetList.texts:scroll(-20)
elseif key=='pagedown' then
WIDGET.active.texts:scroll(20)
scene.widgetList.texts:scroll(20)
elseif key=='escape' then
SCN.back()
end

View File

@@ -0,0 +1,54 @@
local scene={}
local function _getCode()
local email=scene.widgetList.email:getText()
if not STRING.simpEmailCheck(email) then
MES.new('error',text.wrongEmail)
else
USER.email=email
NET.getCode(email)
end
end
local function _codeLogin()
local code=scene.widgetList.code:getText():upper()
if #code~=8 then
MES.new('error',text.wrongCode)
else
NET.codeLogin(USER.email,code)
end
end
function scene.sceneInit()
scene.widgetList.email:setText(USER.email or "")
scene.widgetList.code:clear()
end
function scene.keyDown(key,rep)
if key=='escape' and not rep then
SCN.back()
elseif key=='return' then
if #scene.widgetList.code:getText():upper()==0 then
_getCode()
else
_codeLogin()
end
else
return true
end
end
scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newButton{name='login_pw', x=1080,y=100,w=260,h=80,color='lY',code=function() SCN.swapTo('login_pw','swipeR') end},
WIDGET.newInputBox{name='email', x=380, y=200,w=626,h=60,limit=128},
WIDGET.newKey{name='send', x=640, y=330,w=300,h=80,font=40,code=_getCode},
WIDGET.newInputBox{name='code', x=380, y=400,w=626 ,h=60,limit=8},
WIDGET.newKey{name='verify', x=640, y=530,w=300,h=80,font=40,code=_codeLogin},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
}
return scene

View File

@@ -28,13 +28,13 @@ function scene.keyDown(key,rep)
end
scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newButton{name='register', x=1140,y=100,w=170,h=80,color='lY',code=function() SCN.swapTo('register','swipeR') end},
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newButton{name='login_mail',x=1080,y=100,w=260,h=80,color='lY',code=function() SCN.swapTo('login_mail','swipeL') end},
emailBox,
passwordBox,
WIDGET.newSwitch{name='showEmail',x=550, y=420,disp=function() return showEmail end,code=function() showEmail=not showEmail emailBox.secret=not showEmail end},
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=pressKey'return'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
WIDGET.newSwitch{name='showEmail', x=550, y=420,disp=function() return showEmail end,code=function() showEmail=not showEmail emailBox.secret=not showEmail end},
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=pressKey'return'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -4,9 +4,9 @@ function scene.sceneInit()
BG.set('cubes')
local fileData=FILE.load('parts/language/manual_'..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or 'en')..'.txt','-string')
if fileData then
WIDGET.active.texts:setTexts(fileData:split('\n'))
scene.widgetList.texts:setTexts(fileData:split('\n'))
else
WIDGET.active.texts:setTexts{"[manual file not found]"}
scene.widgetList.texts:setTexts{"[manual file not found]"}
end
end
@@ -16,13 +16,13 @@ function scene.wheelMoved(_,y)
end
function scene.keyDown(key)
if key=='up' then
WIDGET.active.texts:scroll(-5)
scene.widgetList.texts:scroll(-5)
elseif key=='down' then
WIDGET.active.texts:scroll(5)
scene.widgetList.texts:scroll(5)
elseif key=='pageup' then
WIDGET.active.texts:scroll(-20)
scene.widgetList.texts:scroll(-20)
elseif key=='pagedown' then
WIDGET.active.texts:scroll(20)
scene.widgetList.texts:scroll(20)
elseif key=='escape' then
SCN.back()
end

View File

@@ -17,6 +17,9 @@ scene.widgetList={
WIDGET.newButton{name='league',x=640, y=180,w=350,h=120,font=40,color='D',code=goScene'net_league'},
WIDGET.newButton{name='ffa', x=640, y=360,w=350,h=120,font=40,color='D',code=function() MES.new('warn',text.notFinished)--[[NET.enterRoom({name='ffa'})]] end},
WIDGET.newButton{name='rooms', x=640, y=540,w=350,h=120,font=40,code=goScene'net_rooms'},
WIDGET.newButton{name='resetPW',x=680, y=40,w=180,h=60,color='dG',code=function()
SCN.go('reset_password','none')
end},
WIDGET.newButton{name='logout',x=880, y=40,w=180, h=60,color='dR',
code=function()
if tryBack() then

View File

@@ -1,98 +0,0 @@
local scene={}
local state
local code
local function _getCode()
local email=WIDGET.active.email:getText()
if not STRING.simpEmailCheck(email) then
MES.new('error',text.wrongEmail)
else
NET.getCode(email)
end
end
local function _codeLogin()
code=WIDGET.active.code:getText():upper()
if #code~=8 then
MES.new('error',text.wrongCode)
else
NET.codeLogin(code)
end
end
local function _setPW()
local password= WIDGET.active.password:getText()
local password2=WIDGET.active.password2:getText()
if #password==0 or #password2==0 then
MES.new('error',text.noPassword)
elseif password~=password2 then
MES.new('error',text.diffPassword)
else
NET.setPW(code,password)
end
end
function scene.sceneInit()
state=SCN.args[1] or 1
scene.fileDropped(state)
end
function scene.keyDown(key,rep)
if key=='escape' and not rep then
if state==2 then
scene.fileDropped(state-1)
else
SCN.back()
end
elseif key=='return' then
if state==1 then
_getCode()
elseif state==2 then
_codeLogin()
elseif state==3 then
_setPW()
end
else
return true
end
end
function scene.fileDropped(arg)-- Not designed for this, but it works and no side effects
if type(arg)~='number' then return end
state=arg
scene.widgetList.email. hide=arg~=1
scene.widgetList.send. hide=arg~=1
scene.widgetList.code. hide=arg~=2
scene.widgetList.verify. hide=arg~=2
scene.widgetList.password. hide=arg~=3
scene.widgetList.password2. hide=arg~=3
scene.widgetList.setPW. hide=arg~=3
if arg==1 then
scene.widgetList.email:setText(USER.email or "")
elseif arg==2 then
scene.widgetList.code:clear()
elseif arg==3 then
scene.widgetList.password:clear()
scene.widgetList.password2:clear()
end
end
scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newButton{name='login', x=1140,y=100,w=170,h=80,color='lY',code=function() SCN.swapTo('login','swipeL') end},
WIDGET.newInputBox{name='email', x=380, y=300,w=626,h=60,limit=128},
WIDGET.newKey{name='send', x=640, y=430,w=250,h=80,font=40,code=_getCode},
WIDGET.newInputBox{name='code', x=380, y=300,w=626,h=60,limit=8},
WIDGET.newKey{name='verify', x=640, y=430,w=300,h=80,font=40,code=_codeLogin},
WIDGET.newInputBox{name='password', x=380, y=250,w=626,h=60,secret=true,regex="[ -~]",limit=64},
WIDGET.newInputBox{name='password2',x=380, y=350,w=626,h=60,secret=true,regex="[ -~]",limit=64},
WIDGET.newKey{name='setPW', x=640, y=480,w=350,h=80,font=40,code=_setPW},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
}
return scene

View File

@@ -0,0 +1,44 @@
local scene={}
local function _setPW()
local code=scene.widgetList.code:getText():upper()
local password= scene.widgetList.password:getText()
local password2=scene.widgetList.password2:getText()
if #code~=8 then
MES.new('error',text.wrongCode)
elseif #password==0 or #password2==0 then
MES.new('error',text.noPassword)
elseif password~=password2 then
MES.new('error',text.diffPassword)
else
NET.setPW(code,password)
end
end
function scene.keyDown(key,rep)
if key=='escape' and not rep then
SCN.back()
elseif key=='return' then
if #scene.widgetList.code:getText()==0 then
_setPW()
else
NET.getCode(USER.email)
end
else
return true
end
end
scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newKey{name='send', x=640, y=300,w=300,h=80,font=40,code=function() NET.getCode(USER.email) end},
WIDGET.newInputBox{name='code', x=380, y=170,w=626,h=60,limit=8},
WIDGET.newInputBox{name='password', x=380, y=370,w=626,h=60,secret=true,regex="[ -~]",limit=64},
WIDGET.newInputBox{name='password2',x=380, y=470,w=626,h=60,secret=true,regex="[ -~]",limit=64},
WIDGET.newKey{name='setPW', x=640, y=600,w=350,h=80,font=40,code=_setPW},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
}
return scene

View File

@@ -12,8 +12,8 @@ function scene.sceneInit()
last1,last2=0,0
sfxPack=SETTING.sfxPack
vocPack=SETTING.vocPack
WIDGET.active.sfxPack:reset()
WIDGET.active.vocPack:reset()
scene.widgetList.sfxPack:reset()
scene.widgetList.vocPack:reset()
BG.set()
end
function scene.sceneBack()