NGToolsAdmin/uni_modules/uni-open-bridge/uniCloud/cloudfunctions/uni-open-bridge/config.js
2024-09-13 16:39:31 +08:00

198 lines
3.6 KiB
JavaScript

'use strict';
const {
PlatformType
} = require('./consts.js')
const configCenter = require('uni-config-center')
const OauthConfig = {
'mp-weixin': ['oauth', 'weixin'],
'h5-weixin': ['oauth', 'weixin']
}
class TaskConfig {
constructor(options) {
this._dcloudAppid = options.dcloudAppid
this._appid = options.appid
this._secret = options.secret
this._platform = options.platform
this._tasks = options.tasks
this._timeout = 1000 * 10
}
get dcloudAppid() {
return this._dcloudAppid
}
get appid() {
return this._appid
}
get secret() {
return this._secret
}
get platform() {
return this._platform
}
get tasks() {
return this._tasks
}
}
class ConfigBase {
constructor() {
const uniIdConfig = configCenter({
pluginId: 'uni-id'
})
const openBridgeConfig = configCenter({
pluginId: 'uni-open-bridge'
})
this._uniId = uniIdConfig.config()
this._openBridge = openBridgeConfig.config()
this._ready = true
}
getAppConfig(appid) {
if (Array.isArray(this._uniId)) {
return this._uniId.find((item) => {
return (item.dcloudAppid === appid)
})
}
if (this._uniId.dcloudAppid === appid) {
return this._uniId
}
return null
}
inWhitelist(ip) {
return (this.ipWhitelist.indexOf(ip) > -1)
}
get openBridge() {
return this._openBridge
}
get ipWhitelist() {
return this._openBridge.ipWhitelist
}
get ready() {
return this._ready
}
}
class OpenBridgeConfig extends ConfigBase {
constructor() {
super()
this._tasks = []
this.resolve()
}
get tasks() {
return this._tasks
}
resolve() {
this._tasks.length = 0
const appids = Object.keys(this.openBridge.schedule)
for (let i = 0; i < appids.length; i++) {
const appid = appids[i]
let appConfig = this.getAppConfig(appid)
if (appConfig != null) {
const schedule = this.openBridge.schedule[appid]
if (schedule) {
this.resolveSchedule(appid, appConfig, schedule)
}
}
}
}
resolveSchedule(dcloudAppid, appConfig, schedule) {
if (schedule.enable !== true) {
return
}
const schedulePlatforms = Object.keys(schedule)
for (let i = 0; i < schedulePlatforms.length; i++) {
const platformName = schedulePlatforms[i]
const scheduleTask = schedule[platformName]
if (!scheduleTask.enable) {
continue
}
if (!this.isSupport(platformName)) {
continue
}
const oauthConfig = this.getOauthConfig(appConfig, platformName)
if (!oauthConfig) {
continue
}
this._tasks.push({
platform: platformName,
tasks: scheduleTask.tasks,
dcloudAppid: dcloudAppid,
appid: oauthConfig.appid,
secret: oauthConfig.secret
})
}
}
isSupport(platformName) {
return (OpenBridgeConfig.Support_Platforms.indexOf(platformName) >= 0)
}
getOauthConfig(appConfig, platformName) {
const platformConfig = appConfig[platformName]
if (!platformConfig) {
return null
}
let tree = OauthConfig[platformName]
let node = platformConfig
for (let i = 0; i < tree.length; i++) {
let nodeName = tree[i]
if (node[nodeName]) {
node = node[nodeName]
} else {
node = null
break
}
}
if (node && node.appid && node.appsecret) {
return {
appid: node.appid,
secret: node.appsecret
}
}
return null
}
}
OpenBridgeConfig.Support_Platforms = ['mp-weixin', 'h5-weixin']
module.exports = {
OpenBridgeConfig
};