198 lines
3.6 KiB
JavaScript
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
|
|
};
|