diff --git a/common/config/config.go b/common/config/config.go index 4113955485429aa63bc5cb00c75ec68020b2f7a3..6b7181ee81efbbea843c5679ec3c4c7070c080eb 100644 --- a/common/config/config.go +++ b/common/config/config.go @@ -34,276 +34,10 @@ type MysqlCodeConfig struct { //redis配置 type RedisConfig struct { - REDIS_HOST string - REDIS_PASSWORD string -} - -//jwt -type JwtConfig struct { - SECRET string - ISSUER_API string - ISSUER_MGR string - EXPIRE string -} - -//oss -type OssConfig struct { - OSS_ACCESS_KEY_ID string - OSS_ACCESS_KEY_SECRET string - OSS_ROLE_ARN string - OSS_END_POINT string - OSS_BUCKET string - OSS_CDN string - OSS_EXPIRED_TIME uint - OSS_STS_POINT string - OSS_STS string - OSS_STS_AES string -} - -// aws -type AwsConfig struct { - AWS_BUCKET string - AWS_CDN string - AWS_DIR string - CONFIDENCE float32 -} - -//APP -type AppConfig struct { - BIZ_SECRET string - WEB_SECRET string - OPERATION_SECRET string - SUPERUSER string - OFFICIAL_GROUP string - MINIMAL_VERSION_ANDROID int - MINIMAL_VERSION_IOS int - MODERATE string -} - -//googlePay 配置信息 -type GooglePayConfig struct { - JsonKey []byte -} - -//融云 -type RongyunConfig struct { - RONG_CLOUD_APP_KEY string - RONG_CLOUD_APP_SECRET string - RONG_CLOUD_URL string -} - -//腾讯云 -type TencentyunConfig struct { - TENCENTYUN_APP_ID int - TENCENTYUN_KEY string - TX_OVERSEA_APP_ID int - TX_OVERSEA_KEY string -} - -//emas -type EmasConfig struct { - ANDROID_APP_KEY string - ANDROID_APP_SECRET string - REGION_ID string - ACCESS_KEY_ID string - ACCESS_KEY_SECRET string - IOS_APP_KEY string - IOS_APP_SECRET string - APNS string -} - -//声网 -type AgoraConfig struct { - APP_ID string - APP_CERTIFICATE string - CUSTOMER_KEY string - CUSTOMER_SECRET string -} - -//匹配的配置 -type MatchConfig struct { - //一开始匹配的默认时长(单位:秒) - MATCH_FREE_TIME int - //一开始匹配的默认时长(单位:秒)VIP - MATCH_FREE_TIME_VIP int - //免费加时的时长 (单位:秒) - MATCH_ADD_TIME_FREE int - //匹配的声网的延迟加时(单位:秒) - MATCH_AGORA_TIME int - //匹配周期(单位:秒) - MATCH_CYCLE int - //过期时间(单位:秒),用户redisCache时间 - MATCH_USER_EXPIRES int - //pb match_success中, wait_duration 开始/下一个时间(单位:秒) - MATCH_SUCCESS_WAIT_DURATION uint32 - //pb match_success中, single_wait_time_in_sec 单方等待连接最长时间(单位:秒) - MATCH_SUCCESS_SINGLE_WAIT_TIME_IN_SEC uint32 - //pb match_success中, dual_wait_time_in_sec 双方连接中最长时间(单位:秒) - MATCH_SUCCESS_DUAL_WAIT_TIME_IN_SEC uint32 -} - -//在线 -type OnlineConfig struct { - //在线周期 - ONLINE_CYCLE int - //在线过期时间 - ONLINE_USER_EXPIRES int -} - -//1对1视频 -type VideoConfig struct { - VIDEO_DAILY_FREE_NUM int - //一开始匹配的默认时长(单位:秒) - VIDEO_FREE_TIME int - //一开始匹配的默认时长(单位:秒),vip - VIDEO_FREE_TIME_VIP int - //免费加时的时长 (单位:秒) - VIDEO_ADD_TIME_FREE int - //声网的延迟加时(单位:秒) - VIDEO_AGORA_TIME int - //1分钟视频,普通用户价格 - VIDEO_MINUTE_NORMAL int - //1分钟视频,公会用户价格 - VIDEO_MINUTE_UNION int -} - -//会话 -type SessionConfig struct { - SESSION_DAILY_FREE_NUM int - GUILD_USER_HELLO_DAY int -} - -type BeanConfig struct { - DIAMOND_BEAN_RATE int -} - -type H5Config struct { - USER_LEVEL string - GROUP_SUPPORT string - LUCKY_WHEEL string - WEEKLY_STAR string - WEEKLY_CP string - COUNTRY_STAR string - NOBLE_BUY_IOS string - NOBLE_BUY_IOS_AUDIT string - GUILD_DATA_URL string - MGR_GUILD_DATA_URL string - RANKING_PINK_DIAMOND_URL string - GROUP_POWER_GRADE_URL string - GROUP_POWER_ACT_URL string - SHEEP_H5_URL string -} - -type GroupImConfig struct { - MSG_SORT_EXPIRE int - MSG_SORT_SNAP int - MSG_PARALLEL_SIZE int -} - -type GradeConfig struct { - //魅力速度 - CHARM_SPEED_VIP int - //活跃 - ACTITY_SPEED_VIP int - //财富 - WEALTH_SPEED_VIP int -} - -type LikeConfig struct { - //喜欢人数 - I_LIKE_NUM int - //喜欢人数VIP - I_LIKE_NUM_VIP int - //喜欢人数贵族 - I_LIKE_NUM_NOBLE int -} - -type ApplePayConfig struct { - PASSWORD string -} - -type RegisterConfig struct { - IMEI_TOTAL int - IMEI_OAUTH int - ACCOUNT_IP int - ACCOUNT_IP_DURATION int -} - -type BannerConfig struct { - GIFT_BANNER_LEVEL1 int - GIFT_BANNER_LEVEL2 int - GIFT_BANNER_LEVEL3 int -} - -type DiamondConfig struct { - DAILY_LOGIN_IMEI_LIMIT int - DAILY_LOGIN_IP_LIMIT int - PRIVATE_GIFT_RETURN int - NEW_USER_INVITE_AWARD uint32 -} - -type LuckWheelConfig struct { - MINIMAL_PARTICIPANT int // 轮盘开始最少需要的参与人数 - WAIT_TIMELONG int // 等待轮盘开始的时长(分钟) - WINNER_DIAMOND_BANNER int //全服广播钻石门槛 -} - -//自定义主题 -type GroupCustomThemeConfig struct { - PIC_LIMIT int //图片数量 - DAY int //有效天数 -} - -type GiftConfig struct { - WALL_DIAMOND int //上礼物墙,礼物钻石金额 -} - -type DailyConfig struct { - LOGIN_COMMON int - LOGIN_VIP int -} - -type FruitTycoonConfig struct { - BIG_WINNER_THRESDHOLD uint - BIG_WINNER_LOW uint - BIG_WINNER_HIGH uint - POOL_RATIO uint32 - WATERMELON_RATIO uint32 -} - -type ActivityConfig struct { - COUNTRY_STAR_POOL_RATIO uint32 - COUNTRY_STAR_ORDINARY_RATIO uint32 -} - -type CheckoutConfig struct { - URL string - AUTHORIZATION string - H5 string - HILO_SECRET_KEY string -} - -type RiskControlConfig struct { - USER_QPS_LIMIT int64 - USER_URL_QPS_LIMIT int64 -} - -type PayerMaxConfig struct { - URL string - KEY string - MERCHANT_ID string - BIZ_TYPE string - VERSION string - FRONT_CALLBACK_URL string - SHOW_RESULT string - EXPIRE_TIME string - LANGUAGE string -} - -type PaypalConfig struct { - PAYPAL_CLIENT_ID string - PAYPAL_SECRET_ID string - RETURN_URL string + REDIS_HOST string + REDIS_PASSWORD string + REDIS_CLUSTER_HOST string + REDIS_CLUSTER_PASSWORD string } const ( @@ -313,43 +47,18 @@ const ( ) var mysqlConfigData MysqlConfig -var mysqlCodeConfigData MysqlCodeConfig var redisConfigData RedisConfig -var jwtConfigData JwtConfig -var appConfigData AppConfig -var ossConfigData OssConfig -var awsConfigData AwsConfig -var googlePayData GooglePayConfig -var rongyunData RongyunConfig -var tencentyunData TencentyunConfig -var emasData EmasConfig -var agora AgoraConfig -var matchData MatchConfig -var onlineData OnlineConfig -var sessionData SessionConfig -var videoData VideoConfig -var beanData BeanConfig -var h5Data H5Config -var groupImData GroupImConfig -var gradeData GradeConfig -var likeData LikeConfig -var applePayData ApplePayConfig -var registerData RegisterConfig -var bannerConfig BannerConfig -var diamondConfig DiamondConfig -var luckyWheelConfig LuckWheelConfig -var groupCustomThemeConfig GroupCustomThemeConfig -var giftConfig GiftConfig -var dailyConfig DailyConfig -var fruitTycoonConfig FruitTycoonConfig -var activityConfig ActivityConfig -var checkoutConfig CheckoutConfig -var riskControl RiskControlConfig -var payerMaxConfig PayerMaxConfig -var paypalConfig PaypalConfig var mode string var master bool +func GetConfigMysql() MysqlConfig { + return mysqlConfigData +} + +func GetConfigRedis() RedisConfig { + return redisConfigData +} + func init() { str, _ := os.Getwd() logrus.New().Info(str) @@ -383,171 +92,7 @@ func init() { logrus.New().Fatal(err) } - if err := conf.Section("DATABASECODE").MapTo(&mysqlCodeConfigData); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("REDIS").MapTo(&redisConfigData); err != nil { logrus.New().Fatal(err) } - - if err := conf.Section("JWT").MapTo(&jwtConfigData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("APP").MapTo(&appConfigData); err != nil { - logrus.New().Fatal(err) - } else { - logrus.New().Infof("APP: %+v", appConfigData) - } - - if err := conf.Section("OSS").MapTo(&ossConfigData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("AWS").MapTo(&awsConfigData); err != nil { - logrus.New().Fatal(err) - } else { - if awsConfigData.CONFIDENCE <= 50 { - awsConfigData.CONFIDENCE = 80 - } - logrus.New().Infof("AWS: %+v", awsConfigData) - } - - if err := conf.Section("RONGYUN").MapTo(&rongyunData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("TENCENTYUN").MapTo(&tencentyunData); err != nil { - logrus.New().Fatal(err) - } else { - logrus.New().Info("TENCENTYUN: ", tencentyunData) - } - - if err := conf.Section("EMAS").MapTo(&emasData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("AGORA").MapTo(&agora); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("MATCH").MapTo(&matchData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("ONLINE").MapTo(&onlineData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("SESSION").MapTo(&sessionData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("VIDEO").MapTo(&videoData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("BEAN").MapTo(&beanData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("H5").MapTo(&h5Data); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("GROUPIM").MapTo(&groupImData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("GRADE").MapTo(&gradeData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("LIKE").MapTo(&likeData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("APPLEPAY").MapTo(&applePayData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("REGISTER").MapTo(®isterData); err != nil { - logrus.New().Fatal(err) - } - - if err := conf.Section("BANNER").MapTo(&bannerConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("DIAMOND").MapTo(&diamondConfig); err != nil { - logrus.New().Fatal(err) - } else { - if diamondConfig.NEW_USER_INVITE_AWARD <= 0 { - diamondConfig.NEW_USER_INVITE_AWARD = 5000 - } - } - if err := conf.Section("LUCKY_WHEEL").MapTo(&luckyWheelConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("GROUP_CUSTOM_THEME").MapTo(&groupCustomThemeConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("GIFT").MapTo(&giftConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("DAILY").MapTo(&dailyConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("CHECKOUT").MapTo(&checkoutConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("PAYER_MAX").MapTo(&payerMaxConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("PAYPAL").MapTo(&paypalConfig); err != nil { - logrus.New().Fatal(err) - } - if err := conf.Section("FRUIT_TYCOON").MapTo(&fruitTycoonConfig); err != nil { - logrus.New().Fatal(err) - } else { - // 防止未配置或配置错误 - if fruitTycoonConfig.BIG_WINNER_LOW <= 0 { - fruitTycoonConfig.BIG_WINNER_LOW = 10000 - } - if fruitTycoonConfig.BIG_WINNER_HIGH <= 0 { - fruitTycoonConfig.BIG_WINNER_HIGH = 20000 - } - if fruitTycoonConfig.POOL_RATIO <= 0 || fruitTycoonConfig.POOL_RATIO > 100 { - fruitTycoonConfig.POOL_RATIO = 20 - } - if fruitTycoonConfig.WATERMELON_RATIO <= 0 || fruitTycoonConfig.WATERMELON_RATIO > 100 { - fruitTycoonConfig.WATERMELON_RATIO = 70 - } - logrus.New().Infof("FRUIT_TYCOON: %+v", fruitTycoonConfig) - } - - if err := conf.Section("ACTIVITY").MapTo(&activityConfig); err != nil { - logrus.New().Fatal(err) - } else { - // 防止未配置或配置错误 - if activityConfig.COUNTRY_STAR_POOL_RATIO <= 0 { - activityConfig.COUNTRY_STAR_POOL_RATIO = 20 - } - if activityConfig.COUNTRY_STAR_ORDINARY_RATIO <= 0 { - activityConfig.COUNTRY_STAR_ORDINARY_RATIO = 20 - } - logrus.New().Infof("ACTIVITY: %+v", activityConfig) - } - - if err := conf.Section("RISK_CONTROL").MapTo(&riskControl); err != nil { - logrus.New().Fatal(err) - } else { - if riskControl.USER_QPS_LIMIT <= 0 { - riskControl.USER_QPS_LIMIT = 128 - } - if riskControl.USER_URL_QPS_LIMIT <= 0 { - riskControl.USER_URL_QPS_LIMIT = 64 - } - logrus.New().Infof("RISK_CONTROL: %+v", riskControl) - } } diff --git a/debug.ini b/debug.ini index 696fef9c6411a031fdf849389161d0c75fa3b4d4..75879544b2fc71dfb8cc8bf782cb469e57a79ffc 100644 --- a/debug.ini +++ b/debug.ini @@ -11,166 +11,10 @@ MYSQL_DB=hilo_code [REDIS] REDIS_HOST=47.244.34.27:6379 REDIS_PASSWORD=8QZ9JD1zLvPR3yHf +REDIS_CLUSTER_HOST=47.244.34.27:6379 +REDIS_CLUSTER_PASSWORD=8QZ9JD1zLvPR3yHf [JWT] SECRET=hilo1632 ISSUER_API=hiloApi ISSUER_Mgr=hiloMgr -EXPIRE=240h -[APP] -MASTER=true -BIZ_SECRET=biz -WEB_SECRET=webHilo1258 -OPERATION_SECRET=operation1258236 -SUPERUSER=2701,2831,4504 -OFFICIAL_STAFF=2701,2831,3411,2511 -OFFICIAL_GROUP=@TGS#3FDW3MPHZ -MINIMAL_VERSION_ANDROID=22001 -MINIMAL_VERSION_IOS=22000 -MODERATE=TENCENT -[OSS] -OSS_ACCESS_KEY_ID=LTAIxdazV2pCuV3T -OSS_ACCESS_KEY_SECRET=zuAnreAXQ6vlAKnvvmolFLfb1N5w5S -OSS_ROLE_ARN=acs:ram::1509841556585969:role/aliyunosstokengeneratorrole -OSS_END_POINT=http://oss-accelerate.aliyuncs.com -OSS_BUCKET=starvoice -OSS_CDN=https://oss.chathot.me/ -OSS_EXPIRED_TIME=3600 -OSS_STS_POINT=me-east-1 -OSS_STS=sts-faceline-demo -OSS_STS_AES=484194d4d0f968a7 -[AWS] -AWS_BUCKET=starchat -AWS_CDN=https://image.whoisamy.shop/ -AWS_DIR=hilo/ -CONFIDENCE=80 -[RONGYUN] -RONG_CLOUD_APP_KEY=pvxdm17jpe9tr -RONG_CLOUD_APP_SECRET=rI4giiKWaBS4 -RONG_CLOUD_URL=https://api-sg01.ronghub.com -[TENCENTYUN] -TENCENTYUN_APP_ID=1400548270 -TENCENTYUN_KEY=321bd60f73096b059c7350f1cd97d51028850b34fa58c5c0d26bb4a19e783de8 -TX_OVERSEA_APP_ID=40000066 -TX_OVERSEA_KEY=3ab68ea5bddc8774d90b8c764ae71188914bd5fd06f30b28790c51e44ca7885c -[EMAS] -REGION_ID=cn-hangzhou -ACCESS_KEY_ID=LTAIdQZv5H1kNZp5 -ACCESS_KEY_SECRET=UnwY0ClDkqBMLwPx3OJJiLYyk9xYLO -ANDROID_APP_KEY=30250713 -ANDROID_APP_SECRET=cae7b9a9d3e54577d2c3b60bf6d23047 -IOS_APP_KEY=30790728 -IOS_APP_SECRET=4fd69ca084c67d4b5a8d15452f0af26a -APNS=DEV -[AGORA] -APP_ID=fc3e087f701b4f788099e1924c3cc7b0 -APP_CERTIFICATE=ff29c100a613433db82324e8411eabc8 -CUSTOMER_KEY=6b132c0ff7164560a2bc53fda06ea85a -CUSTOMER_SECRET=eedad2cd16d24834990d5450ace9f1ce -CALLBACK_SECRET=n_ZizS_N8 -[CHECKOUT] -AUTHORIZATION=sk_test_9b5e771c-5a3f-4a8d-a4da-31b19bd43d83 -URL=https://api.sandbox.checkout.com/hosted-payments -H5=https://test.chathot.me/action/hiloHtml/22_05_30_recharge/topup.html -HILO_SECRET_KEY=sk_test_dfbaa3b6-135d-4376-9996-2089b7d8a086 -[MATCH] -MATCH_FREE_TIME=60 -MATCH_FREE_TIME_VIP=60 -MATCH_ADD_TIME_FREE=90 -MATCH_AGORA_TIME=30 -MATCH_CYCLE=8 -MATCH_USER_EXPIRES=480 -MATCH_SUCCESS_WAIT_DURATION=10 -MATCH_SUCCESS_SINGLE_WAIT_TIME_IN_SEC=12 -MATCH_SUCCESS_DUAL_WAIT_TIME_IN_SEC=15 -[ONLINE] -ONLINE_CYCLE=600 -ONLINE_USER_EXPIRES=259200 -[VIDEO] -VIDEO_DAILY_FREE_NUM=20 -VIDEO_FREE_TIME=60 -VIDEO_FREE_TIME_VIP=300 -VIDEO_ADD_TIME_FREE=60 -VIDEO_AGORA_TIME=30 -VIDEO_MINUTE_NORMAL=30 -VIDEO_MINUTE_UNION=30 -[SESSION] -SESSION_DAILY_FREE_NUM=50 -GUILD_USER_HELLO_DAY=30 -[BEAN] -DIAMOND_BEAN_RATE=90 -[GEM] -DIAMOND_GEM_RATE=10 -[H5] -USER_LEVEL=http://test.chathot.me/action/hiloHtml/hiloUserLevel/index.html -GROUP_SUPPORT=http://test.chathot.me/action/activityhtml/21_12_06/page.html -LUCKY_WHEEL=https://test.chathot.me/action/activityhtml/21_12_30/page.html -WEEKLY_STAR=http://test.chathot.me/action/hiloHtml/lxt_h5/page.html -WEEKLY_CP=https://test.chathot.me/action/hiloHtml/Valentines_22_1_18/page.html -COUNTRY_STAR=https://test.chathot.me/action/hiloHtml/22_08_18_nation_star/page.html -NOBLE_BUY_IOS=https://test.chathot.me/action/hiloHtml/22_05_26_buy_nobility/page.html -NOBLE_BUY_IOS_AUDIT=https://test.chathot.me/action/hiloHtml/lxt_h5/page.html -GUILD_DATA_URL=https://test.chathot.me/action/hiloHtml/22_10_18_app_data_coins/index.html -MGR_GUILD_DATA_URL=https://test.chathot.me/action/hiloHtml/22_10_18_app_data_coins/union.html -RANKING_PINK_DIAMOND_URL=https://test.chathot.me/action/activitiesPage/2022_10_17HiloLiveH5/index.html -GROUP_POWER_GRADE_URL=https://test.chathot.me/action/hiloHtml/2023Activity/2023_3_21FamilyLevel/index.html -GROUP_POWER_ACT_URL= -SHEEP_H5_URL=https://gzds.vip/yangyang?game_id=hilo_sheep -ID_URL=https://h5.whoisamy.shop/action/hiloHtml/new_upgrade/index.html -[GROUPIM] -MSG_SORT_EXPIRE=21600 -MSG_SORT_SNAP=300 -MSG_PARALLEL_SIZE=10 -[GRADE] -CHARM_SPEED_VIP=15 -ACTITY_SPEED_VIP=15 -WEALTH_SPEED_VIP=15 -[LIKE] -I_LIKE_NUM=30 -I_LIKE_NUM_VIP=300 -I_LIKE_NUM_NOBLE=1000 -[APPLEPAY] -PASSWORD=38702750a05c4cb09c9d6ca646835634 -[REGISTER] -IMEI_TOTAL=3 -IMEI_OAUTH=2 -ACCOUNT_IP=100 -ACCOUNT_IP_DURATION=21600 -[BANNER] -GIFT_BANNER_LEVEL1=500 -GIFT_BANNER_LEVEL2=2000 -GIFT_BANNER_LEVEL3=5000 -[DIAMOND] -DAILY_LOGIN_IMEI_LIMIT=2 -DAILY_LOGIN_IP_LIMIT=5 -PRIVATE_GIFT_RETURN=10 -[LUCKY_WHEEL] -MINIMAL_PARTICIPANT=2 -WAIT_TIMELONG=10 -WINNER_DIAMOND_BANNER=10 -[GROUP_CUSTOM_THEME] -PIC_LIMIT=5 -DAY=10 -[GIFT] -WALL_DIAMOND=10 -[DAILY] -LOGIN_COMMON=5 -LOGIN_VIP=300 -[FRUIT_TYCOON] -POOL_RATIO=80 -WATERMELON_RATIO=24 -[RISK_CONTROL] -USER_QPS_LIMIT=60 -[PAYER_MAX] -URL=https://pay-gate-uat.payermax.com/aggregate-pay-gate/api/gateway -KEY=d50d149a883b8bb6 -MERCHANT_ID=SP11018326 -BIZ_TYPE=CUSTOMIZE -VERSION=2.3 -FRONT_CALLBACK_URL=https://www.hiloconn.com -SHOW_RESULT=1 -EXPIRE_TIME=1800 -LANGUAGE=en -[PAYPAL] -PAYPAL_CLIENT_ID=AQCXHyXFhNLNWoorcj3Du0J4WwBDy25DoQ7SZKNKRe4PNY0BLpeCzV_zm1HKwAvd7reWeOBCte-vMakM -PAYPAL_SECRET_ID=EDBTK99v6wXhGXhDqDTOksK2j8NPAfJKT-wRTqTrNGrUmn8xsjkrVcO_xSvMVR6CB2bN74rGl_AFm098 -RETURN_URL=https://test.apiv1.faceline.live/v1/callback/paypal \ No newline at end of file +EXPIRE=240h \ No newline at end of file diff --git a/local.ini b/local.ini index 65d129829059055cba01617aaed3c857c77bbbc0..75879544b2fc71dfb8cc8bf782cb469e57a79ffc 100644 --- a/local.ini +++ b/local.ini @@ -11,159 +11,10 @@ MYSQL_DB=hilo_code [REDIS] REDIS_HOST=47.244.34.27:6379 REDIS_PASSWORD=8QZ9JD1zLvPR3yHf +REDIS_CLUSTER_HOST=47.244.34.27:6379 +REDIS_CLUSTER_PASSWORD=8QZ9JD1zLvPR3yHf [JWT] SECRET=hilo1632 ISSUER_API=hiloApi ISSUER_Mgr=hiloMgr -EXPIRE=240h -[APP] -MASTER=false -BIZ_SECRET=biz -WEB_SECRET=webHilo1258 -OPERATION_SECRET=operation1258236 -SUPERUSER=2701,2831 -OFFICIAL_STAFF=2701,2831 -OFFICIAL_GROUP=@TGS#3NC2ATRHS,@TGS#33W3KNLHK -MINIMAL_VERSION_ANDROID=212 -MINIMAL_VERSION_IOS=100 -MODERATE=AWS -[OSS] -OSS_ACCESS_KEY_ID=LTAIxdazV2pCuV3T -OSS_ACCESS_KEY_SECRET=zuAnreAXQ6vlAKnvvmolFLfb1N5w5S -OSS_ROLE_ARN=acs:ram::1509841556585969:role/aliyunosstokengeneratorrole -OSS_END_POINT=http://oss-accelerate.aliyuncs.com -OSS_BUCKET=starvoice -OSS_CDN=https://oss.chathot.me/ -OSS_EXPIRED_TIME=3600 -OSS_STS_POINT=me-east-1 -OSS_STS=sts-faceline-demo -OSS_STS_AES=484194d4d0f968a7 -[AWS] -AWS_BUCKET=starchat -AWS_CDN=https://image.whoisamy.shop/ -AWS_DIR=hilo/ -CONFIDENCE=80 -[RONGYUN] -RONG_CLOUD_APP_KEY=pvxdm17jpe9tr -RONG_CLOUD_APP_SECRET=rI4giiKWaBS4 -RONG_CLOUD_URL=https://api-sg01.ronghub.com -[TENCENTYUN] -TENCENTYUN_APP_ID=1400548270 -TENCENTYUN_KEY=321bd60f73096b059c7350f1cd97d51028850b34fa58c5c0d26bb4a19e783de8 -TX_OVERSEA_APP_ID=40000066 -TX_OVERSEA_KEY=3ab68ea5bddc8774d90b8c764ae71188914bd5fd06f30b28790c51e44ca7885c -[EMAS] -REGION_ID=cn-hangzhou -ACCESS_KEY_ID=LTAI4FhNPzxdzD4w6bHirL9Z -ACCESS_KEY_SECRET=OQvUJpXDrjGi3g1F2aHiAIFWIvLdbP -ANDROID_APP_KEY=30250713 -ANDROID_APP_SECRET=cae7b9a9d3e54577d2c3b60bf6d23047 -IOS_APP_KEY=30240346 -IOS_APP_SECRET=57f33ab9ca6a957a8c659f2b0b6d1205 -APNS=DEV -[AGORA] -APP_ID=fc3e087f701b4f788099e1924c3cc7b0 -APP_CERTIFICATE=ff29c100a613433db82324e8411eabc8 -CUSTOMER_KEY=6b132c0ff7164560a2bc53fda06ea85a -CUSTOMER_SECRET=eedad2cd16d24834990d5450ace9f1ce -CALLBACK_SECRET=n_ZizS_N8 -[CHECKOUT] -AUTHORIZATION=sk_test_9b5e771c-5a3f-4a8d-a4da-31b19bd43d83 -URL=https://api.sandbox.checkout.com/hosted-payments -H5=http://test.chathot.me/action/hiloHtml/22_05_30_recharge/topup.html -HILO_SECRET_KEY=sk_test_dfbaa3b6-135d-4376-9996-2089b7d8a086 -[MATCH] -MATCH_FREE_TIME=60 -MATCH_FREE_TIME_VIP=300 -MATCH_ADD_TIME_FREE=90 -MATCH_AGORA_TIME=30 -MATCH_CYCLE=8 -MATCH_USER_EXPIRES=480 -MATCH_SUCCESS_WAIT_DURATION=10 -MATCH_SUCCESS_SINGLE_WAIT_TIME_IN_SEC=12 -MATCH_SUCCESS_DUAL_WAIT_TIME_IN_SEC=15 -[ONLINE] -ONLINE_CYCLE=600 -ONLINE_USER_EXPIRES=259200 -[VIDEO] -VIDEO_DAILY_FREE_NUM=20 -VIDEO_FREE_TIME=60 -VIDEO_FREE_TIME_VIP=300 -VIDEO_ADD_TIME_FREE=60 -VIDEO_AGORA_TIME=30 -VIDEO_MINUTE_NORMAL=1000 -VIDEO_MINUTE_UNION=2000 -[SESSION] -SESSION_DAILY_FREE_NUM=50 -[BEAN] -DIAMOND_BEAN_RATE=90 -[GEM] -DIAMOND_GEM_RATE=10 -[H5] -USER_LEVEL=http://test.chathot.me/action/activityhtml/hiloUserLevel/index.html -GROUP_SUPPORT=http://test.chathot.me/action/activityhtml/21_12_06/page.html -LUCKY_WHEEL=https://h5.whoisamy.shop/action/activityhtml/21_12_30/page.html -NOBLE_BUY_IOS=https://h5.whoisamy.shop/action/hiloHtml/lxt_h5/page.html -NOBLE_BUY_IOS_AUDIT=https://h5.whoisamy.shop/action/hiloHtml/lxt_h5/page.html -GROUP_POWER_GRADE_URL=https://test.chathot.me/action/hiloHtml/2023Activity/2023_3_21FamilyLevel/index.html -GROUP_POWER_ACT_URL=https://www.baidu.com -SHEEP_H5_URL=https://gzds.vip/yangyang?game_id=hilo_sheep -ID_URL=https://h5.whoisamy.shop/action/hiloHtml/new_upgrade/index.html -[GROUPIM] -MSG_SORT_EXPIRE=43200 -MSG_SORT_SNAP=300 -[GRADE] -CHARM_SPEED_VIP=15 -ACTITY_SPEED_VIP=15 -WEALTH_SPEED_VIP=15 -[LIKE] -I_LIKE_NUM=30 -I_LIKE_NUM_VIP=100 -I_LIKE_NUM_NOBLE=1000 -[APPLEPAY] -PASSWORD=38702750a05c4cb09c9d6ca646835634 -[REGISTER] -IMEI_TOTAL=3 -IMEI_OAUTH=2 -ACCOUNT_IP=100 -ACCOUNT_IP_DURATION=21600 -[BANNER] -GIFT_BANNER_LEVEL1=100 -GIFT_BANNER_LEVEL2=2000 -GIFT_BANNER_LEVEL3=5000 -[DIAMOND] -DAILY_LOGIN_IMEI_LIMIT=200 -DAILY_LOGIN_IP_LIMIT=5 -PRIVATE_GIFT_RETURN=1440 -NEW_USER_INVITE_AWARD=5000 -[LUCKY_WHEEL] -MINIMAL_PARTICIPANT=2 -WAIT_TIMELONG=10 -WINNER_DIAMOND_BANNER=100 -[GROUP_CUSTOM_THEME] -PIC_LIMIT=5 -DAY=10 -[GIFT] -WALL_DIAMOND=10 -[DAILY] -LOGIN_COMMON=5 -LOGIN_VIP=300 -[DAILY] -LOGIN_COMMON=5 -LOGIN_VIP=300 -[FRUIT_TYCOON] -POOL_RATIO=20 -WATERMELON_RATIO=70 -[ACTIVITY] -COUNTRY_STAR_POOL_RATIO=20 -COUNTRY_STAR_ORDINARY_RATIO=20 -[PAYER_MAX] -URL=https://pay-gate-uat.payermax.com/aggregate-pay-gate/api/gateway -KEY=d50d149a883b8bb6 -MERCHANT_ID=SP11018326 -BIZ_TYPE=CUSTOMIZE -VERSION=2.3 -FRONT_CALLBACK_URL=https://www.hiloconn.com -SHOW_RESULT=1 -EXPIRE_TIME=1800 -LANGUAGE=en \ No newline at end of file +EXPIRE=240h \ No newline at end of file diff --git a/main.go b/main.go index e38683e28173066985b9bb174024542751b8732d..5e2a97ae9fb87ff54be6f095de5c8fccc728ab4f 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "context" "flag" "fmt" + "gorm.io/gorm/schema" "net" "net/http" "net/url" @@ -20,6 +21,7 @@ import ( "gorm.io/gorm/logger" "hilo-userCenter/common" + appConfig "hilo-userCenter/common/config" "hilo-userCenter/common/dingding" "hilo-userCenter/common/mylogrus" "hilo-userCenter/manager" @@ -28,10 +30,8 @@ import ( ) const ( - port = 50040 - default_redis_address = "47.244.34.27:6379" - default_redis_password = "8QZ9JD1zLvPR3yHf" - redis_section = 1 + port = 50040 + redis_section = 1 ) // 控制异步消息协程 @@ -39,11 +39,13 @@ const ( monitorLength = 3500 // 队列告警数量 kickChanSize = 500 broadcastChanSize = 3500 + areacastChanSize = 3500 ) var ( kickChan chan KickChanMsg broadcastChan chan BroadcastChanMsg + areacastChan chan AreaChanMsg ) type KickChanMsg struct { @@ -57,14 +59,18 @@ type BroadcastChanMsg struct { in *userCenter.BroadcastMessage } +type AreaChanMsg struct { + ProxyAddr string + UserIds []uint64 + in *userCenter.AreaMessage +} + var ( userManager *manager.UserManager = nil termManager *manager.TerminalManager = nil roomManager *manager.RoomManager = nil ) -var logDir = "/var/log/hilo/" - type server struct { userCenter.UnimplementedUserServer } @@ -238,6 +244,56 @@ func (s *server) Broadcast(ctx context.Context, in *userCenter.BroadcastMessage) return &userCenter.BroadcastMessageRsp{FailedUids: failed}, nil } +func (s *server) Areacast(ctx context.Context, in *userCenter.AreaMessage) (*userCenter.AreaMessageRsp, error) { + var failed []uint64 + terminals := termManager.GetAll() + if terminals != nil { + var uids []uint64 + for uidStr := range *terminals { + if uid, _ := strconv.ParseUint(uidStr, 10, 64); uid > 0 { + uids = append(uids, uid) + } + } + // 处理分区用户 + areaUids := userManager.GetAreaUsers(uids, int8(in.Area)) + if len(areaUids) <= 0 { + return &userCenter.AreaMessageRsp{FailedUids: failed}, nil + } + m := make(map[string][]uint64, 0) + for uid := range areaUids { + ok := false + addr := userManager.GetUser(uid) + if addr != nil { + if _, ok := m[*addr]; !ok { + m[*addr] = make([]uint64, 0) + } + m[*addr] = append(m[*addr], uid) + ok = true + } else { + mylogrus.MyLog.Errorf("Unknown user %d\n", uid) + } + if !ok { + failed = append(failed, uid) + } + } + for addr, users := range m { + const sendBatchSize = 5 + for i := 0; i < len(users); i += sendBatchSize { + end := i + sendBatchSize + if end > len(users) { + end = len(users) + } + areacastChan <- AreaChanMsg{ + ProxyAddr: addr, + UserIds: users[i:end], + in: in, + } + } + } + } + return &userCenter.AreaMessageRsp{FailedUids: failed}, nil +} + func (s *server) Transmit(ctx context.Context, in *userCenter.BizMessage) (*userCenter.BizMessageRsp, error) { mylogrus.MyLog.Infof("Transmiting msgType = %d, uid = %d, payLoad: %s\n", in.MsgType, in.Uid, in.PayLoad) @@ -312,6 +368,22 @@ func realBroadcast(addr string, uids []uint64, msg *userCenter.BroadcastMessage) } } +func realAreacast(addr string, uids []uint64, msg *userCenter.AreaMessage) { + for _, uid := range uids { + client := manager.UserProxyMgr.MakeClient(addr) + if client == nil { + mylogrus.MyLog.Errorf("Failed in making client for %d, %s\n", uid, addr) + } else { + + toRouterClient := userCenter.NewRouterClient(client) + status, err := routeMessage(toRouterClient, uid, msg.MsgType, msg.PayLoad) + if err != nil { + mylogrus.MyLog.Errorf("routeMessage uid = %d, msgType = %d, status = %d, %v", uid, msg.MsgType, status, err) + } + } + } +} + func routeMessage(c userCenter.RouterClient, uid uint64, msgType uint32, data []byte) (uint32, error) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*3) defer cancel() @@ -437,7 +509,7 @@ func selfCheck() { } } -type HiloConfig struct { +type HiloConfigs struct { Name string `gorm:"primary_key"` Value string } @@ -454,53 +526,15 @@ func main() { go registerToConsul(client, false) go selfCheck() - redisAddress := default_redis_address - redisPassword := default_redis_password - mysqHost, mysqlUsername, mysqlPassword, mysqlDb := "47.244.34.27:3306", "root", "yX0jPAhO0I4s2zlA", "hilo" - kv := client.KV() - if kv != nil { - p, _, err := kv.Get("redis_address", nil) - if err == nil && p != nil { - redisAddress = string(p.Value) - } - p, _, err = kv.Get("redis_password", nil) - if err == nil && p != nil { - redisPassword = string(p.Value) - } - p, _, err = kv.Get("mysql_host", nil) - if err == nil && p != nil { - mysqHost = string(p.Value) - } - p, _, err = kv.Get("mysql_username", nil) - if err == nil && p != nil { - mysqlUsername = string(p.Value) - } - p, _, err = kv.Get("mysql_password", nil) - if err == nil && p != nil { - mysqlPassword = string(p.Value) - } - p, _, err = kv.Get("mysql_db", nil) - if err == nil && p != nil { - mysqlDb = string(p.Value) - } - } - mylogrus.MyLog.Infof("Db config mysqHost = %v , mysqlUsername = %v, mysqlPassword = %v ,mysqlDb = %v redisAddress :%v,redisPassword:%v", - mysqHost, mysqlUsername, mysqlPassword, mysqlDb, redisAddress, redisPassword) - - if mysqHost == "" || mysqlUsername == "" || mysqlPassword == "" || mysqlDb == "" { - mylogrus.MyLog.Fatalln("Db config is missing.") - } - // init redis rdb := redis.NewClient(&redis.Options{ - Addr: redisAddress, - Password: redisPassword, + Addr: appConfig.GetConfigRedis().REDIS_HOST, + Password: appConfig.GetConfigRedis().REDIS_PASSWORD, DB: redis_section, }) if rdb == nil { - mylogrus.MyLog.Fatalf("failed to connect redis %s\n", redisAddress) + mylogrus.MyLog.Fatalf("failed to connect redis %s\n", appConfig.GetConfigRedis().REDIS_HOST) } - result, err := rdb.Ping(context.Background()).Result() if err != nil { mylogrus.MyLog.Fatal(err) @@ -512,9 +546,12 @@ func main() { options := "?charset=utf8mb4&parseTime=True&loc=Local&time_zone=" + url.QueryEscape("'+8:00'") fmt.Println("options = ", options) - dsn := mysqlUsername + ":" + mysqlPassword + "@(" + mysqHost + ")/" + mysqlDb + dsn := appConfig.GetConfigMysql().MYSQL_USERNAME + ":" + appConfig.GetConfigMysql().MYSQL_PASSWORD + "@(" + appConfig.GetConfigMysql().MYSQL_HOST + ")/" + appConfig.GetConfigMysql().MYSQL_DB db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), + NamingStrategy: schema.NamingStrategy{ + SingularTable: true, + }, }) if err != nil { mylogrus.MyLog.Fatal("mysql connect error %v", err) @@ -522,7 +559,7 @@ func main() { mylogrus.MyLog.Infof("mysql connect success") } - var jwtConfig = HiloConfig{} + var jwtConfig = HiloConfigs{} db.First(&jwtConfig, "name = 'jwt_secret'") if len(jwtConfig.Value) == 0 { mylogrus.MyLog.Fatalln("Empty jwt secret") @@ -533,7 +570,15 @@ func main() { userManager = &manager.UserManager{ Ctx: context.Background(), RedisClient: rdb, + MysqlDB: db, } + go func() { + for { + // 同步区域 + userManager.SyncArea() + time.Sleep(time.Minute * 15) + } + }() termManager = &manager.TerminalManager{ Ctx: context.Background(), RedisClient: rdb, @@ -543,8 +588,6 @@ func main() { RedisClient: rdb, } - mylogrus.MyLog.Infof("Connected to Redis %s\n", redisAddress) - go func() { ticker := time.NewTicker(time.Second * 30) defer ticker.Stop() @@ -569,6 +612,7 @@ func main() { // 初始化协程chan kickChan = make(chan KickChanMsg, kickChanSize) broadcastChan = make(chan BroadcastChanMsg, broadcastChanSize) + areacastChan = make(chan AreaChanMsg, areacastChanSize) go check() // 检查长度 for i := 0; i < kickChanSize; i++ { go func(n int) { @@ -580,6 +624,11 @@ func main() { broadcast(n) }(i) } + for i := 0; i < areacastChanSize; i++ { + go func(n int) { + areacast(n) + }(i) + } fmt.Println("Go RPC listening on ", port) lis, err := net.Listen("tcp4", ":"+strconv.Itoa(port)) @@ -622,6 +671,12 @@ func broadcast(n int) { } } +func areacast(n int) { + for msg := range areacastChan { + realAreacast(msg.ProxyAddr, msg.UserIds, msg.in) + } +} + var lastDingTime time.Time var dingIntervalMin float64 = 5 // 5min 告警间隔 @@ -632,11 +687,11 @@ func check() { for { select { case <-tick.C: - l, l2 := len(kickChan), len(broadcastChan) - if l >= monitorLength || l2 >= monitorLength { + l, l2, l3 := len(kickChan), len(broadcastChan), len(areacastChan) + if l >= monitorLength || l2 >= monitorLength || l3 >= monitorLength { if time.Now().Sub(lastDingTime).Minutes() > dingIntervalMin { go func() { - if sErr := dingding.SendDingRobot(dingding.ROBOTWEBHOOK, fmt.Sprintf("userCenter通知延迟,队列长度:kickChan:%d,broadcastChan:%d", l, l2), true); sErr != nil { + if sErr := dingding.SendDingRobot(dingding.ROBOTWEBHOOK, fmt.Sprintf("userCenter通知延迟,队列长度:kickChan:%d,broadcastChan:%d,areacastChan:%d", l, l2, l3), true); sErr != nil { mylogrus.MyLog.Errorf("dingding msg fail:%v", sErr) } else { lastDingTime = time.Now() diff --git a/manager/userManager.go b/manager/userManager.go index 9e40ceea6d2fd1ff25429bc6b30f74ff5cee48c5..616fb2a07c873e152a26ee9cc28635a8d4d553c8 100644 --- a/manager/userManager.go +++ b/manager/userManager.go @@ -3,8 +3,11 @@ package manager import ( "context" "github.com/go-redis/redis/v8" + "gorm.io/gorm" + "hilo-userCenter/common/mylogrus" "log" "strconv" + "sync" ) const ( @@ -14,6 +17,7 @@ const ( type UserManager struct { Ctx context.Context RedisClient *redis.Client + MysqlDB *gorm.DB } func (m *UserManager) GetUser(uid uint64) *string { @@ -63,3 +67,71 @@ func (m *UserManager) GetAll() *map[string]string { return &result } } + +// 国家到area映射 country->area 1:阿语 2:非阿语 +var countryArea sync.Map + +type ResCountry struct { + Name string + Area int8 +} + +// 定期同步国家到area映射 +func (m *UserManager) SyncArea() { + var rows []ResCountry + if err := m.MysqlDB.Model(ResCountry{}).Find(&rows).Error; err != nil { + mylogrus.MyLog.Errorf("SyncArea fail:%v", err) + return + } + for _, v := range rows { + countryArea.Store(v.Name, v.Area) + } +} + +// 获取地区 +func (m *UserManager) GetArea(country string) (area int8) { + area = 1 // 默认阿语 + if data, ok := countryArea.Load(country); ok { + return data.(int8) + } + return area +} + +type UserTinyArea struct { + ID uint64 + Avatar string + ExternalId string + Sex uint8 + Code string + Country string + Area int8 `gorm:"-"` +} + +// 获取指定区域用户 +func (m *UserManager) GetAreaUsers(userIds []uint64, area int8) map[uint64]UserTinyArea { + res := make(map[uint64]UserTinyArea) + // 从db中读,暂时不缓存(几千个) + var users []UserTinyArea + if err := m.MysqlDB.Table("user"). + Select("id,external_id,sex,code,country,avatar"). + Where("id IN (?)", userIds).Find(&users).Error; err != nil { + mylogrus.MyLog.Errorf("GetUserArea fail:%v", err) + return res + } + for _, u := range users { + a := m.GetArea(u.Country) + if a != area { + continue + } + res[u.ID] = UserTinyArea{ + ID: u.ID, + ExternalId: u.ExternalId, + Sex: u.Sex, + Code: u.Code, + Country: u.Country, + Area: a, + Avatar: u.Avatar, + } + } + return res +} diff --git a/protocol/userCenter.proto b/protocol/userCenter.proto index d827270d8c6193829bfff50b036d7007417cf15c..c20e730d6f4ec753647f60d7910c1205205b7e76 100644 --- a/protocol/userCenter.proto +++ b/protocol/userCenter.proto @@ -122,6 +122,16 @@ message GetLastRoomHeartbeatMessageResp { int64 timestamp = 1; } +message AreaMessage { + int32 area = 1; + uint32 msgType = 2; + bytes payLoad = 3; +} + +message AreaMessageRsp { + repeated uint64 failedUids = 1; +} + service Router { rpc route(RouteMessage) returns (RouteMessageRsp) {} rpc kickUser(KickMessage) returns (KickMessageRsp) {} @@ -132,6 +142,7 @@ service User { rpc logout(LogoutMessage) returns (LogoutMessageRsp) {} rpc multicast(MulticastMessage) returns (MulticastMessageRsp) {} rpc broadcast(BroadcastMessage) returns (BroadcastMessageRsp) {} + rpc areacast(AreaMessage) returns (AreaMessageRsp) {} rpc transmit(BizMessage) returns (BizMessageRsp) {} rpc enterRoom(EnterRoomMessage) returns (EnterRoomMessageRsp) {} rpc leaveRoom(LeaveRoomMessage) returns (LeaveRoomMessageRsp) {} diff --git a/release.ini b/release.ini index 5897408046dcb6cff6e8a098d0ef2ab8c0d6de4e..9c743c50701559201e01575f4287366bb81173a6 100644 --- a/release.ini +++ b/release.ini @@ -11,174 +11,10 @@ MYSQL_DB=hilo_code [REDIS] REDIS_HOST=r-eb3btxn8vfdsuwdbuf.redis.dubai.rds.aliyuncs.com:6379 REDIS_PASSWORD= +REDIS_CLUSTER_HOST=r-eb3yt6k8zgxs62kjjs.redis.dubai.rds.aliyuncs.com:6379 +REDIS_CLUSTER_PASSWORD= [JWT] SECRET=hilo1504 ISSUER_API=hiloApi ISSUER_Mgr=hiloMgr -EXPIRE=720h -[APP] -MASTER=true -BIZ_SECRET=biz -OPERATION_SECRET=operation1258236 -WEB_SECRET=webHilo1258 -SUPERUSER=28201,23951,133101,41,2020531,955271,1575531 -OFFICIAL_STAFF=133101,435731,486461,41 -OFFICIAL_GROUP=@TGS#33W3KNLHK,@TGS#3XA5RJ5HH,@TGS#3O6PKBTH6 -MINIMAL_VERSION_ANDROID=22600 -MINIMAL_VERSION_IOS=22600 -ROOM_MODE=AVChatRoom -MODERATE=TENCENT -[OSS] -OSS_ACCESS_KEY_ID=LTAIxdazV2pCuV3T -OSS_ACCESS_KEY_SECRET=zuAnreAXQ6vlAKnvvmolFLfb1N5w5S -OSS_ROLE_ARN=acs:ram::1509841556585969:role/aliyunosstokengeneratorrole -OSS_END_POINT=https://oss-accelerate.aliyuncs.com -OSS_BUCKET=starvoice -OSS_CDN=https://oss.chathot.me/ -OSS_EXPIRED_TIME=3600 -OSS_STS_POINT=me-east-1 -OSS_STS=sts-faceline-demo -OSS_STS_AES=484194d4d0f968a7 -[AWS] -AWS_BUCKET=starchat -AWS_CDN=https://image.whoisamy.shop/ -AWS_DIR=hilo/ -CONFIDENCE=80 -[RONGYUN] -RONG_CLOUD_APP_KEY=uwd1c0sxu5t41 -RONG_CLOUD_APP_SECRET=vo9djozyBl9bZ -RONG_CLOUD_URL=https://api-sg01.ronghub.com -[TENCENTYUN] -TENCENTYUN_APP_ID=1400487464 -TENCENTYUN_KEY=cb4c1f2e3398a88e0e9468b403f671e60d66a564df86f7db925c6ab4f18b66e5 -TX_OVERSEA_APP_ID=40000066 -TX_OVERSEA_KEY=3ab68ea5bddc8774d90b8c764ae71188914bd5fd06f30b28790c51e44ca7885c -[EMAS] -REGION_ID=cn-hangzhou -ACCESS_KEY_ID=LTAIdQZv5H1kNZp5 -ACCESS_KEY_SECRET=UnwY0ClDkqBMLwPx3OJJiLYyk9xYLO -ANDROID_APP_KEY=30774987 -ANDROID_APP_SECRET=297a0f231f1286a2de9aab097cc8ff5c -IOS_APP_KEY=30790728 -IOS_APP_SECRET=4fd69ca084c67d4b5a8d15452f0af26a -APNS=PRODUCT -[AGORA] -APP_ID=6291d069123642d9929a49c734c50719 -APP_CERTIFICATE=d5de40350aa54e60bcdce90c71e9598a -CUSTOMER_KEY=6b132c0ff7164560a2bc53fda06ea85a -CUSTOMER_SECRET=eedad2cd16d24834990d5450ace9f1ce -[CHECKOUT] -AUTHORIZATION=sk_fca6e213-b7df-4bd7-99f4-7c0a9f7c778c -URL=https://api.checkout.com/hosted-payments -H5=https://h5.whoisamy.shop/action/hiloHtml/22_05_30_recharge/topup.html -HILO_SECRET_KEY=sk_26806bf4-e6e3-45e2-a093-c72c5b53eaf5 -[MATCH] -MATCH_FREE_TIME=60 -MATCH_FREE_TIME_VIP=60 -MATCH_ADD_TIME_FREE=90 -MATCH_AGORA_TIME=30 -MATCH_CYCLE=8 -MATCH_USER_EXPIRES=480 -MATCH_SUCCESS_WAIT_DURATION=10 -MATCH_SUCCESS_SINGLE_WAIT_TIME_IN_SEC=12 -MATCH_SUCCESS_DUAL_WAIT_TIME_IN_SEC=15 -[ONLINE] -ONLINE_CYCLE=600 -ONLINE_USER_EXPIRES=259200 -[VIDEO] -VIDEO_DAILY_FREE_NUM=20 -VIDEO_FREE_TIME=60 -VIDEO_FREE_TIME_VIP=300 -VIDEO_ADD_TIME_FREE=60 -VIDEO_AGORA_TIME=30 -VIDEO_MINUTE_NORMAL=60 -VIDEO_MINUTE_UNION=60 -[SESSION] -SESSION_DAILY_FREE_NUM=50 -GUILD_USER_HELLO_DAY=30 -[BEAN] -DIAMOND_BEAN_RATE=90 -[GEM] -DIAMOND_GEM_RATE=10 -[H5] -USER_LEVEL=https://h5.whoisamy.shop/action/hiloHtml/hiloUserLevel/index.html -GROUP_SUPPORT=https://h5.whoisamy.shop/action/activityhtml/21_12_06/page.html -LUCKY_WHEEL=https://h5.whoisamy.shop/action/activityhtml/21_12_30/page.html -WEEKLY_STAR=https://h5.whoisamy.shop/action/hiloHtml/lxt_h5/page.html -WEEKLY_CP=https://h5.whoisamy.shop/action/hiloHtml/Valentines_22_1_18/page.html -COUNTRY_STAR=https://h5.whoisamy.shop/action/hiloHtml/22_08_18_nation_star/page.html -NOBLE_BUY_IOS=https://h5.whoisamy.shop/action/hiloHtml/22_05_26_buy_nobility/page.html -NOBLE_BUY_IOS_AUDIT=https://h5.whoisamy.shop/action/hiloHtml/lxt_h5/page.html -GUILD_DATA_URL=https://h5.whoisamy.shop/action/hiloHtml/22_10_18_app_data_coins/index.html -MGR_GUILD_DATA_URL=https://h5.whoisamy.shop/action/hiloHtml/22_10_18_app_data_coins/union.html -RANKING_PINK_DIAMOND_URL=https://h5.whoisamy.shop/action/activitiesPage/2022_10_17HiloLiveH5/index.html -GROUP_POWER_GRADE_URL=https://h5.whoisamy.shop/action/hiloHtml/2023Activity/2023_3_21FamilyLevel/index.html -ID_URL=https://h5.whoisamy.shop/action/hiloHtml/new_upgrade/index.html -GROUP_POWER_ACT_URL=https://h5.whoisamy.shop/action/hiloHtml/2023Activity/2023_4_21FamilyMonth/index.html -SHEEP_H5_URL=https://h5.whoisamy.shop/action/slotRelease/sheep0322v1/index.html?game_id=hilo_sheep -[GROUPIM] -MSG_SORT_EXPIRE=1209600 -MSG_SORT_SNAP=300 -MSG_PARALLEL_SIZE=10 -[GRADE] -CHARM_SPEED_VIP=15 -ACTITY_SPEED_VIP=15 -WEALTH_SPEED_VIP=15 -[LIKE] -I_LIKE_NUM=500 -I_LIKE_NUM_VIP=1000 -I_LIKE_NUM_NOBLE=5000 -[APPLEPAY] -PASSWORD=38702750a05c4cb09c9d6ca646835634 -[REGISTER] -IMEI_TOTAL=5 -IMEI_OAUTH=2 -ACCOUNT_IP=100 -ACCOUNT_IP_DURATION=21600 -[BANNER] -GIFT_BANNER_LEVEL1=3000 -GIFT_BANNER_LEVEL2=5000 -GIFT_BANNER_LEVEL3=10000 -[DIAMOND] -DAILY_LOGIN_IMEI_LIMIT=5 -DAILY_LOGIN_IP_LIMIT=30 -PRIVATE_GIFT_RETURN=1440 -NEW_USER_INVITE_AWARD=5000 -[LUCKY_WHEEL] -MINIMAL_PARTICIPANT=2 -WAIT_TIMELONG=10 -WINNER_DIAMOND_BANNER=200 -[GROUP_CUSTOM_THEME] -PIC_LIMIT=50 -DAY=10 -[GIFT] -WALL_DIAMOND=2000 -[DAILY] -LOGIN_COMMON=10 -LOGIN_VIP=1000 -[FRUIT_TYCOON] -BIG_WINNER_THRESDHOLD=30000 -BIG_WINNER_LOW=10000 -BIG_WINNER_HIGH=20000 -POOL_RATIO=5 -WATERMELON_RATIO=24 -[ACTIVITY] -COUNTRY_STAR_POOL_RATIO=20 -COUNTRY_STAR_ORDINARY_RATIO=20 -[RISK_CONTROL] -USER_QPS_LIMIT=128 -USER_URL_QPS_LIMIT=64 -[PAYER_MAX] -URL=https://pay-gate.payermax.com/aggregate-pay-gate/api/gateway -KEY=503a970695756efa -MERCHANT_ID=SP11018326 -BIZ_TYPE=CUSTOMIZE -VERSION=2.3 -FRONT_CALLBACK_URL=https://www.hiloconn.com -SHOW_RESULT=1 -EXPIRE_TIME=1800 -LANGUAGE=en -[PAYPAL] -PAYPAL_CLIENT_ID=AXn-z2U6D2uKW0eJBoH3Hg0MzH6i8mLackAP9bcub2W_YmfMC-YBuPD3sTQgwJSecmAVtHIS9IsqBiIy -PAYPAL_SECRET_ID=EBNCFnSEwbteb8TDVtCMcOUcQBimG7hABmSe0bgC05HriWmje7cKFV2F4xI9pZnt1hDetKLnYxfmWYSY -RETURN_URL=https://apiv1.faceline.live/v1/callback/paypal \ No newline at end of file +EXPIRE=720h \ No newline at end of file