chenyc
2025-12-09 65e034683b28d799e73c7d7e5e4769fab5b9bc9c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
'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 crypto = require('crypto');
var os = require('os');
var axios = require('axios');
var qs = require('qs');
 
function hmacSign(type, secret, content) {
  return crypto.createHmac(type, secret).update(content).digest('hex');
}
 
// function mqttMatch(filter, topic) {
//   const filterArray = filter.split('/');
//   const length = filterArray.length;
//   const topicArray = topic.split('/');
 
//   for (var i = 0; i < length; ++i) {
//     var left = filterArray[i];
//     var right = topicArray[i];
//     if (left === '#') return true;
//     if (left !== '+' && left !== right) return false;
//   }
 
//   return length === topicArray.length;
// }
 
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();
  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';
 
  // signMethod = `hmac${signMethod}`;
  var signcontent = 'deviceName' + deviceName + 'productKey' + productKey + 'random' + random;
  // console.log("deviceRegisterSign",signMethod,signcontent)
  var sign = hmacSign("sha1", 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);
  });
}
 
exports.getIP = getIP;
exports.hmacSign = hmacSign;
// exports.mqttMatch = mqttMatch;
exports.createGuid = createGuid;
exports.signUtil = signUtil;
exports.createDebug = createDebug;
exports.register = register;
exports.isJsonString = isJsonString;