base.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  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. # 提现所需最大值
  291. WITHDRAW_MAXIMUM = 20000
  292. DEFAULT_AVATAR_URL = ""
  293. # 网络通信超时时间,默认为60秒
  294. MESSAGE_SENDER_TIMEOUT = 60
  295. CAN_WITHDRAW_FUND = True
  296. WHALE_WITHDRAWAL_ORDER_AMOUNT = 15000
  297. FINANCE_MANAGER_TEL = '13797019121'
  298. DEFAULT_CUSTOMER_SERVICE_TEL = ''
  299. REDIS_HOST = env('REDIS_HOST')
  300. REDIS_PORT = int(env('REDIS_PORT'))
  301. REDIS_DB = env('REDIS_DB')
  302. CELERY_RESULT_URL_PREFIX = env('CELERY_RESULT_URL_PREFIX')
  303. LOGO_ROOT = os.path.join(MEDIA_ROOT, 'logo')
  304. LOGO_URL = '%slogo/' % MEDIA_URL
  305. QRCODE_ROOT = os.path.join(MEDIA_ROOT, 'qrcode')
  306. QRCODE_URL = '%sqrcode/' % MEDIA_URL
  307. CREATIVE_ROOT = os.path.join(MEDIA_ROOT, 'creative')
  308. CREATIVE_URL = '%screative/' % MEDIA_URL
  309. USER_IDENT_ROOT = os.path.join(MEDIA_ROOT, 'identify')
  310. USER_IDENT_URL = '%sidentify/' % MEDIA_URL
  311. ITEM_ROOT = os.path.join(MEDIA_ROOT, 'item')
  312. ITEM_URL = '%sitem/' % MEDIA_URL
  313. FAULT_ROOT = os.path.join(MEDIA_ROOT, 'fault')
  314. FAULT_URL = '%sfault/' % MEDIA_URL
  315. # MQTT
  316. MQTT_HOSTNAME = env('MQTT_HOSTNAME')
  317. MQTT_PORT = int(env('MQTT_PORT'))
  318. MQTT_PORT_SECURITY = int(env('MQTT_PORT_SECURITY'))
  319. MQTT_USER = env('MQTT_USER')
  320. MQTT_PSWD = env('MQTT_PSWD')
  321. defaultCollection = MongoCollection('default', str(env('MONGODB_WASHPAY_NAME')), str(env('MONGODB_IP')),
  322. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  323. env('MONGODB_WASHPAY_USER'),
  324. env('MONGODB_WASHPAY_PASSWORD'), env('MONGODB_WASHPAY_AUTH_DB'))
  325. reportCollection = MongoCollection('report', str(env('MONGODB_REPORT_NAME')), str(env('MONGODB_IP')),
  326. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  327. env('MONGODB_REPORT_USER'),
  328. env('MONGODB_REPORT_PASSWORD'), env('MONGODB_REPORT_AUTH_DB'))
  329. logdataCollection = MongoCollection('logdata', str(env('MONGODB_LOGDATA_NAME')), str(env('MONGODB_IP')),
  330. int(env('MONGODB_PORT')) if env('MONGODB_PORT') is not "" else None,
  331. env('MONGODB_LOGDATA_USER'),
  332. env('MONGODB_LOGDATA_PASSWORD'), env('MONGODB_LOGDATA_AUTH_DB'))
  333. register_connections(defaultCollection, reportCollection, logdataCollection)
  334. CELERY_BROKER_URL = env('CELERY_BROKER_URL')
  335. CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
  336. MAX_DISTANCE_TO_SHOW_AD = 1 # km
  337. AD_LOCATION_LIMIT = True
  338. # 是否跳过验证码校验
  339. SKIP_VERIFY_SMS = False
  340. SEND_SMS_IS_ALLOWED = True
  341. CHECK_DEVICE_SMS_EXPIRE = False
  342. SEND_DEALER_WECHAT_PUSH_MESSAGE = False
  343. TELL_MANAGER = True
  344. WECHAT_PUSH_ENABLED = True
  345. SERVICE_DOMAIN = enum_define(USER = 'MyUser',
  346. DEALER = 'Dealer',
  347. SUBACCOUNT = 'SubAccount',
  348. AGENT = 'Agent',
  349. MANAGER = 'Manager',
  350. ADVERTISEMENT = 'Advertisement',
  351. ADVERTISER = 'Advertiser',
  352. SUPERMANAGER = 'SuperManager',
  353. TESTER = 'Tester')
  354. JWT_AUTH_DOMAIN_COOKIE_NAME = 'jwt_auth_domain'
  355. JWT_AUTH_DOMAIN_HEADER_NAME = 'jwt-auth-domain'
  356. JWT_TOKEN_HEADER_NAME = 'jwt-token'
  357. JWT_AUTH_DOMAIN_DJANGO = 'HTTP_JWT_AUTH_DOMAIN'
  358. JWT_TOKEN_DJANGO = 'HTTP_JWT_TOKEN'
  359. JWT_SERVICE_DOMAIN_MAP = {
  360. '/userLogin': {
  361. 'authDomain': SERVICE_DOMAIN.USER,
  362. 'pre': True,
  363. 'post': False
  364. },
  365. '/user/wechat/auth/base': {
  366. 'authDomain': SERVICE_DOMAIN.USER,
  367. 'pre': False,
  368. 'post': False
  369. },
  370. '/user/wechat/managerAuth/base': {
  371. 'authDomain': SERVICE_DOMAIN.USER,
  372. 'pre': False,
  373. 'post': False
  374. },
  375. '/user/wechat/managerAuth/user': {
  376. 'authDomain': SERVICE_DOMAIN.USER,
  377. 'pre': False,
  378. 'post': False
  379. },
  380. '/user/wechat/center/auth/base': {
  381. 'authDomain': SERVICE_DOMAIN.USER,
  382. 'pre': False,
  383. 'post': False
  384. },
  385. '/user/wechat/center/auth/user': {
  386. 'authDomain': SERVICE_DOMAIN.USER,
  387. 'pre': False,
  388. 'post': False
  389. },
  390. '/user/wechat/center/managerAuth/user': {
  391. 'authDomain': SERVICE_DOMAIN.USER,
  392. 'pre': False,
  393. 'post': False
  394. },
  395. '/user/wxpay/baseAccess': {
  396. 'authDomain': SERVICE_DOMAIN.USER,
  397. 'pre': False,
  398. 'post': False
  399. },
  400. '/dealerAccess': {
  401. 'authDomain': SERVICE_DOMAIN.DEALER,
  402. 'pre': False,
  403. 'post': True
  404. },
  405. '/dealer/login': {
  406. 'authDomain': SERVICE_DOMAIN.DEALER,
  407. 'pre': False,
  408. 'post': True
  409. },
  410. '/subAccount/login': {
  411. 'authDomain': SERVICE_DOMAIN.SUBACCOUNT,
  412. 'pre': False,
  413. 'post': True
  414. },
  415. '/agent/login': {
  416. 'authDomain': SERVICE_DOMAIN.AGENT,
  417. 'pre': False,
  418. 'post': True
  419. },
  420. '/superadmin/login': {
  421. 'authDomain': SERVICE_DOMAIN.SUPERMANAGER,
  422. 'pre': False,
  423. 'post': True
  424. },
  425. '/manager/login': {
  426. 'authDomain': SERVICE_DOMAIN.MANAGER,
  427. 'pre': False,
  428. 'post': True
  429. },
  430. '/ad/advertiserLogin': {
  431. 'authDomain': SERVICE_DOMAIN.ADVERTISER,
  432. 'pre': False,
  433. 'post': True
  434. }
  435. }
  436. JWT_AUTH = {
  437. SERVICE_DOMAIN.USER: {
  438. 'PAYLOAD_TO_USER': 'apps.web.user.auth.payload_to_user',
  439. 'USER_TO_PAYLOAD': 'apps.web.user.auth.user_to_payload',
  440. 'USER_KEY': 'id',
  441. 'SECRET': env('JWT_SECRET') or '98d0457b02917c39b66bbb92b089bf9b',
  442. 'SESSION': {
  443. 'EXPIRE': 3600 * 24 * 30,
  444. 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.USER
  445. }
  446. },
  447. SERVICE_DOMAIN.TESTER: {
  448. 'PAYLOAD_TO_USER': 'apps.web.test.auth.payload_to_user',
  449. 'USER_TO_PAYLOAD': 'apps.web.test.auth.user_to_payload',
  450. 'USER_KEY': 'id',
  451. 'SECRET': env('JWT_SECRET') or 'MNa6mGYaRk2kGqVf0Kouz3Uc8PgBdR1U',
  452. 'SESSION': {
  453. 'EXPIRE': 3600 * 24 * 30,
  454. 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.USER
  455. }
  456. },
  457. # SERVICE_DOMAIN.DEALER: {
  458. # 'PAYLOAD_TO_USER': 'apps.web.dealer.auth.payload_to_user',
  459. # 'USER_TO_PAYLOAD': 'apps.web.dealer.auth.user_to_payload',
  460. # 'USER_KEY': 'id',
  461. # 'SECRET': env('JWT_SECRET') or '98d0457b02917c39b66bbb92b089bf9b',
  462. # 'SESSION': {
  463. # 'EXPIRE': 3600 * 24 * 30,
  464. # 'PREFIX': 'JWT_AUTH_CACHE:%s:' % SERVICE_DOMAIN.DEALER
  465. # }
  466. # }
  467. }
  468. DEBUG_JWT = False
  469. DEBUG_CELERY_TASK_ROUTINE = False
  470. DEBUG_CELERY_TASK = False
  471. NO_CELERY_TASK = False
  472. DEFAULT_DEALER_PUSH_BROKER_URL = env('DEFAULT_DEALER_PUSH_BROKER_URL')
  473. SUPPORT_DEALER_AUTO_WITHDRAW = False
  474. #: AD related
  475. USE_ALIPAY_SYS_PROVIDER = True
  476. ALIPAY_SYS_PROVIDER_ID = env('ALIPAY_SYS_PROVIDER_ID', '2088921710507475')
  477. DEFAULT_ALIPAY_APP_ID = env('DEFAULT_ALIPAY_APP_ID', '2019061165493945')
  478. DEALER_TRAFFIC_RECHARGE_APP_TYPE = 'saobei'
  479. MY_WECHAT_USER_TOKEN = 'sLuJzxDQX2eE6xxD'
  480. ID_SERVICE_IP = env('ID_SERVICE_IP', '')
  481. ALIYUN_ACCESS_KEY_ID = 'LTAI4G8CcGDBcLnkYorDGBwH'
  482. ALIYUN_ACCESS_KEY_SECRET = 'hfjbbfZ8T14A1ghxFlVUVGGIYdcdyp'
  483. ALIYUN_CHANNEL_ID = 'QD-WHWF-310495'
  484. INFLUXDB_DB = env('INFLUXDB_DB', 'washpayer')
  485. INFLUXDB_USER = env('INFLUXDB_USER', 'root')
  486. INFLUXDB_PWD = env('INFLUXDB_PWD', 'root')
  487. INFLUXDB_IP = env('INFLUXDB_IP', '172.16.247.184')
  488. INFLUXDB_PORT = env('INFLUXDB_PORT', '8086')
  489. USE_PRIVATE_MQTT = bool(env('USE_PRIVATE_MQTT', 'True') == 'True')
  490. OSS_RESOURCE_URL = 'https://resource.washpayer.com'
  491. LOCAL_REPORT_URL = 'http://121.41.75.233'
  492. ALI_OSS_ACCESS_ID = 'LTAI4GAwTnSbYY3rzkQUyJs5'
  493. ALI_OSS_ACCESS_KEY = 'nQLJ7xV5S7L5ZC7EsEGGo61sVIKVZ7'
  494. ALI_OSS_BUKET_NAME = 'oss-washpayer-1'
  495. ALI_OSS_ENDPOINT = 'oss-cn-hangzhou-internal.aliyuncs.com'
  496. FLUENTED_IP = env('FLUENTED_IP', '172.16.247.184')
  497. FLUENTED_SIGNAL_PORT = 15160
  498. FLUENTED_OFFLINE_PORT = 15161
  499. FLUENTED_POWER_PORT = 15162
  500. # 阿里 聚合拉新 CPA
  501. ALIPAY_LAXIN_CHANNEL_ID = 'QD-WHWF-310495'
  502. # 阿里 天猫入会 CPA
  503. ALIPAY_RUHUI_CHANNEL_ID = 'QD-WHWF-310495'
  504. # 对接山东平台的加密秘钥以及秘钥向量
  505. AES_CBC_DATA_SECRET = "EDFGCEJISRWDZGME"
  506. AES_CBC_DATA_SECRET_IV = "QJDBKGGRQQHTDSXW"
  507. SHAN_DONG_TOKEN_SECRET = "987654WSFASFSASADSADFAS"
  508. # 对接丰图平台的加密密钥
  509. FENG_TU_TOKEN_SECRET = "880J3FY2F409ERT2458O45HR45OPGQ45"
  510. UPLOAD_REPORT_TO_OSS = True
  511. CAR_TCPIP_SERVER = env('CAR_TCPIP_SERVER', '127.0.0.1')
  512. CAR_TCPIP_SERVER_PORT = int(env('CAR_TCPIP_SERVER_PORT', '50000'))
  513. SKIP_HANDLE_WECHAT_COMPLAINT_TASK = True
  514. ENABLE_REQUEST_LIMIT = True
  515. # 阿里的银行卡识别appid
  516. ALI_BANK_CARD_APP_CODE = "8296fcd952e34713ba91fbdceb13e915"
  517. # 百度的图片识别app
  518. BAIDU_IMAGE_RECOGNIZE_APP_ID = "24623149"
  519. BAIDU_IMAGE_RECOGNIZE_APP_KEY = "mWuASxCCFsEngqlvH4y7opdx"
  520. BAIDU_IMAGE_RECOGNIZE_APP_SECRET = "jgDs65aUTdZ077hmGdPXYPGk1NCxQjLO"
  521. # TODO zjl 修改URL 链接方式或者使用.env 文件配置
  522. def init_archive_database():
  523. from pymongo import MongoClient
  524. _databaseInfo = list()
  525. with MongoClient(host = env('MONGODB_IP'), port = int(env('MONGODB_PORT'))) as _client:
  526. _db = _client[env('MONGODB_WASHPAY_NAME')]
  527. _db.authenticate(name = env('MONGODB_WASHPAY_USER'),
  528. password = env('MONGODB_WASHPAY_PASSWORD'),
  529. source = env('MONGODB_WASHPAY_AUTH_DB'))
  530. for _item in _db["ArchivedDatabaseConfig"].find({"active": True}):
  531. _databaseInfo.append({
  532. "alias": _item.get("alias"),
  533. "name": _item.get("name"),
  534. "host": _item.get("host"),
  535. "port": _item.get("port"),
  536. "username": _item.get("username"),
  537. "password": _item.get("password"),
  538. "authentication_source": _item.get("authentication_source")
  539. })
  540. conns = map(lambda x: MongoCollection(**x), _databaseInfo)
  541. register_connections(*conns)
  542. init_archive_database()
  543. # 阿里云v3.0接口
  544. ALIPAY_CHANNEL_ID_V3 = '619191980501444609' # 主体ID
  545. ALIPAY_MEDIA_ID_V3 = '707566730122012672' # 媒体ID
  546. ALIPAY_IMP_CPM_V3 = '755796924816712705'
  547. ALIPAY_IMP_CPA_RUHUI_V3 = '773604407794823173'
  548. ALIPAY_IMP_CPA_LAXIN_V3 = '773837769738319876'