'use strict';
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
var cryptojs = require('crypto-js');
|
var os = require('os');
|
var axios = require('axios');
|
var qs = require('qs');
|
|
function hmacSign(type, secret, content) {
|
return cryptojs.HmacSHA1(content, secret).toString();
|
}
|
|
function mqttMatch(filter, topic) {
|
var filterArray = filter.split('/');
|
var length = filterArray.length;
|
var topicArray = topic.split('/');
|
for (var i = 0; i < length; ++i) {
|
var left = filterArray[i];
|
var right = topicArray[i];
|
if (left === '#') return topicArray.length >= length - 1;
|
if (left !== '+' && left !== right) return false;
|
}
|
return length === topicArray.length;
|
}
|
|
function mqttNotMatch(filter, topic) {
|
return !mqttMatch(filter, topic);
|
}
|
|
function createGuid() {
|
var id = 1;
|
return function () {
|
return String(id++);
|
};
|
}
|
|
function isJsonString(str) {
|
try {
|
if (_typeof(JSON.parse(str)) == "object") {
|
return true;
|
}
|
} catch (e) {}
|
return false;
|
}
|
|
function signUtil(deviceConfig) {
|
var signMethod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'sha1';
|
|
var timestamp = Date.now();
|
// 忽略三元组大小写
|
tripleIgnoreCase(deviceConfig);
|
var device = {
|
productKey: deviceConfig.productKey,
|
deviceName: deviceConfig.deviceName,
|
clientId: deviceConfig.productKey + '&' + deviceConfig.deviceName,
|
timestamp: timestamp
|
};
|
device.signMethod = 'hmac' + signMethod;
|
var signcontent = 'clientId' + device.clientId + 'deviceName' + device.deviceName + 'productKey' + device.productKey + 'timestamp' + timestamp;
|
device.sign = hmacSign(signMethod, deviceConfig.deviceSecret, signcontent);
|
return device;
|
}
|
|
function deviceRegisterSign(productKey, productSecret, deviceName, random) {
|
var signMethod = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'sha1';
|
|
// 忽略三元组大小写
|
var config = { productKey: productKey, productSecret: productSecret, deviceName: deviceName };
|
tripleIgnoreCase(config);
|
// signMethod = `hmac${signMethod}`;
|
var signcontent = 'deviceName' + config.deviceName + 'productKey' + config.productKey + 'random' + random;
|
// console.log("deviceRegisterSign",signMethod,signcontent)
|
var sign = hmacSign("sha1", config.productSecret, signcontent);
|
|
return sign;
|
}
|
|
function createDebug(mod) {
|
return function () {
|
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
args[_key] = arguments[_key];
|
}
|
|
var debugMod = process.env.DEBUG;
|
if (debugMod && (debugMod === '*' || mod.indexOf(debugMod) > -1)) {
|
var _console;
|
|
var _args = [mod + ':'].concat(args);
|
(_console = console).log.apply(_console, _toConsumableArray(_args));
|
}
|
};
|
}
|
|
function getIP() {
|
var ifaces = os.networkInterfaces();
|
var ip = "";
|
for (var dev in ifaces) {
|
ifaces[dev].forEach(function (details) {
|
if (details.family == 'IPv4' && dev === 'en0') {
|
ip = details.address;
|
}
|
});
|
}
|
return ip;
|
}
|
|
/*
|
* 设备动态注册
|
* 子设备注册+直连设备使用一型一密动态注册
|
*/
|
function register(_ref, cb) {
|
var productKey = _ref.productKey,
|
productSecret = _ref.productSecret,
|
deviceName = _ref.deviceName,
|
random = _ref.random,
|
signMethod = _ref.signMethod,
|
registerURL = _ref.registerURL;
|
|
var rd = random || Math.random().toString(36).substr(2);
|
var sm = signMethod || "hmacsha1";
|
var url = registerURL || "https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device";
|
var sign = deviceRegisterSign(productKey, productSecret, deviceName, rd, sm);
|
var data = qs.stringify({
|
productKey: productKey,
|
deviceName: deviceName,
|
random: rd,
|
sign: sign,
|
signMethod: sm
|
});
|
axios.post(url, data).then(function (res) {
|
var data = res.data;
|
if (data.code != 200) {
|
throw data;
|
}
|
cb(data);
|
}).catch(function (error) {
|
cb(error);
|
});
|
}
|
// 三元组不为空
|
function tripleExpectNotNull(triple) {
|
if (typeof triple.productKey === 'undefined') {
|
throw new Error('productKey should not be empty');
|
}
|
if (typeof triple.deviceName === 'undefined') {
|
throw new Error('deviceName should not be empty');
|
}
|
if (typeof triple.deviceSecret === 'undefined') {
|
throw new Error('deviceSecret should not be empty');
|
}
|
}
|
|
// 三元组忽略大小写 triple ignore case
|
function tripleIgnoreCase(config) {
|
Object.keys(config).forEach(function (originKey) {
|
var key = originKey.toLowerCase();
|
switch (key) {
|
case "productkey":
|
config.productKey = config[originKey];
|
break;
|
case "devicename":
|
config.deviceName = config[originKey];
|
break;
|
case "devicesecret":
|
config.deviceSecret = config[originKey];
|
break;
|
}
|
});
|
return config;
|
}
|
|
// 获取当前sdk版本
|
// 支付宝小程序:JS|Ali
|
// 微信小程序:JS|WX
|
// 浏览器:JS|Broswer
|
// node环境:NodeJS
|
// 命令行:JS|CLI
|
// 未知:JS|UNKNOW
|
var LANG = 'JS|UNKNOW';
|
|
function getSDKLanguage() {
|
// 支付宝小程序运行环境 不完全可靠
|
if (typeof my !== 'undefined' && (my.navigateToMiniProgram || my.navigateBackMiniProgram)) {
|
return "JS|Ali";
|
}
|
// 微信小程序判断 不完全可靠
|
if (typeof wx !== 'undefined' && (wx.navigateToMiniProgram || wx.navigateBackMiniProgram)) {
|
return "JS|WX";
|
}
|
// 浏览器环境判断
|
if (typeof window !== 'undefined' && typeof window.document !== 'undefined' || typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
|
return "JS|Broswer ";
|
}
|
// node环境
|
if (typeof module !== 'undefined' && module.exports) {
|
return "NodeJS";
|
}
|
|
// 返回主动设置的环境值
|
return LANG;
|
}
|
function setSDKLanguage(lang) {
|
LANG = lang;
|
}
|
|
exports.tripleIgnoreCase = tripleIgnoreCase;
|
exports.tripleExpectNotNull = tripleExpectNotNull;
|
exports.getIP = getIP;
|
exports.hmacSign = hmacSign;
|
exports.mqttMatch = mqttMatch;
|
exports.mqttNotMatch = mqttNotMatch;
|
exports.createGuid = createGuid;
|
exports.signUtil = signUtil;
|
exports.createDebug = createDebug;
|
exports.register = register;
|
exports.isJsonString = isJsonString;
|
exports.getSDKLanguage = getSDKLanguage;
|
exports.setSDKLanguage = setSDKLanguage;
|