base.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import logging
  4. import os
  5. import sys
  6. from configs import enum_define
  7. reload(sys)
  8. # noinspection PyUnresolvedReferences
  9. sys.setdefaultencoding('utf-8')
  10. from dotenv import load_dotenv, get_key
  11. from os.path import abspath, join
  12. from collections import namedtuple
  13. CWD = abspath(os.path.split(os.path.realpath(__file__))[0])
  14. PROJECT_ROOT = os.path.abspath(os.path.join(CWD, os.pardir))
  15. sys.path.insert(0, PROJECT_ROOT)
  16. # noinspection PyUnresolvedReferences
  17. from version import VERSION
  18. MY_ENV = os.environ.get('MY_ENV')
  19. dotenv_path = abspath(join(PROJECT_ROOT, '.env.%s' % MY_ENV))
  20. load_dotenv(dotenv_path)
  21. def env(key, default = None):
  22. value = get_key(dotenv_path, key)
  23. if value is not None:
  24. return str(value)
  25. else:
  26. return str(os.environ.get(key, default))
  27. MY_DOMAIN = os.environ.get('MY_DOMAIN')
  28. FRONT_END_DOMAIN = os.environ.get('FRONT_END_DOMAIN')
  29. COOKIE_DOMAIN = os.environ.get('FRONT_END_DOMAIN')
  30. SECURITY_HTTP = True if os.environ.get('SECURITY_HTTP', 'yes') == 'yes' else False
  31. # COOKIE_SECURE = SECURITY_HTTP
  32. DEBUG = False
  33. TEMPLATE_DEBUG = False
  34. ALLOWED_HOSTS = ['*']
  35. from mongoengine import register_connection
  36. MongoCollection = namedtuple(
  37. 'MongoCollection',
  38. ['alias', 'name', 'host', 'port', 'username', 'password', 'authentication_source']
  39. )
  40. def register_connections(*collections):
  41. # type:(MongoCollection) -> None
  42. for c in collections:
  43. register_connection(**c._asdict())
  44. # noinspection PyUnresolvedReferences
  45. MEDIA_ROOT = '/var/www/uploaded'
  46. MEDIA_URL = '/uploaded/'
  47. PRIVATE_MEDIA_ROOT = '/etc/washpayer_private_files'
  48. STATIC_ROOT = os.path.join(PROJECT_ROOT, 'dist')
  49. STATIC_URL = '/'
  50. WECHAT_SUBSCRIPTION_ACCOUNT_VERIFY_PATH = STATIC_ROOT
  51. MIDDLEWARE_CLASSES = (
  52. 'django.middleware.common.CommonMiddleware',
  53. 'django.contrib.sessions.middleware.SessionMiddleware',
  54. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  55. # 'django.middleware.gzip.GZipMiddleware',
  56. # 'mongo_auth.middleware.LazyUserMiddleware',
  57. 'django.contrib.messages.middleware.MessageMiddleware',
  58. 'middlewares.django_jwt_session_auth.JwtAuthMiddleware',
  59. 'middlewares.validPermission.PermissionMiddleware'
  60. # 'crashlog.CrashLogMiddleware',
  61. )
  62. ROOT_URLCONF = 'urls'
  63. INSTALLED_APPS = (
  64. 'django.contrib.sessions',
  65. 'library.mongo_django_auth_backport',
  66. 'apps.patch',
  67. 'apps.web',
  68. )
  69. # registration setting
  70. SESSION_EXPIRE_AT_BROWSER_CLOSE = True # TODO:在firefox中无效 #request.session.set_expiry(0)#TODO:对firefox也无效
  71. AUTH_USER_MODEL = 'apps.web.core.db.UserSearchable'
  72. SESSION_ENGINE = 'library.mongo_django_auth_backport.sessions'
  73. AUTHENTICATION_BACKENDS = (
  74. 'apps.web.utils.AgentAuthBackend',
  75. 'apps.web.utils.DealerAuthBackend',
  76. 'apps.web.utils.ManagerAuthBackend',
  77. 'apps.web.utils.SuperManagerAuthBackend',
  78. 'apps.web.utils.AdvertisementAuthBackend',
  79. 'apps.web.utils.AdvertiserAuthBackend',
  80. 'apps.web.utils.SubAccountBackend',
  81. 'apps.web.user.models.MyUserAuthBackend'
  82. )
  83. LOGGING_OUTPUT_ENABLED = True
  84. LOGGING_SHOW_METRICS = False
  85. LOGGING_LOG_SQL = False
  86. # if Django is running behind a proxy, we need to do things like use
  87. # HTTP_X_FORWARDED_FOR instead of REMOTE_ADDR. This setting is used
  88. # to inform apps of this fact
  89. BEHIND_PROXY = True # TODO:TO CONFIRM!
  90. # 这一系列的配置用于Web Server的API接口
  91. JAPI_SECRET = env('JAPI_SECRET')
  92. JAPI_RETRY_COUNT = 0
  93. JAPI_RETRY_DELAY = 10
  94. # 邮件的主题前缀
  95. EMAIL_SUBJECT_PREFIX = '[Washpayer] '
  96. # 邮件服务器
  97. EMAIL_HOST = 'smtp.163.com'
  98. # 发送端口 163的端口 当使用tls的时候 端口为465 当使用ssl 的时候端口为465 配对出现 不能乱
  99. EMAIL_PORT = 465
  100. EMAIL_USE_SSL = True
  101. # 发送邮箱
  102. SERVER_EMAIL = '17625905485@163.com'
  103. # 邮件发送人 当使用163邮箱的时候 与server_email 相同 两者的区别 一个是用来登录smtp邮箱服务器的 一个是显示邮箱发送人的
  104. EMAIL_HOST_USER = SERVER_EMAIL
  105. EMAIL_HOST_PASSWORD = 'XLGOZFPKYDABTLED'
  106. # 收件人以及邮箱信息
  107. ADMINS = (("zjl", "17625905485@163.com"), ("sp", "32899523@qq.com"),)
  108. LOGGING = {
  109. 'version': 1,
  110. 'disable_existing_loggers': False,
  111. 'formatters': {
  112. 'simple': {
  113. 'format': '[%(asctime)s] %(levelname)s : %(message)s',
  114. 'datefmt': '%Y-%m-%d %H:%M:%S'
  115. },
  116. 'verbose': {
  117. 'format': '[%(asctime)s] %(levelname)s[%(thread)d] [%(name)s:%(lineno)d]: %(message)s',
  118. 'datefmt': '%Y-%m-%d %H:%M:%S'
  119. },
  120. 'standard': {
  121. 'format': '%(asctime)s %(levelname)s[%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s',
  122. 'datefmt': '%Y-%m-%d %H:%M:%S'
  123. },
  124. },
  125. 'handlers': {
  126. 'console': {
  127. 'level': 'DEBUG',
  128. 'class': 'logging.StreamHandler',
  129. 'stream': sys.stdout,
  130. 'formatter': 'verbose',
  131. },
  132. 'fileHandler': {
  133. 'level': 'DEBUG',
  134. 'class': 'logging.handlers.WatchedFileHandler', # 使用系统logrotate轮转日志
  135. 'filename': os.environ.get('LOG_PATH', 'logs'),
  136. 'formatter': 'verbose'
  137. }
  138. },
  139. 'loggers': {
  140. 'django': {
  141. # 'handlers': ['console'],
  142. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  143. 'level': 'DEBUG',
  144. 'propagate': True,
  145. },
  146. '': {
  147. # 'handlers': ['console'],
  148. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  149. 'level': 'DEBUG',
  150. 'propagate': True
  151. },
  152. 'requests.packages.urllib3': {
  153. # 'handlers': ['console'],
  154. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  155. 'level': logging.WARNING
  156. },
  157. 'matplotlib': {
  158. # 'handlers': ['console'],
  159. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  160. 'level': logging.WARNING
  161. },
  162. 'amqp': {
  163. # 'handlers': ['console'],
  164. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  165. 'level': logging.WARNING
  166. },
  167. 'urllib3': {
  168. # 'handlers': ['console'],
  169. 'handlers': ['console'] if not os.environ.get('LOG_PATH', None) else ['fileHandler'],
  170. 'level': logging.WARNING
  171. }
  172. },
  173. }
  174. # List of callables that know how to import templates from various sources.
  175. TEMPLATE_LOADERS = (
  176. # 'django.template.loaders.app_directories.Loader',
  177. 'django.template.loaders.filesystem.Loader',
  178. )
  179. TEMPLATE_DIRS = (
  180. os.path.join(PROJECT_ROOT, "templates"),
  181. )
  182. TEMPLATE_CONTEXT_PROCESSORS = (
  183. 'django.contrib.auth.context_processors.auth',
  184. 'django.core.context_processors.debug',
  185. 'django.core.context_processors.media',
  186. 'django.core.context_processors.static',
  187. 'django.core.context_processors.tz',
  188. 'django.contrib.messages.context_processors.messages',
  189. )
  190. STATIC_SERVER_URL = 'http://127.0.0.1:80'
  191. def my_key_fun(key, key_prefix, version):
  192. return "manyi_{}".format(key)
  193. CACHES = {
  194. 'default': {
  195. 'BACKEND': 'library.djmemcache.backend.PyMemcacheCache',
  196. 'LOCATION': env('MEMCACHE_DEFAULT').split(','),
  197. "TIMEOUT": 7 * 24 * 3600,
  198. 'KEY_FUNCTION': my_key_fun,
  199. 'OPTIONS': {
  200. 'POOL_IDLE_TIMEOUT': 60,
  201. 'MAX_POOL_SIZE': 65000,
  202. 'TIMEOUT': 5,
  203. 'CONNECT_TIMEOUT': 3,
  204. # 'IGNORE_EXC': True,
  205. 'USE_POOLING': True
  206. }
  207. },
  208. 'report': {
  209. 'BACKEND': 'library.djmemcache.backend.PyMemcacheCache',
  210. 'LOCATION': env('MEMCACHE_REPORT').split(','),
  211. "TIMEOUT": 72 * 3600,
  212. 'KEY_FUNCTION': my_key_fun,
  213. 'OPTIONS': {
  214. 'POOL_IDLE_TIMEOUT': 60,
  215. 'MAX_POOL_SIZE': 65000,
  216. 'TIMEOUT': 5,
  217. 'CONNECT_TIMEOUT': 3,
  218. # 'IGNORE_EXC': True,
  219. 'USE_POOLING': True
  220. }
  221. },
  222. # 'devmgr': {
  223. # 'BACKEND': 'library.memcache_backend.CustomizedMemcachedCacheBackend',
  224. # 'LOCATION': env('MEMCACHE_DEVMGR').split(','),
  225. # "TIMEOUT": 48 * 3600,
  226. # "KEY_FUNCTION": my_key_fun
  227. # },
  228. 'devmgr': {
  229. 'BACKEND': 'library.djmemcache.backend.PyMemcacheCache',
  230. 'LOCATION': env('MEMCACHE_DEVMGR').split(','),
  231. "TIMEOUT": 2 * 24 * 3600,
  232. 'KEY_FUNCTION': my_key_fun,
  233. 'OPTIONS': {
  234. 'POOL_IDLE_TIMEOUT': 60,
  235. 'MAX_POOL_SIZE': 65000,
  236. 'TIMEOUT': 5,
  237. 'CONNECT_TIMEOUT': 3,
  238. # 'IGNORE_EXC': True,
  239. 'USE_POOLING': True
  240. }
  241. },
  242. 'service': {
  243. 'BACKEND': 'library.djmemcache.backend.PyMemcacheCache',
  244. 'LOCATION': env('MEMCACHE_SERVICE').split(','),
  245. "TIMEOUT": 7 * 24 * 3600,
  246. 'KEY_FUNCTION': my_key_fun,
  247. 'OPTIONS': {
  248. 'POOL_IDLE_TIMEOUT': 60,
  249. 'MAX_POOL_SIZE': 65000,
  250. 'TIMEOUT': 5,
  251. 'CONNECT_TIMEOUT': 3,
  252. # 'IGNORE_EXC': True,
  253. 'USE_POOLING': True
  254. }
  255. },
  256. 'lock': {
  257. 'BACKEND': 'library.djmemcache.backend.PyMemcacheCache',
  258. 'BACKEND_TYPE': 'pool',
  259. 'LOCATION': env('MEMCACHE_LOCK').split(','),
  260. "TIMEOUT": 24 * 3600 * 7,
  261. 'KEY_FUNCTION': my_key_fun,
  262. 'OPTIONS': {
  263. 'POOL_IDLE_TIMEOUT': 60,
  264. 'MAX_POOL_SIZE': 65000,
  265. 'TIMEOUT': 5,
  266. 'CONNECT_TIMEOUT': 3,
  267. # 'IGNORE_EXC': True,
  268. 'USE_POOLING': True
  269. }
  270. }
  271. }
  272. TIME_ZONE = 'Asia/Shanghai'
  273. TEST_RUNNER = 'testcase.MongoBasedTestRunner'
  274. if SECURITY_HTTP:
  275. SERVER_END_BASE_URL = 'https://{}'.format(MY_DOMAIN)
  276. else:
  277. SERVER_END_BASE_URL = 'http://{}'.format(MY_DOMAIN)
  278. SERVER_END_BASE_SSL_URL = 'https://{}'.format(MY_DOMAIN)
  279. if SECURITY_HTTP:
  280. FRONT_END_BASE_URL = 'https://{}'.format(FRONT_END_DOMAIN)
  281. else:
  282. FRONT_END_BASE_URL = 'http://{}'.format(FRONT_END_DOMAIN)
  283. SECRET_KEY = 'bk-e2zv3humar79nm=j*bwc=-ymeit132481113goq4dh732%s'
  284. # 配置是否记录OPENID
  285. OPEN_ID_NEEDED = True
  286. # 万能密码
  287. UNIVERSAL_PASSWORD = env('UNIVERSAL_PASSWORD')
  288. # 提现所需最小值
  289. WITHDRAW_MINIMUM = 10
  290. AD_WITHDRAW_MINIMUM = 1
  291. SIM_INCOME_WITHDRAW_MINIMUM = 10
  292. # 提现所需最大值
  293. WITHDRAW_MAXIMUM = 20000
  294. DEFAULT_AVATAR_URL = ""
  295. # 网络通信超时时间,默认为60秒
  296. MESSAGE_SENDER_TIMEOUT = 60
  297. CAN_WITHDRAW_FUND = True
  298. WHALE_WITHDRAWAL_ORDER_AMOUNT = 15000
  299. FINANCE_MANAGER_TEL = '13797019121'
  300. DEFAULT_CUSTOMER_SERVICE_TEL = ''
  301. REDIS_HOST = env('REDIS_HOST')
  302. REDIS_PORT = int(env('REDIS_PORT'))
  303. REDIS_DB = env('REDIS_DB')
  304. CELERY_RESULT_URL_PREFIX = env('CELERY_RESULT_URL_PREFIX')
  305. LOGO_ROOT = os.path.join(MEDIA_ROOT, 'logo')
  306. LOGO_URL = '%slogo/' % MEDIA_URL
  307. QRCODE_ROOT = os.path.join(MEDIA_ROOT, 'qrcode')
  308. QRCODE_URL = '%sqrcode/' % MEDIA_URL
  309. CREATIVE_ROOT = os.path.join(MEDIA_ROOT, 'creative')
  310. CREATIVE_URL = '%screative/' % MEDIA_URL
  311. USER_IDENT_ROOT = os.path.join(MEDIA_ROOT, 'identify')
  312. USER_IDENT_URL = '%sidentify/' % MEDIA_URL
  313. ITEM_ROOT = os.path.join(MEDIA_ROOT, 'item')
  314. ITEM_URL = '%sitem/' % MEDIA_URL
  315. FAULT_ROOT = os.path.join(MEDIA_ROOT, 'fault')
  316. FAULT_URL = '%sfault/' % MEDIA_URL
  317. # MQTT
  318. MQTT_HOSTNAME = env('MQTT_HOSTNAME')
  319. MQTT_PORT = int(env('MQTT_PORT'))
  320. MQTT_PORT_SECURITY = int(env('MQTT_PORT_SECURITY'))
  321. MQTT_USER = env('MQTT_USER')
  322. MQTT_PSWD = env('MQTT_PSWD')
  323. defaultCollection = MongoCollection('default', str(env('MONGODB_WASHPAY_NAME')), str(env('MONGODB_IP')),
  324. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  325. env('MONGODB_WASHPAY_USER'),
  326. env('MONGODB_WASHPAY_PASSWORD'), env('MONGODB_WASHPAY_AUTH_DB'))
  327. reportCollection = MongoCollection('report', str(env('MONGODB_REPORT_NAME')), str(env('MONGODB_IP')),
  328. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  329. env('MONGODB_REPORT_USER'),
  330. env('MONGODB_REPORT_PASSWORD'), env('MONGODB_REPORT_AUTH_DB'))
  331. logdataCollection = MongoCollection('logdata', str(env('MONGODB_LOGDATA_NAME')), str(env('MONGODB_IP')),
  332. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  333. env('MONGODB_LOGDATA_USER'),
  334. env('MONGODB_LOGDATA_PASSWORD'), env('MONGODB_LOGDATA_AUTH_DB'))
  335. register_connections(defaultCollection, reportCollection, logdataCollection)
  336. CELERY_BROKER_URL = env('CELERY_BROKER_URL')
  337. CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
  338. MAX_DISTANCE_TO_SHOW_AD = 1 # km
  339. AD_LOCATION_LIMIT = True
  340. # 是否跳过验证码校验
  341. SKIP_VERIFY_SMS = False
  342. SEND_SMS_IS_ALLOWED = True
  343. CHECK_DEVICE_SMS_EXPIRE = False
  344. SEND_DEALER_WECHAT_PUSH_MESSAGE = False
  345. TELL_MANAGER = True
  346. WECHAT_PUSH_ENABLED = True
  347. SERVICE_DOMAIN = enum_define(USER = 'MyUser',
  348. DEALER = 'Dealer',
  349. SUBACCOUNT = 'SubAccount',
  350. AGENT = 'Agent',
  351. MANAGER = 'Manager',
  352. ADVERTISEMENT = 'Advertisement',
  353. ADVERTISER = 'Advertiser',
  354. SUPERMANAGER = 'SuperManager',
  355. TESTER = 'Tester')
  356. JWT_AUTH_DOMAIN_COOKIE_NAME = 'jwt_auth_domain'
  357. JWT_AUTH_DOMAIN_HEADER_NAME = 'jwt-auth-domain'
  358. JWT_TOKEN_HEADER_NAME = 'jwt-token'
  359. JWT_AUTH_DOMAIN_DJANGO = 'HTTP_JWT_AUTH_DOMAIN'
  360. JWT_TOKEN_DJANGO = 'HTTP_JWT_TOKEN'
  361. JWT_SERVICE_DOMAIN_MAP = {
  362. '/userLogin': {
  363. 'authDomain': SERVICE_DOMAIN.USER,
  364. 'pre': True,
  365. 'post': False
  366. },
  367. '/user/wechat/auth/base': {
  368. 'authDomain': SERVICE_DOMAIN.USER,
  369. 'pre': False,
  370. 'post': False
  371. },
  372. '/user/wechat/managerAuth/base': {
  373. 'authDomain': SERVICE_DOMAIN.USER,
  374. 'pre': False,
  375. 'post': False
  376. },
  377. '/user/wechat/managerAuth/user': {
  378. 'authDomain': SERVICE_DOMAIN.USER,
  379. 'pre': False,
  380. 'post': False
  381. },
  382. '/user/wechat/center/auth/base': {
  383. 'authDomain': SERVICE_DOMAIN.USER,
  384. 'pre': False,
  385. 'post': False
  386. },
  387. '/user/wechat/center/auth/user': {
  388. 'authDomain': SERVICE_DOMAIN.USER,
  389. 'pre': False,
  390. 'post': False
  391. },
  392. '/user/wechat/center/managerAuth/user': {
  393. 'authDomain': SERVICE_DOMAIN.USER,
  394. 'pre': False,
  395. 'post': False
  396. },
  397. '/user/wxpay/baseAccess': {
  398. 'authDomain': SERVICE_DOMAIN.USER,
  399. 'pre': False,
  400. 'post': False
  401. },
  402. '/dealerAccess': {
  403. 'authDomain': SERVICE_DOMAIN.DEALER,
  404. 'pre': False,
  405. 'post': True
  406. },
  407. '/dealer/login': {
  408. 'authDomain': SERVICE_DOMAIN.DEALER,
  409. 'pre': False,
  410. 'post': True
  411. },
  412. '/subAccount/login': {
  413. 'authDomain': SERVICE_DOMAIN.SUBACCOUNT,
  414. 'pre': False,
  415. 'post': True
  416. },
  417. '/agent/login': {
  418. 'authDomain': SERVICE_DOMAIN.AGENT,
  419. 'pre': False,
  420. 'post': True
  421. },
  422. '/superadmin/login': {
  423. 'authDomain': SERVICE_DOMAIN.SUPERMANAGER,
  424. 'pre': False,
  425. 'post': True
  426. },
  427. '/manager/login': {
  428. 'authDomain': SERVICE_DOMAIN.MANAGER,
  429. 'pre': False,
  430. 'post': True
  431. },
  432. '/ad/advertiserLogin': {
  433. 'authDomain': SERVICE_DOMAIN.ADVERTISER,
  434. 'pre': False,
  435. 'post': True
  436. }
  437. }
  438. JWT_AUTH = {
  439. SERVICE_DOMAIN.USER: {
  440. 'PAYLOAD_TO_USER': 'apps.web.user.auth.payload_to_user',
  441. 'USER_TO_PAYLOAD': 'apps.web.user.auth.user_to_payload',
  442. 'USER_KEY': 'id',
  443. 'SECRET': env('JWT_SECRET') or '98d0457b02917c39b66bbb92b089bf9b',
  444. 'SESSION': {
  445. 'EXPIRE': 3600 * 24 * 30,
  446. 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.USER
  447. }
  448. },
  449. SERVICE_DOMAIN.TESTER: {
  450. 'PAYLOAD_TO_USER': 'apps.web.test.auth.payload_to_user',
  451. 'USER_TO_PAYLOAD': 'apps.web.test.auth.user_to_payload',
  452. 'USER_KEY': 'id',
  453. 'SECRET': env('JWT_SECRET') or 'MNa6mGYaRk2kGqVf0Kouz3Uc8PgBdR1U',
  454. 'SESSION': {
  455. 'EXPIRE': 3600 * 24 * 30,
  456. 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.USER
  457. }
  458. },
  459. # SERVICE_DOMAIN.DEALER: {
  460. # 'PAYLOAD_TO_USER': 'apps.web.dealer.auth.payload_to_user',
  461. # 'USER_TO_PAYLOAD': 'apps.web.dealer.auth.user_to_payload',
  462. # 'USER_KEY': 'id',
  463. # 'SECRET': env('JWT_SECRET') or '98d0457b02917c39b66bbb92b089bf9b',
  464. # 'SESSION': {
  465. # 'EXPIRE': 3600 * 24 * 30,
  466. # 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.DEALER
  467. # }
  468. # }
  469. }
  470. DEBUG_JWT = False
  471. DEBUG_CELERY_TASK_ROUTINE = False
  472. DEBUG_CELERY_TASK = False
  473. NO_CELERY_TASK = False
  474. DEFAULT_DEALER_PUSH_BROKER_URL = env('DEFAULT_DEALER_PUSH_BROKER_URL')
  475. SUPPORT_DEALER_AUTO_WITHDRAW = False
  476. #: AD related
  477. USE_ALIPAY_SYS_PROVIDER = True
  478. ALIPAY_SYS_PROVIDER_ID = env('ALIPAY_SYS_PROVIDER_ID', '2088921710507475')
  479. DEFAULT_ALIPAY_APP_ID = env('DEFAULT_ALIPAY_APP_ID', '2019061165493945')
  480. DEALER_TRAFFIC_RECHARGE_APP_TYPE = 'saobei'
  481. MY_WECHAT_USER_TOKEN = 'sLuJzxDQX2eE6xxD'
  482. ID_SERVICE_IP = env('ID_SERVICE_IP', '')
  483. ALIYUN_ACCESS_KEY_ID = 'LTAI4G8CcGDBcLnkYorDGBwH'
  484. ALIYUN_ACCESS_KEY_SECRET = 'hfjbbfZ8T14A1ghxFlVUVGGIYdcdyp'
  485. ALIYUN_CHANNEL_ID = 'QD-WHWF-310495'
  486. INFLUXDB_DB = env('INFLUXDB_DB', 'washpayer')
  487. INFLUXDB_USER = env('INFLUXDB_USER', 'root')
  488. INFLUXDB_PWD = env('INFLUXDB_PWD', 'root')
  489. INFLUXDB_IP = env('INFLUXDB_IP', '172.16.247.184')
  490. INFLUXDB_PORT = env('INFLUXDB_PORT', '8086')
  491. USE_PRIVATE_MQTT = bool(env('USE_PRIVATE_MQTT', 'True') == 'True')
  492. OSS_RESOURCE_URL = 'https://resource.washpayer.com'
  493. LOCAL_REPORT_URL = 'http://121.41.75.233'
  494. ALI_OSS_ACCESS_ID = 'LTAI4GAwTnSbYY3rzkQUyJs5'
  495. ALI_OSS_ACCESS_KEY = 'nQLJ7xV5S7L5ZC7EsEGGo61sVIKVZ7'
  496. ALI_OSS_BUKET_NAME = 'oss-washpayer-1'
  497. ALI_OSS_ENDPOINT = 'oss-cn-hangzhou-internal.aliyuncs.com'
  498. FLUENTED_IP = env('FLUENTED_IP', '172.16.247.184')
  499. FLUENTED_SIGNAL_PORT = 15160
  500. FLUENTED_OFFLINE_PORT = 15161
  501. FLUENTED_POWER_PORT = 15162
  502. # 阿里 聚合拉新 CPA
  503. ALIPAY_LAXIN_CHANNEL_ID = 'QD-WHWF-310495'
  504. # 阿里 天猫入会 CPA
  505. ALIPAY_RUHUI_CHANNEL_ID = 'QD-WHWF-310495'
  506. # 对接山东平台的加密秘钥以及秘钥向量
  507. AES_CBC_DATA_SECRET = "EDFGCEJISRWDZGME"
  508. AES_CBC_DATA_SECRET_IV = "QJDBKGGRQQHTDSXW"
  509. SHAN_DONG_TOKEN_SECRET = "987654WSFASFSASADSADFAS"
  510. # 对接丰图平台的加密密钥
  511. FENG_TU_TOKEN_SECRET = "880J3FY2F409ERT2458O45HR45OPGQ45"
  512. UPLOAD_REPORT_TO_OSS = True
  513. CAR_TCPIP_SERVER = env('CAR_TCPIP_SERVER', '127.0.0.1')
  514. CAR_TCPIP_SERVER_PORT = int(env('CAR_TCPIP_SERVER_PORT', '50000'))
  515. SKIP_HANDLE_WECHAT_COMPLAINT_TASK = True
  516. ENABLE_REQUEST_LIMIT = True
  517. # 阿里的银行卡识别appid
  518. ALI_BANK_CARD_APP_CODE = "8296fcd952e34713ba91fbdceb13e915"
  519. # 百度的图片识别app
  520. BAIDU_IMAGE_RECOGNIZE_APP_ID = "24623149"
  521. BAIDU_IMAGE_RECOGNIZE_APP_KEY = "mWuASxCCFsEngqlvH4y7opdx"
  522. BAIDU_IMAGE_RECOGNIZE_APP_SECRET = "jgDs65aUTdZ077hmGdPXYPGk1NCxQjLO"
  523. # TODO zjl 修改URL 链接方式或者使用.env 文件配置
  524. def init_archive_database():
  525. from pymongo import MongoClient
  526. _databaseInfo = list()
  527. with MongoClient(host = env('MONGODB_IP'), port = int(env('MONGODB_PORT'))) as _client:
  528. _db = _client[env('MONGODB_WASHPAY_NAME')]
  529. _db.authenticate(name = env('MONGODB_WASHPAY_USER'),
  530. password = env('MONGODB_WASHPAY_PASSWORD'),
  531. source = env('MONGODB_WASHPAY_AUTH_DB'))
  532. for _item in _db["ArchivedDatabaseConfig"].find({"active": True}):
  533. _databaseInfo.append({
  534. "alias": _item.get("alias"),
  535. "name": _item.get("name"),
  536. "host": _item.get("host"),
  537. "port": _item.get("port"),
  538. "username": _item.get("username"),
  539. "password": _item.get("password"),
  540. "authentication_source": _item.get("authentication_source")
  541. })
  542. conns = map(lambda x: MongoCollection(**x), _databaseInfo)
  543. register_connections(*conns)
  544. init_archive_database()
  545. # 阿里云v3.0接口
  546. ALIPAY_CHANNEL_ID_V3 = '619191980501444609' # 主体ID
  547. ALIPAY_MEDIA_ID_V3 = '707566730122012672' # 媒体ID
  548. ALIPAY_IMP_CPM_V3 = '755796924816712705'
  549. ALIPAY_IMP_CPA_RUHUI_V3 = '773604407794823173'
  550. ALIPAY_IMP_CPA_LAXIN_V3 = '773837769738319876'
  551. CELERY_PUBLISH_METHOD = os.environ.get('CELERY_PUBLISH_METHOD', 'gevent')
  552. ALI_ISV_APP_ID = '2021001191645419'