login_login.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from .tool.func import *
  2. async def login_login():
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. ip = ip_check()
  6. if ip_or_user(ip) == 0:
  7. return redirect(conn, '/user')
  8. if (await ban_check(None, 'login'))[0] == 1:
  9. return await re_error(conn, 0)
  10. return_url = flask.request.args.get('return', '')
  11. if not return_url.startswith('/') or return_url.startswith('//') or '\\' in return_url:
  12. return_url = ''
  13. if flask.request.method == 'POST':
  14. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  15. return await re_error(conn, 13)
  16. user_agent = flask.request.headers.get('User-Agent', '')
  17. user_id = flask.request.form.get('id', '')
  18. user_pw = flask.request.form.get('pw', '')
  19. curs.execute(db_change("select data from user_set where id = ? and name = 'pw'"), [user_id])
  20. db_data = curs.fetchall()
  21. if not db_data:
  22. return await re_error(conn, 2)
  23. else:
  24. db_user_pw = db_data[0][0]
  25. curs.execute(db_change("select data from user_set where id = ? and name = 'encode'"), [user_id])
  26. db_data = curs.fetchall()
  27. if not db_data:
  28. return await re_error(conn, 2)
  29. else:
  30. db_user_encode = db_data[0][0]
  31. if pw_check(conn, user_pw, db_user_pw, db_user_encode, user_id) != 1:
  32. return await re_error(conn, 10)
  33. curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [user_id])
  34. fa_data = curs.fetchall()
  35. if fa_data and fa_data[0][0] != '':
  36. flask.session['login_id'] = user_id
  37. return redirect(conn, '/login/2fa')
  38. else:
  39. flask.session['id'] = user_id
  40. ua_plus(conn, user_id, ip, user_agent, get_time())
  41. if return_url != '':
  42. return redirect(conn, return_url)
  43. else:
  44. return redirect(conn, '/user')
  45. else:
  46. return await render_template(
  47. await get_lang('login'),
  48. '''
  49. <form method="post">
  50. <input class="__ON_INPUT__" placeholder="''' + await get_lang('id') + '''" name="id" type="text">
  51. <hr class="main_hr">
  52. <input class="__ON_INPUT__" placeholder="''' + await get_lang('password') + '''" name="pw" type="password">
  53. <hr class="main_hr">
  54. <!-- <label class="__ON_CHECKLABEL__"><input class="__ON_CHECKBOX__" type="checkbox" name="auto_login"> ''' + await get_lang('auto_login') + ''' (''' + await get_lang('not_working') + ''')</label>
  55. <hr class="main_hr"> -->
  56. ''' + await captcha_get(conn) + '''
  57. <button class="__ON_BUTTON__" type="submit">''' + await get_lang('login') + '''</button>
  58. ''' + await http_warning() + '''
  59. </form>
  60. ''',
  61. 0,
  62. [['user', await get_lang('return')]]
  63. )