diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8f2dd411..f9425d2b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -193,7 +193,7 @@ jobs: dir: ./libAndroid - name: Build Android packages id: build-packages - uses: love-actions/love-actions-android@v1 + uses: love-actions/love-actions-android@main with: app-name: ${{ needs.get-info.outputs.app-name }} bundle-id: ${{ steps.process-app-name.outputs.bundle-id }} @@ -205,6 +205,7 @@ jobs: love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} resource-path: ./.github/build/android/${{ env.BUILD_TYPE }}/res extra-assets: ./libAndroid/ + custom-scheme: studio26f://oauth product-name: ${{ steps.process-app-name.outputs.product-name }} version-string: ${{ needs.get-info.outputs.version-string }} version-code: ${{ needs.get-info.outputs.version-code }} @@ -681,6 +682,19 @@ jobs: with: platform: Windows dir: ./ColdClear + - name: Update Windows template + shell: python3 {0} + run: | + version_string = "${{ needs.get-info.outputs.version-string }}" + file_version = (f"{version_string.replace('.', ',')},0") + with open("./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc", "r+", encoding="utf8") as file: + data = file.read() + data = data\ + .replace("@Version", version_string)\ + .replace("@FileVersion", file_version) + file.seek(0) + file.truncate() + file.write(data) - name: Build Windows packages id: build-packages uses: love-actions/love-actions-windows@v1 @@ -691,7 +705,9 @@ jobs: extra-assets-x86: ./ColdClear/x86/CCloader.dll ./ColdClear/x86/cold_clear.dll extra-assets-x64: ./ColdClear/x64/CCloader.dll ./ColdClear/x64/cold_clear.dll product-name: ${{ steps.process-app-name.outputs.product-name }} - version-string: ${{ needs.get-info.outputs.version-string }} + app-id: ${{ secrets.WINDOWS_APP_ID }} + project-website: https://www.studio26f.org/ + installer-languages: ChineseSimplified.isl English.isl Japanese.isl French.isl output-folder: ${{ env.OUTPUT_FOLDER }} - name: Upload 32-bit artifact uses: actions/upload-artifact@v3 @@ -703,6 +719,11 @@ jobs: with: name: ${{ needs.get-info.outputs.base-name }}_Windows_x64 path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip + - name: Upload installer artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Windows_installer + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe - name: Prepare for release if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} shell: bash @@ -710,6 +731,7 @@ jobs: mkdir -p ${{ env.RELEASE_FOLDER }} cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe - name: Upload release if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} uses: ncipollo/release-action@v1 @@ -718,6 +740,7 @@ jobs: artifacts: | ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe body: ${{ needs.get-info.outputs.update-note }} name: ${{ needs.get-info.outputs.update-title }} prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} diff --git a/parts/gameTables.lua b/parts/gameTables.lua index 3035cc6f..f8000a95 100644 --- a/parts/gameTables.lua +++ b/parts/gameTables.lua @@ -587,10 +587,8 @@ do-- Userdata tables USER=setmetatable({-- User infomation __data={ uid=false, - email=false, - password=false, - rToken=false, aToken=false, + oToken=false, }, },{ __index=function(self,k) diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index c9a94c9e..6a3b8c9b 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -744,21 +744,11 @@ return { music="BGMs", label="label", }, - login_pw={ + login={ title="Sign In", - login_mail="Login with E-mail/Sign Up", - email="Email Address", - password="Password", - showEmail="Show Email", - login="Log In", - }, - login_mail={ - title="Sign In/Sign Up", - login_pw="Password Sign In", - email="Email Address", - send="Send code", - code="Verification Code", - verify="Verify", + ticket="Auth Ticket", + authorize="Open Authorizing Page", + submit="Submit", }, reset_password={ title="Reset Password", diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index cb6bde37..6388b179 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -736,21 +736,11 @@ return { music="BGMs", label="Etiq.", }, - login_pw={ - title="Entrar", - login_mail="Registrarse/Pedir código", - email="Correo Elec.", - password="Contraseña", - showEmail="Mostrar Correo", - login="Entrar", - }, - login_mail={ - title="Entrar/Registrarse", - login_pw="Ingr. con Contraseña", - email="Correo Elec.", - send="Enviar código", - code="Código de Verif.", - verify="Verificar", + login={ + -- title="Sign In", + -- ticket="Auth Ticket", + -- authorize="Open Authorizing Page", + -- submit="Submit", }, reset_password={ title="Restablecer Contraseña", diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 43607328..4d739dfd 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -699,21 +699,11 @@ return { music="Musique", -- label="label", }, - login_pw={ - title="Connexion", - -- login_mail="Login with E-mail/Sign Up", - email="E-mail", - password="Mot de passe", - -- showEmail="Show Email", - login="Connexion", - }, - login_mail={ - title="Connexion/Enregistrement", - -- login_pw="Password Sign In", - email="E-mail", - -- send="Send code", - -- code="Verification Code", - -- verify="Verify", + login={ + -- title="Sign In", + -- ticket="Auth Ticket", + -- authorize="Open Authorizing Page", + -- submit="Submit", }, reset_password={ -- title="Reset Password", diff --git a/parts/language/lang_id.lua b/parts/language/lang_id.lua index c9905217..ffbc65e8 100644 --- a/parts/language/lang_id.lua +++ b/parts/language/lang_id.lua @@ -745,21 +745,11 @@ return { music="Musik", label="label", }, - login_pw={ - title="Masuk", - -- login_mail="Login with E-mail/Sign Up", - email="Alamat Email", - password="Password", - showEmail="Tunjukkan Email", - login="Masuk", - }, - login_mail={ - title="Masuk/Daftar", - -- login_pw="Password Sign In", - email="Alamat Email", - -- send="Send code", - -- code="Verification Code", - -- verify="Verify", + login={ + -- title="Sign In", + -- ticket="Auth Ticket", + -- authorize="Open Authorizing Page", + -- submit="Submit", }, reset_password={ -- title="Reset Password", diff --git a/parts/language/lang_ja.lua b/parts/language/lang_ja.lua index 3c02a1a8..7df17c28 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -746,21 +746,11 @@ return { music="曲", label="ラベル", }, - login_pw={ - title="ログイン", - login_mail="アカウントを登録/パスワードを忘れた", - email="Eメールアドレス", - password="パスワード", - showEmail="Eメールアドレスを表示", - login="ログイン", - }, - login_mail={ - title="サインイン/サインアップ", - login_pw="パスワードでログイン", - email="Eメールアドレス", - send="認証コード送信", - code="認証コード", - verify="認証", + logi={ + -- title="Sign In", + -- ticket="Auth Ticket", + -- authorize="Open Authorizing Page", + -- submit="Submit", }, reset_password={ title="パスワード再設定", diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index 2fa06381..9cb5e457 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -734,21 +734,11 @@ return { -- music="BGMs", -- label="label", }, - login_pw={ - title="Log in", - -- login_mail="Login with E-mail/Sign Up", - email="Endereço De Email", - password="Senha", - -- showEmail="Show Email", - login="Log in", - }, - login_mail={ - title="Log in/Registrar", - -- login_pw="Password Sign In", - email="Endereço De Email", - -- send="Send code", - -- code="Verification Code", - -- verify="Verify", + login={ + -- title="Sign In", + -- ticket="Auth Ticket", + -- authorize="Open Authorizing Page", + -- submit="Submit", }, reset_password={ -- title="Reset Password", diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index 569b2e6d..4597fae6 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -485,21 +485,11 @@ return { music="~~~", label="...", }, - login_pw={ - title="Log in", - -- login_mail="Login with E-mail/Sign Up", - email="@", - password="*", - showEmail="?", - login="→", - }, - login_mail={ - title="Log in/Sign up", - login_pw="*** →", - email="@", - send="→", - code="←", - verify="!", + login={ + title="Sign In", + ticket="***", + authorize="**?", + submit="", }, reset_password={ title="R ***", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index a28b7623..b734e35b 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -744,21 +744,11 @@ return { path="打开存储目录", save="用户档案管理", }, - login_pw={ + login={ title="登录", - login_mail="邮箱登录/注册", - email="邮箱", - password="密码", - showEmail="显示邮箱", - login="登录", - }, - login_mail={ - title="登录/注册", - login_pw="密码登录", - email="邮箱", - send="发送验证码", - code="验证码", - verify="验证邮箱", + ticket="登录口令", + authorize="去官网获取口令", + submit="登录", }, reset_password={ title="重置密码", diff --git a/parts/language/lang_zh_code.lua b/parts/language/lang_zh_code.lua index 170be893..83249a5c 100644 --- a/parts/language/lang_zh_code.lua +++ b/parts/language/lang_zh_code.lua @@ -693,21 +693,11 @@ return { path="OpenPath();", save="DataManagement();", }, - login_pw={ - title="LogIn.UI", - login_mail="Login_mail_sign_up()", - email="Email=", - password="Password=", - showEmail="ShowEmail", - login="Login();", - }, - login_mail={ - title="LogIn_Register.UI", - login_pw="Login_pw();", - email="Email=", - send="Send();", - code="V-code=", - verify="Verify();", + login={ + title="SignIn.UI", + ticket="Ticket=", + authorize="Authorize()", + submit="Submit()", }, reset_password={ title="Reset_Password.UI", diff --git a/parts/language/lang_zh_trad.lua b/parts/language/lang_zh_trad.lua index 76c0b8af..c567c01e 100644 --- a/parts/language/lang_zh_trad.lua +++ b/parts/language/lang_zh_trad.lua @@ -744,21 +744,11 @@ return { path="打開存儲目錄", save="用戶資料管理", }, - login_pw={ + login={ title="登錄", - login_mail="電郵登錄/注册", - email="電郵", - password="密碼", - showEmail="顯示郵箱", - login="登錄", - }, - login_mail={ - title="登錄/註冊", - login_pw="密碼登錄", - email="電郵", - send="發送驗證碼", - code="驗證碼", - verify="驗證郵箱", + ticket="登錄口令", + authorize="去官網獲取口令", + submit="登錄", }, reset_password={ title="重設密碼", diff --git a/parts/net.lua b/parts/net.lua index da989a5f..a2c17f5e 100644 --- a/parts/net.lua +++ b/parts/net.lua @@ -119,257 +119,43 @@ local function getMsg(request,timeout) end end end -function NET.getCode(email) - if not TASK.lock('getCode') then return end + +function NET.login(auto) + if not TASK.lock('login') then return end TASK.new(function() WAIT{ quit=function() - TASK.unlock('getCode') - HTTP.deletePool('getCode') - end, - timeout=12.6, - } - - local res=getMsg({ - pool='getCode', - path='/techmino/api/v1/auth/verify/email', - body={email=email}, - },12.6) - - if res and res.code==200 then - MES.new('info',text.checkEmail,5) - end - - WAIT.interrupt() - end) -end -function NET.codeLogin(email,code) - if not TASK.lock('codeLogin') then return end - TASK.new(function() - WAIT{ - quit=function() - TASK.unlock('codeLogin') - HTTP.deletePool('codeLogin') - end, - timeout=6.26, - } - - local res=getMsg({ - pool='codeLogin', - path='/techmino/api/v1/auth/login/email', - body={ - email=email, - code=code, - }, - },6.26) - - if res then - if res.code==200 then - USER.rToken=res.data.refreshToken - USER.aToken=res.data.accessToken - saveUser() - NET.ws_connect() - SCN.swapTo('net_menu') - elseif res.code==201 then - USER.rToken=res.data.refreshToken - USER.aToken=res.data.accessToken - saveUser() - SCN.pop()SCN.push('net_menu') - SCN.go('reset_password',nil,code) - end - end - - WAIT.interrupt() - end) -end -function NET.setPW(code,pw) - if not TASK.lock('setPW') then return end - TASK.new(function() - WAIT{ - quit=function() - TASK.unlock('setPW') - HTTP.deletePool('setPW') - end, - timeout=6.26, - } - - local salt do - local res=getMsg({ - pool='pwLogin', - path='/techmino/api/v1/auth/seed/email', - body={ - email=USER.email, - }, - },6.26) - - if res and res.code==200 then - salt=res.data - else - WAIT.interrupt() - return - end - end - - pw=HASH.pbkdf2(HASH.sha3_256,pw,salt,260) - - local res=getMsg({ - pool='setPW', - method='PUT', - path='/techmino/api/v1/auth/reset/email', - body={ - email=USER.email, - code=code, - newPassword=pw, - }, - },6.26) - - if res then - if res.code==200 then - USER.password=pw - saveUser() - SCN.back() - end - end - - WAIT.interrupt() - end) -end -function NET.autoLogin() - if not TASK.lock('autoLogin') then return end - TASK.new(function() - WAIT{ - quit=function() - TASK.unlock('autoLogin') - HTTP.deletePool('autoLogin') + TASK.unlock('login') + HTTP.deletePool('login') end, timeout=12.6, } if USER.aToken then local res=getMsg({ - pool='autoLogin', - path='/techmino/api/v1/auth/check', + pool='login', + url='cafuuchino1.3322.org:8081', + path='/studio26f/api/v1/auth/check', headers={["x-access-token"]=USER.aToken}, },6.26) - if res then - if res.code==200 then - USER.uid=res.data - saveUser() - NET.ws_connect() - SCN.go('net_menu') - WAIT.interrupt() - return - end - else - WAIT.interrupt() - return - end - end - if USER.rToken then - local res=getMsg({ - pool='autoLogin', - path='/techmino/api/v1/auth/refresh', - headers={["x-refresh-token"]=USER.rToken}, - },6.26) - - if res then - if res.code==200 then - USER.rToken=res.data.refreshToken + if res and math.floor(res.code/100)==2 then + USER.uid=res.data.playerId + if res.data.accessToken then USER.aToken=res.data.accessToken - saveUser() - NET.ws_connect() - SCN.go('net_menu') - WAIT.interrupt() - return end - else - WAIT.interrupt() - return - end - end - if USER.password then - local res=getMsg({ - pool='pwLogin', - path='/techmino/api/v1/auth/login/email', - body={ - email=USER.email, - password=USER.password, - }, - },6.26) - if res then - if res.code==200 then - USER.rToken=res.data.refreshToken - USER.aToken=res.data.accessToken - saveUser() - NET.ws_connect() - SCN.go('net_menu') - WAIT.interrupt() - return + saveUser() + NET.ws_connect() + if not auto then-- Quit login menu + SCN.pop() end - else - WAIT.interrupt() - end - end - - SCN.go('login_pw') - WAIT.interrupt() - end) -end -function NET.pwLogin(email,pw) - if not TASK.lock('pwLogin') then return end - TASK.new(function() - WAIT{ - quit=function() - TASK.unlock('pwLogin') - HTTP.deletePool('pwLogin') - end, - timeout=12.6, - } - TEST.yieldT(.26) - - local salt do - local res=getMsg({ - pool='pwLogin', - path='/techmino/api/v1/auth/seed/email', - body={ - email=email, - }, - },6.26) - - if res and res.code==200 then - salt=res.data - else + SCN.go('net_menu') WAIT.interrupt() return end end - pw=HASH.pbkdf2(HASH.sha3_256,pw,salt,260) - - do - local res=getMsg({ - pool='pwLogin', - path='/techmino/api/v1/auth/login/email', - body={ - email=email, - password=pw, - }, - },6.26) - - if res then - if res.code==200 then - USER.email=email - USER.password=pw - USER.rToken=res.data.refreshToken - USER.aToken=res.data.accessToken - saveUser() - NET.ws_connect() - SCN.swapTo('net_menu') - end - end - end - + SCN.go('login') WAIT.interrupt() end) end @@ -377,7 +163,8 @@ function NET.getUserInfo(uid) TASK.new(function() local res=getMsg({ pool='getInfo', - path='/techmino/api/v1/player/info?playerId='..uid, + url='cafuuchino1.3322.org:8081', + path='/studio26f/api/v1/player/info?playerId='..uid, },6.26) if res and res.code==200 and type(res.data)=='table' then @@ -389,7 +176,8 @@ function NET.getAvatar(uid) TASK.new(function() local res=getMsg({ pool='getInfo', - path='/techmino/api/v1/player/avatar?playerId='..uid, + url='cafuuchino1.3322.org:8081', + path='/studio26f/api/v1/player/avatar?playerId='..uid, },6.26) if res and res.code==200 and type(res.data)=='string' then @@ -759,7 +547,7 @@ end function NET.ws_connect() if WS.status('game')=='dead' then - WS.connect('game','',{['x-access-token']=USER.aToken},6) + WS.connect('game','',{['x-access-token']=USER.oToken},6) TASK.removeTask_code(NET.ws_update) TASK.new(NET.ws_update) end @@ -785,11 +573,15 @@ function NET.ws_update() local res=getMsg({ pool='getUID', path='/techmino/api/v1/auth/check', - headers={["x-access-token"]=USER.aToken}, + headers={["x-access-token"]=USER.oToken}, },6.26) - if res and res.code==200 then - USER.uid=res.data + if res and math.floor(res.code/100)==2 then + USER.uid=res.data.playerId + if res.data.accessToken then + USER.oToken=res.data.accessToken + end + saveUser() else TEST.yieldUntilNextScene() GAME.playing=false diff --git a/parts/scenes/login.lua b/parts/scenes/login.lua new file mode 100644 index 00000000..d7c0db8f --- /dev/null +++ b/parts/scenes/login.lua @@ -0,0 +1,60 @@ +local scene={} + +local function _authorize() + love.system.openURL("https://dev.studio26f.org/oauth?product=techmino") +end +local function _submit() + local tickets=scene.widgetList.ticket:getText():upper() + if #tickets~=128 then + MES.new('error',text.wrongCode) + else + USER.aToken=tickets:sub(1,64) + USER.oToken=tickets:sub(65) + NET.login() + end +end +local function _paste() + local t=love.system.getClipboardText() + if t then + t=STRING.trim(t) + if #t==128 and t:match("[0-9A-Z]+") then + scene.widgetList.ticket:setText(t) + return + end + end + MES.new('error',text.wrongCode) +end + +function scene.enter() + scene.widgetList.ticket:clear() +end + +function scene.keyDown(key,rep) + if key=='escape' and not rep then + SCN.back() + elseif key=='return' or key=='kpenter' then + if #scene.widgetList.ticket:getText()==0 then + _authorize() + else + _submit() + end + elseif key=='v' and love.keyboard.isDown('lctrl','rctrl') then + _paste() + else + return true + end +end + +scene.widgetList={ + WIDGET.newText{name='title', x=80, y=50,font=70,align='L'}, + + WIDGET.newInputBox{name='ticket', x=280, y=200,w=730,h=320,font=30,regex="[0-9A-Z]",limit=128}, + + WIDGET.newKey{name='authorize', x=430, y=600,w=300,h=80,font=40,code=_authorize}, + WIDGET.newKey{name='submit', x=755, y=600,w=300,h=80,font=40,code=_submit}, + WIDGET.newKey{name='paste', x=970, y=600,w=80,font=40,fText=CHAR.icon.import,code=_paste}, + + 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 diff --git a/parts/scenes/login_mail.lua b/parts/scenes/login_mail.lua deleted file mode 100644 index c882566c..00000000 --- a/parts/scenes/login_mail.lua +++ /dev/null @@ -1,67 +0,0 @@ -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 -local function _paste() - local t=love.system.getClipboardText() - if t then - t=STRING.trim(t) - if #t==8 and t:match("[0-9]+") then - scene.widgetList.code:setText(t) - return - end - end - MES.new('warn',text.wrongCode) -end - -function scene.enter() - 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' or key=='kpenter' then - if #scene.widgetList.code:getText():upper()==0 then - _getCode() - else - _codeLogin() - end - elseif key=='v' and love.keyboard.isDown('lctrl','rctrl') then - _paste() - 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,regex="[0-9a-zA-Z]",limit=8}, - WIDGET.newKey{name='verify', x=640, y=530,w=300,h=80,font=40,code=_codeLogin}, - WIDGET.newKey{name='paste', x=850, y=530,w=80,font=40,fText=CHAR.icon.import,code=_paste}, - - 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 diff --git a/parts/scenes/login_pw.lua b/parts/scenes/login_pw.lua deleted file mode 100644 index 228bdfa9..00000000 --- a/parts/scenes/login_pw.lua +++ /dev/null @@ -1,44 +0,0 @@ -local emailBox=WIDGET.newInputBox{name='email',x=380,y=200,w=500,h=60,limit=128} -local passwordBox=WIDGET.newInputBox{name='password',x=380,y=300,w=620,h=60,secret=true,regex="[ -~]",limit=64} - -local showEmail=true - -local function _login() - local email,password=emailBox:getText(),passwordBox:getText() - if not STRING.simpEmailCheck(email) then - MES.new('error',text.wrongEmail) return - elseif #password==0 then - MES.new('error',text.noPassword) return - end - NET.pwLogin(email,password) -end - -local scene={} - -function scene.enter() - showEmail=false - emailBox.secret=true - emailBox:setText(USER.email) - passwordBox:setText("") -end - -function scene.keyDown(key,rep) - if rep then return true end - if key=='return' then - _login() - else - return true - end -end - -scene.widgetList={ - 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}, -} - -return scene diff --git a/parts/scenes/main.lua b/parts/scenes/main.lua index 454abc43..17c4784e 100644 --- a/parts/scenes/main.lua +++ b/parts/scenes/main.lua @@ -76,7 +76,7 @@ function scene.keyDown(key,isRep) end elseif key=='a' then if _testButton(3) then - NET.autoLogin() + NET.login(true) end elseif key=='z' then if _testButton(4) then diff --git a/parts/scenes/net_menu.lua b/parts/scenes/net_menu.lua index 666645eb..ce29d6c3 100644 --- a/parts/scenes/net_menu.lua +++ b/parts/scenes/net_menu.lua @@ -18,15 +18,13 @@ 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=goScene'reset_password'}, WIDGET.newButton{name='logout',x=880, y=40,w=180, h=60,color='dR', code=function() if tryBack() then + print('logout') USER.__data.uid=false - USER.__data.email=false - USER.__data.password=false - USER.__data.rToken=false USER.__data.aToken=false + USER.__data.oToken=false love.filesystem.remove('conf/user') SCN.back() end