Merge branch 'develop'
commit
b4637d15ad
|
@ -46,7 +46,8 @@ app.controller('UserController', function ($scope,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
modalInstance.result.then(function (user) {
|
modalInstance.result.then(function (user) {
|
||||||
UserService.addUser(user, function (response) {
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
|
||||||
|
UserService.addUser(user, headers, function (response) {
|
||||||
if (angular.isDefined(response.status) && response.status === 201) {
|
if (angular.isDefined(response.status) && response.status === 201) {
|
||||||
toaster.pop({
|
toaster.pop({
|
||||||
type: "success",
|
type: "success",
|
||||||
|
@ -85,7 +86,8 @@ app.controller('UserController', function ($scope,
|
||||||
});
|
});
|
||||||
|
|
||||||
modalInstance.result.then(function (modifiedUser) {
|
modalInstance.result.then(function (modifiedUser) {
|
||||||
UserService.editUser(modifiedUser, function (response) {
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
|
||||||
|
UserService.editUser(modifiedUser, headers, function (response) {
|
||||||
if (angular.isDefined(response.status) && response.status === 200) {
|
if (angular.isDefined(response.status) && response.status === 200) {
|
||||||
toaster.pop({
|
toaster.pop({
|
||||||
type: "success",
|
type: "success",
|
||||||
|
@ -123,12 +125,8 @@ app.controller('UserController', function ($scope,
|
||||||
});
|
});
|
||||||
|
|
||||||
modalInstance.result.then(function (modifiedUser) {
|
modalInstance.result.then(function (modifiedUser) {
|
||||||
let data = {
|
let data = {name: modifiedUser.name, password: modifiedUser.password };
|
||||||
name: modifiedUser.name,
|
|
||||||
password: modifiedUser.password };
|
|
||||||
|
|
||||||
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
|
||||||
|
|
||||||
UserService.resetPassword(data, headers, function (response) {
|
UserService.resetPassword(data, headers, function (response) {
|
||||||
if (angular.isDefined(response.status) && response.status === 200) {
|
if (angular.isDefined(response.status) && response.status === 200) {
|
||||||
toaster.pop({
|
toaster.pop({
|
||||||
|
@ -166,7 +164,8 @@ app.controller('UserController', function ($scope,
|
||||||
},
|
},
|
||||||
function (isConfirm) {
|
function (isConfirm) {
|
||||||
if (isConfirm) {
|
if (isConfirm) {
|
||||||
UserService.deleteUser(user, function (response) {
|
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
|
||||||
|
UserService.deleteUser(user, headers, function (response) {
|
||||||
if (angular.isDefined(response.status) && response.status === 204) {
|
if (angular.isDefined(response.status) && response.status === 204) {
|
||||||
toaster.pop({
|
toaster.pop({
|
||||||
type: "success",
|
type: "success",
|
||||||
|
|
|
@ -17,16 +17,16 @@ app.factory('UserService', function($http) {
|
||||||
callback(response);
|
callback(response);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
addUser: function(user, callback) {
|
addUser: function(user, headers, callback) {
|
||||||
$http.post(getAPI()+'users',{data:user})
|
$http.post(getAPI()+'users', {data:user}, {headers})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
editUser: function(user, callback) {
|
editUser: function(user, headers, callback) {
|
||||||
$http.put(getAPI()+'users/'+user.id,{data:user})
|
$http.put(getAPI()+'users/'+user.id, {data:user}, {headers})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
|
@ -49,16 +49,16 @@ app.factory('UserService', function($http) {
|
||||||
callback(response);
|
callback(response);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
deleteUser: function(user, callback) {
|
deleteUser: function(user, headers, callback) {
|
||||||
$http.delete(getAPI()+'users/'+user.id)
|
$http.delete(getAPI()+'users/'+user.id, {headers})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getUser: function(id, callback) {
|
getUser: function(id, headers, callback) {
|
||||||
$http.get(getAPI()+'users/'+id)
|
$http.get(getAPI()+'users/'+id, {headers})
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
callback(response);
|
callback(response);
|
||||||
}, function (response) {
|
}, function (response) {
|
||||||
|
|
|
@ -6518,15 +6518,26 @@
|
||||||
"type": "noauth"
|
"type": "noauth"
|
||||||
},
|
},
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [],
|
"header": [
|
||||||
|
{
|
||||||
|
"key": "User-UUID",
|
||||||
|
"value": "dcdb67d1-6116-4987-916f-6fc6cf2bc0e4",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Token",
|
||||||
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/users/2",
|
"raw": "{{base_url}}/users/1",
|
||||||
"host": [
|
"host": [
|
||||||
"{{base_url}}"
|
"{{base_url}}"
|
||||||
],
|
],
|
||||||
"path": [
|
"path": [
|
||||||
"users",
|
"users",
|
||||||
"2"
|
"1"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -6536,7 +6547,18 @@
|
||||||
"name": "POST Create New User",
|
"name": "POST Create New User",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "POST",
|
"method": "POST",
|
||||||
"header": [],
|
"header": [
|
||||||
|
{
|
||||||
|
"key": "User-UUID",
|
||||||
|
"value": "dcdb67d1-6116-4987-916f-6fc6cf2bc0e4",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Token",
|
||||||
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
"body": {
|
"body": {
|
||||||
"mode": "raw",
|
"mode": "raw",
|
||||||
"raw": "{\"data\":{\"name\":\"albert1\", \"display_name\":\"Mr. Albert\", \"email\":\"albert1@myems.io\", \"is_admin\":false, \"privilege_id\":1, \"password\":\"!MyEMS1\", \"account_expiration_datetime\":\"2100-01-01T00:00:00\",\"password_expiration_datetime\":\"2100-01-01T00:00:00\"}}"
|
"raw": "{\"data\":{\"name\":\"albert1\", \"display_name\":\"Mr. Albert\", \"email\":\"albert1@myems.io\", \"is_admin\":false, \"privilege_id\":1, \"password\":\"!MyEMS1\", \"account_expiration_datetime\":\"2100-01-01T00:00:00\",\"password_expiration_datetime\":\"2100-01-01T00:00:00\"}}"
|
||||||
|
@ -6579,7 +6601,18 @@
|
||||||
"name": "DELETE User",
|
"name": "DELETE User",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "DELETE",
|
"method": "DELETE",
|
||||||
"header": [],
|
"header": [
|
||||||
|
{
|
||||||
|
"key": "User-UUID",
|
||||||
|
"value": "dcdb67d1-6116-4987-916f-6fc6cf2bc0e4",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Token",
|
||||||
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{base_url}}/users/2",
|
"raw": "{{base_url}}/users/2",
|
||||||
"host": [
|
"host": [
|
||||||
|
@ -6597,7 +6630,18 @@
|
||||||
"name": "PUT Update User Profile",
|
"name": "PUT Update User Profile",
|
||||||
"request": {
|
"request": {
|
||||||
"method": "PUT",
|
"method": "PUT",
|
||||||
"header": [],
|
"header": [
|
||||||
|
{
|
||||||
|
"key": "User-UUID",
|
||||||
|
"value": "dcdb67d1-6116-4987-916f-6fc6cf2bc0e4",
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "Token",
|
||||||
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
"body": {
|
"body": {
|
||||||
"mode": "raw",
|
"mode": "raw",
|
||||||
"raw": "{\"data\":{\"name\":\"albert\", \"display_name\":\"Mr. Albert\", \"email\":\"albert@myems.io\", \"is_admin\":false, \"privilege_id\":1, \"password\":\"!MyEMS1\", \"account_expiration_datetime\":\"2100-01-01T00:00:00\",\"password_expiration_datetime\":\"2100-01-01T00:00:00\"}}"
|
"raw": "{\"data\":{\"name\":\"albert\", \"display_name\":\"Mr. Albert\", \"email\":\"albert@myems.io\", \"is_admin\":false, \"privilege_id\":1, \"password\":\"!MyEMS1\", \"account_expiration_datetime\":\"2100-01-01T00:00:00\",\"password_expiration_datetime\":\"2100-01-01T00:00:00\"}}"
|
||||||
|
@ -6637,7 +6681,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "Token",
|
"key": "Token",
|
||||||
"value": "18f212f9fe64adcf34f6e618eb9f72a0e8b4c411",
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -6670,7 +6714,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "Token",
|
"key": "Token",
|
||||||
"value": "b3a1b48ff5a9a3f67ec16848c5ddf9a42bf17045",
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -6703,7 +6747,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "Token",
|
"key": "Token",
|
||||||
"value": "b3a1b48ff5a9a3f67ec16848c5ddf9a42bf17045",
|
"value": "b422ef869a947eb8dd058f5c9464b11769db7be3232b327fb8a4edac28118df876a5d7d3ab1d8175ef81169126d01fbe3b38baa6da62edf4cbf49b2bef0ed9a7",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class CombinedEquipmentCollection:
|
class CombinedEquipmentCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
import re
|
import re
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class ContactCollection:
|
class ContactCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class CostCenterCollection:
|
class CostCenterCollection:
|
||||||
|
|
|
@ -5,7 +5,7 @@ import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
import os
|
import os
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class CostFileCollection:
|
class CostFileCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class DataSourceCollection:
|
class DataSourceCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class DistributionCircuitCollection:
|
class DistributionCircuitCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class DistributionSystemCollection:
|
class DistributionSystemCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EmailMessageCollection:
|
class EmailMessageCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import base64
|
import base64
|
||||||
import re
|
import re
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EmailServerCollection:
|
class EmailServerCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EnergyCategoryCollection:
|
class EnergyCategoryCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EnergyFlowDiagramCollection:
|
class EnergyFlowDiagramCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EnergyItemCollection:
|
class EnergyItemCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class EquipmentCollection:
|
class EquipmentCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class GatewayCollection:
|
class GatewayCollection:
|
||||||
|
|
|
@ -7,7 +7,7 @@ from datetime import datetime, timezone, timedelta
|
||||||
import os
|
import os
|
||||||
import base64
|
import base64
|
||||||
import sys
|
import sys
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class KnowledgeFileCollection:
|
class KnowledgeFileCollection:
|
||||||
|
|
|
@ -2,7 +2,7 @@ import falcon
|
||||||
import simplejson as json
|
import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class MenuCollection:
|
class MenuCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class MeterCollection:
|
class MeterCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class NotificationCollection:
|
class NotificationCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class OfflineMeterCollection:
|
class OfflineMeterCollection:
|
||||||
|
|
|
@ -5,7 +5,7 @@ import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
import os
|
import os
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class OfflineMeterFileCollection:
|
class OfflineMeterFileCollection:
|
||||||
|
|
|
@ -2,7 +2,7 @@ import falcon
|
||||||
import simplejson as json
|
import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class PointCollection:
|
class PointCollection:
|
||||||
|
|
|
@ -2,7 +2,7 @@ import falcon
|
||||||
import simplejson as json
|
import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class PrivilegeCollection:
|
class PrivilegeCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
import config
|
import config
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class RuleCollection:
|
class RuleCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class SensorCollection:
|
class SensorCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class ShopfloorCollection:
|
class ShopfloorCollection:
|
||||||
|
|
|
@ -6,7 +6,7 @@ import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from anytree import AnyNode
|
from anytree import AnyNode
|
||||||
from anytree.exporter import JsonExporter
|
from anytree.exporter import JsonExporter
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class SpaceCollection:
|
class SpaceCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class StoreCollection:
|
class StoreCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class StoreTypeCollection:
|
class StoreTypeCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class TariffCollection:
|
class TariffCollection:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class TenantCollection:
|
class TenantCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class TenantTypeCollection:
|
class TenantTypeCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class TextMessageCollection:
|
class TextMessageCollection:
|
||||||
|
|
|
@ -2,7 +2,7 @@ import falcon
|
||||||
import simplejson as json
|
import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class TimezoneCollection:
|
class TimezoneCollection:
|
||||||
|
|
|
@ -7,7 +7,7 @@ import hashlib
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger, write_log
|
from core.useractivity import user_logger, write_log, access_control
|
||||||
|
|
||||||
|
|
||||||
class UserCollection:
|
class UserCollection:
|
||||||
|
@ -22,52 +22,9 @@ class UserCollection:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def on_get(req, resp):
|
def on_get(req, resp):
|
||||||
if 'USER-UUID' not in req.headers or \
|
access_control(req)
|
||||||
not isinstance(req.headers['USER-UUID'], str) or \
|
|
||||||
len(str.strip(req.headers['USER-UUID'])) == 0:
|
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
|
||||||
description='API.INVALID_USER_UUID')
|
|
||||||
admin_user_uuid = str.strip(req.headers['USER-UUID'])
|
|
||||||
|
|
||||||
if 'TOKEN' not in req.headers or \
|
|
||||||
not isinstance(req.headers['TOKEN'], str) or \
|
|
||||||
len(str.strip(req.headers['TOKEN'])) == 0:
|
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
|
||||||
description='API.INVALID_TOKEN')
|
|
||||||
admin_token = str.strip(req.headers['TOKEN'])
|
|
||||||
|
|
||||||
# Check administrator privilege
|
|
||||||
cnx = mysql.connector.connect(**config.myems_user_db)
|
cnx = mysql.connector.connect(**config.myems_user_db)
|
||||||
cursor = cnx.cursor()
|
cursor = cnx.cursor()
|
||||||
query = (" SELECT utc_expires "
|
|
||||||
" FROM tbl_sessions "
|
|
||||||
" WHERE user_uuid = %s AND token = %s")
|
|
||||||
cursor.execute(query, (admin_user_uuid, admin_token,))
|
|
||||||
row = cursor.fetchone()
|
|
||||||
|
|
||||||
if row is None:
|
|
||||||
cursor.close()
|
|
||||||
cnx.disconnect()
|
|
||||||
raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND',
|
|
||||||
description='API.ADMINISTRATOR_SESSION_NOT_FOUND')
|
|
||||||
else:
|
|
||||||
utc_expires = row[0]
|
|
||||||
if datetime.utcnow() > utc_expires:
|
|
||||||
cursor.close()
|
|
||||||
cnx.disconnect()
|
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
|
||||||
description='API.ADMINISTRATOR_SESSION_TIMEOUT')
|
|
||||||
|
|
||||||
query = (" SELECT name "
|
|
||||||
" FROM tbl_users "
|
|
||||||
" WHERE uuid = %s AND is_admin = true ")
|
|
||||||
cursor.execute(query, (admin_user_uuid,))
|
|
||||||
row = cursor.fetchone()
|
|
||||||
if row is None:
|
|
||||||
cursor.close()
|
|
||||||
cnx.disconnect()
|
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.INVALID_PRIVILEGE')
|
|
||||||
|
|
||||||
query = (" SELECT u.id, u.name, u.display_name, u.uuid, "
|
query = (" SELECT u.id, u.name, u.display_name, u.uuid, "
|
||||||
" u.email, u.is_admin, p.id, p.name, "
|
" u.email, u.is_admin, p.id, p.name, "
|
||||||
" u.account_expiration_datetime_utc, u.password_expiration_datetime_utc "
|
" u.account_expiration_datetime_utc, u.password_expiration_datetime_utc "
|
||||||
|
@ -110,7 +67,7 @@ class UserCollection:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def on_post(req, resp):
|
def on_post(req, resp):
|
||||||
"""Handles POST requests"""
|
"""Handles POST requests"""
|
||||||
# todo: add access control
|
access_control(req)
|
||||||
# todo: add user log
|
# todo: add user log
|
||||||
try:
|
try:
|
||||||
raw_json = req.stream.read().decode('utf-8')
|
raw_json = req.stream.read().decode('utf-8')
|
||||||
|
@ -246,7 +203,7 @@ class UserItem:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def on_get(req, resp, id_):
|
def on_get(req, resp, id_):
|
||||||
# todo: add access control
|
access_control(req)
|
||||||
if not id_.isdigit() or int(id_) <= 0:
|
if not id_.isdigit() or int(id_) <= 0:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description='API.INVALID_USER_ID')
|
description='API.INVALID_USER_ID')
|
||||||
|
@ -291,6 +248,7 @@ class UserItem:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@user_logger
|
@user_logger
|
||||||
def on_delete(req, resp, id_):
|
def on_delete(req, resp, id_):
|
||||||
|
access_control(req)
|
||||||
if not id_.isdigit() or int(id_) <= 0:
|
if not id_.isdigit() or int(id_) <= 0:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description='API.INVALID_USER_ID')
|
description='API.INVALID_USER_ID')
|
||||||
|
@ -320,6 +278,7 @@ class UserItem:
|
||||||
@user_logger
|
@user_logger
|
||||||
def on_put(req, resp, id_):
|
def on_put(req, resp, id_):
|
||||||
"""Handles PUT requests"""
|
"""Handles PUT requests"""
|
||||||
|
access_control(req)
|
||||||
try:
|
try:
|
||||||
raw_json = req.stream.read().decode('utf-8')
|
raw_json = req.stream.read().decode('utf-8')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|
|
@ -9,6 +9,58 @@ import simplejson as json
|
||||||
import falcon
|
import falcon
|
||||||
|
|
||||||
|
|
||||||
|
def access_control(req):
|
||||||
|
"""
|
||||||
|
Check administrator privilege in request headers to protect resources from invalid access
|
||||||
|
:param req: HTTP request
|
||||||
|
:return: HTTPError if invalid else None
|
||||||
|
"""
|
||||||
|
if 'USER-UUID' not in req.headers or \
|
||||||
|
not isinstance(req.headers['USER-UUID'], str) or \
|
||||||
|
len(str.strip(req.headers['USER-UUID'])) == 0:
|
||||||
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
|
description='API.INVALID_USER_UUID')
|
||||||
|
admin_user_uuid = str.strip(req.headers['USER-UUID'])
|
||||||
|
|
||||||
|
if 'TOKEN' not in req.headers or \
|
||||||
|
not isinstance(req.headers['TOKEN'], str) or \
|
||||||
|
len(str.strip(req.headers['TOKEN'])) == 0:
|
||||||
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
|
description='API.INVALID_TOKEN')
|
||||||
|
admin_token = str.strip(req.headers['TOKEN'])
|
||||||
|
|
||||||
|
# Check administrator privilege
|
||||||
|
cnx = mysql.connector.connect(**config.myems_user_db)
|
||||||
|
cursor = cnx.cursor()
|
||||||
|
query = (" SELECT utc_expires "
|
||||||
|
" FROM tbl_sessions "
|
||||||
|
" WHERE user_uuid = %s AND token = %s")
|
||||||
|
cursor.execute(query, (admin_user_uuid, admin_token,))
|
||||||
|
row = cursor.fetchone()
|
||||||
|
|
||||||
|
if row is None:
|
||||||
|
cursor.close()
|
||||||
|
cnx.disconnect()
|
||||||
|
raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND',
|
||||||
|
description='API.ADMINISTRATOR_SESSION_NOT_FOUND')
|
||||||
|
else:
|
||||||
|
utc_expires = row[0]
|
||||||
|
if datetime.utcnow() > utc_expires:
|
||||||
|
cursor.close()
|
||||||
|
cnx.disconnect()
|
||||||
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
|
description='API.ADMINISTRATOR_SESSION_TIMEOUT')
|
||||||
|
query = (" SELECT name "
|
||||||
|
" FROM tbl_users "
|
||||||
|
" WHERE uuid = %s AND is_admin = true ")
|
||||||
|
cursor.execute(query, (admin_user_uuid,))
|
||||||
|
row = cursor.fetchone()
|
||||||
|
cursor.close()
|
||||||
|
cnx.disconnect()
|
||||||
|
if row is None:
|
||||||
|
raise falcon.HTTPError(falcon.HTTP_400, 'API.BAD_REQUEST', 'API.INVALID_PRIVILEGE')
|
||||||
|
|
||||||
|
|
||||||
def write_log(user_uuid, request_method, resource_type, resource_id, request_body):
|
def write_log(user_uuid, request_method, resource_type, resource_id, request_body):
|
||||||
"""
|
"""
|
||||||
:param user_uuid: user_uuid
|
:param user_uuid: user_uuid
|
||||||
|
@ -43,6 +95,11 @@ def write_log(user_uuid, request_method, resource_type, resource_id, request_bod
|
||||||
|
|
||||||
|
|
||||||
def user_logger(func):
|
def user_logger(func):
|
||||||
|
"""
|
||||||
|
Decorator for logging user activities
|
||||||
|
:param func: the decorated function
|
||||||
|
:return: the decorator
|
||||||
|
"""
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def logger(*args, **kwargs):
|
def logger(*args, **kwargs):
|
||||||
qualified_name = func.__qualname__
|
qualified_name = func.__qualname__
|
|
@ -3,7 +3,7 @@ import simplejson as json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
import uuid
|
import uuid
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class VirtualMeterCollection:
|
class VirtualMeterCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class WebMessageCollection:
|
class WebMessageCollection:
|
||||||
|
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from core.userlogger import user_logger
|
from core.useractivity import user_logger
|
||||||
|
|
||||||
|
|
||||||
class WechatMessageCollection(object):
|
class WechatMessageCollection(object):
|
||||||
|
|
Loading…
Reference in New Issue