func_tool.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import urllib.parse
  2. import datetime
  3. import hashlib
  4. import flask
  5. import random
  6. import string
  7. import re
  8. import os
  9. import html
  10. import sqlite3
  11. import time
  12. import orjson
  13. import threading
  14. def get_time():
  15. return str(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S"))
  16. class class_temp_db:
  17. def __enter__(self):
  18. self.conn = sqlite3.connect(
  19. os.path.join('.', 'data', 'temp.db'),
  20. check_same_thread = False,
  21. isolation_level = None
  22. )
  23. return self.conn
  24. def __exit__(self, exc_type, exc_value, traceback):
  25. self.conn.commit()
  26. self.conn.close()
  27. def db_change(data):
  28. with class_temp_db() as m_conn:
  29. m_curs = m_conn.cursor()
  30. m_curs.execute('select data from temp where name = "db_type"')
  31. db_data = m_curs.fetchall()
  32. set_data = db_data[0][0] if db_data else 'sqlite'
  33. if set_data == 'mysql':
  34. data = data.replace('random()', 'rand()')
  35. data = data.replace('%', '%%')
  36. data = data.replace('?', '%s')
  37. data = data.replace('collate nocase', 'collate utf8mb4_general_ci')
  38. return data
  39. def ip_check(d_type = 0):
  40. ip = '::1'
  41. if d_type == 0 and (flask.session and 'id' in flask.session):
  42. ip = flask.session['id']
  43. else:
  44. with class_temp_db() as m_conn:
  45. m_curs = m_conn.cursor()
  46. m_curs.execute('select data from temp where name = "load_ip_select"')
  47. db_data = m_curs.fetchall()
  48. set_data = db_data[0][0] if db_data else 'default'
  49. if set_data == "default":
  50. ip = flask.request.environ.get('HTTP_X_REAL_IP',
  51. flask.request.environ.get('HTTP_CF_CONNECTING_IP',
  52. flask.request.environ.get('REMOTE_ADDR',
  53. '::1'
  54. )
  55. )
  56. )
  57. else:
  58. ip = flask.request.environ.get(set_data, '::1')
  59. if ip_or_user(ip) == 0:
  60. ip = '::1'
  61. return ip
  62. def ip_or_user(data = ''):
  63. # without_DB
  64. # 1 == ip
  65. # 0 == reg
  66. if data == '':
  67. data = ip_check()
  68. if re.search(r'(\.|:)', data):
  69. return 1
  70. else:
  71. return 0
  72. def url_pas(data):
  73. data = re.sub(r'^\.', '\\\\.', data)
  74. data = urllib.parse.quote(data)
  75. data = data.replace('/','%2F')
  76. return data
  77. def sha224_replace(data):
  78. return hashlib.sha224(bytes(data, 'utf-8')).hexdigest()
  79. def md5_replace(data):
  80. return hashlib.md5(data.encode()).hexdigest()
  81. def get_main_skin_set(conn, flask_session, set_name, ip):
  82. curs = conn.cursor()
  83. if ip_or_user(ip) == 0:
  84. curs.execute(db_change('select data from user_set where name = ? and id = ?'), [set_name, ip])
  85. db_data = curs.fetchall()
  86. set_data = db_data[0][0] if db_data and db_data[0][0] != '' else 'default'
  87. else:
  88. set_data = flask_session[set_name] if set_name in flask_session and flask_session[set_name] != '' else 'default'
  89. if set_data == 'default':
  90. curs.execute(db_change('select data from other where name = ?'), [set_name])
  91. db_data = curs.fetchall()
  92. set_data = db_data[0][0] if db_data and db_data[0][0] != '' else 'default'
  93. return set_data