mi-auth-client
Version:
Use to MI product authorization and authentication
541 lines (540 loc) • 33.7 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("../utils");
var _a = require('./mockObjects'), mockJwt = _a.mockJwt, mockUsers = _a.mockUsers, mockBrands = _a.mockBrands, mockAdvertisers = _a.mockAdvertisers, mockRoles = _a.mockRoles;
var R = require("ramda");
var mockMe;
function mockStrapiClientTool() {
return {
// user operations
createUser: function (token, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
if (!profile) {
resolve({ data: null, error: "Please provide your user profile." });
}
var username = profile.username, email = profile.email, password = profile.password, role = profile.role, platform = profile.platform, advertisers = profile.advertisers;
if (!username && !email && !password && !role && !platform && !advertisers) {
resolve({ data: null, error: "Please provide username, email, password, role, access, advertiser in profile." });
}
if (typeof (username) != 'string') {
resolve({ data: null, error: "Type of username must be string." });
}
if (!utils_1.isEmail(email)) {
resolve({ data: null, error: "Invalid email format." });
}
if (typeof (password) != 'string') {
resolve({ data: null, error: "Type of password must be string." });
}
if (typeof (role) != 'string') {
resolve({ data: null, error: "Type of role must be string." });
}
if (!utils_1.isValidKey(role, utils_1.roleNames)) {
resolve({ data: null, error: "Please select role in one of root, superAdmin, admin, user" });
}
if (!Array.isArray(platform)) {
resolve({ data: null, error: "Type of platform must be array." });
}
var id = R.reduce(function (a, b) { return a > b ? a : b; }, 0, mockUsers.map(function (e) { return e.id; })) + 1;
var advertiserInfo = mockAdvertisers.filter(function (e) { return advertisers.includes(e.id); });
var brand = [];
var newUser = { id: id, username: username, email: email, password: password, role: role, platform: platform, brand: brand, advertisers: advertiserInfo };
//update owner to brand
advertiserInfo.forEach(function (e) {
var index = mockBrands.findIndex(function (c) { return c.id == e.brand; });
if (role == 'superAdmin')
mockBrands[index].owners = mockBrands[index].owners.concat(newUser);
newUser.brand.push(R.pick(['id', 'name'], mockBrands[index]));
});
//update user to advertiser
mockAdvertisers = mockAdvertisers.map(function (e) {
if (advertisers.includes(e.id)) {
e.users.push(R.pick(['id', 'username', 'email', 'role', 'platform', 'brand'], newUser));
}
return e;
});
mockUsers.push(newUser);
resolve({ data: utils_1.lastElement(mockUsers), error: null });
})];
});
});
},
login: function (name, password) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (!name) {
resolve({ data: null, error: "Please provide your name, which is email." });
}
if (!password) {
resolve({ data: null, error: "Please provide your password." });
}
if (!utils_1.isEmail(name)) {
resolve({ data: null, error: "nvalid email format." });
}
if (typeof (password) != 'string') {
resolve({ data: null, error: "Type of password must be string." });
}
var index = mockUsers.findIndex(function (e) { return e.email == name; });
mockMe = mockUsers[index];
resolve({ data: { jwt: mockJwt, user: mockMe }, error: null });
})];
});
});
},
getMe: function (token) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
resolve({ data: mockMe, error: null });
})];
});
});
},
listUsers: function (token, select) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (!token) {
resolve({ data: null, error: "Invalid token" });
}
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var _a = select.ids, ids = _a === void 0 ? [] : _a, brands = select.brands, advertisers = select.advertisers;
if (ids.length != 0) {
var users = mockUsers.filter(function (e) { return ids.includes(e.id); });
resolve({ data: users, error: null });
}
if (brands) {
var users = mockUsers.filter(function (e) { return e.advertisers.find(function (a) { return brands.includes(a.brand); }); });
resolve({ data: users, error: null });
}
if (advertisers) {
var users = mockUsers.filter(function (e) { return e.advertisers.find(function (a) { return advertisers.includes(a.id); }); });
resolve({ data: users, error: null });
}
//list all users
resolve({ data: mockUsers, error: null });
})];
});
});
},
updateUser: function (token, id, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var username = profile.username, password = profile.password, role = profile.role, platform = profile.platform;
if (password && typeof (password) != 'string') {
resolve({ data: null, error: "Type of password must be string." });
}
if (role && typeof (role) != 'string') {
resolve({ data: null, error: "Type of role must be string." });
}
if (role && !utils_1.isValidKey(role, utils_1.roleNames)) {
resolve({ data: null, error: "Please select role in one of root, superAdmin, admin, user" });
}
if (platform && !Array.isArray(platform)) {
resolve({ data: null, error: "Type of platform must be array." });
}
var user = mockUsers.find(function (e) { return e.id == id; });
var index = mockUsers.indexOf(user);
var advertisers = profile.advertisers ? R.filter(function (e) { return profile.advertisers.includes(e.id); }, mockAdvertisers).map(R.pick(['id', 'name', 'brand'])) : undefined;
var brand = advertisers ? R.filter(function (e) { return advertisers.map(function (e) { return e.brand; }).includes(e.id); }, mockBrands).map(R.pick(['id', 'name'])) : undefined;
mockUsers[index] = utils_1.assignObject(mockUsers[index], { username: username || user.username, role: role || user.role, brand: brand || user.brand, advertisers: advertisers || user.advertisers });
// update user to advertiser
if (profile.advertisers) {
mockAdvertisers = mockAdvertisers.map(function (e) {
var existUserIndex = e.users.findIndex(function (e) { return e.id == id; });
var isExist = existUserIndex != -1;
if (profile.advertisers.includes(e.id) && isExist)
return e;
if (!profile.advertisers.includes(e.id) && !isExist)
return e;
// add user to advertiser
if (profile.advertisers.includes(e.id) && !isExist) {
e.users.push(R.pick(['username', 'id', 'email', 'role', 'platform', 'brand'], mockUsers[index]));
return e;
}
// remove user from advertiser
if (!profile.advertisers.includes(e.id) && isExist) {
e.users.splice(existUserIndex, 1);
return e;
}
});
}
//update owner to brand
if (profile.role == 'superAdmin') {
//add to brand
mockBrands = mockBrands.map(function (e) {
var existOwnerIndex = e.owners.findIndex(function (e) { return e.id == id; });
var isExist = existOwnerIndex !== -1;
if (!isExist)
e.owners.push(R.pick(["id", "username", "email", "role", "platform"], mockUsers[index]));
return e;
});
}
else if (profile.role !== 'superAdmin') {
//remove owner from brand
mockBrands = mockBrands.map(function (e) {
var existOwnerIndex = e.owners.findIndex(function (e) { return e.id == id; });
var isExist = existOwnerIndex !== -1;
if (isExist)
e.owners.splice(existOwnerIndex, 1);
return e;
});
}
resolve({ data: mockUsers[index], error: null });
})];
});
});
},
deleteUser: function (token, id) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
try {
// remove user
var index = mockUsers.findIndex(function (e) { return e.id == id; });
var user = mockUsers[index];
mockUsers.splice(index, 1);
// remove user from advertiser
mockAdvertisers = mockAdvertisers.map(function (e) {
var existUserIndex = e.users.findIndex(function (e) { return e.id == id; });
if (existUserIndex == -1)
return e; // user not exist in advertiser
e.users.splice(existUserIndex, 1);
return e;
});
// remove user from brand owner
if (user.role == 'superAdmin')
mockBrands = mockBrands.map(function (e) {
console.log(e.owners);
var existOwnerIndex = e.owners.findIndex(function (e) { return e.id == id; });
var isExist = existOwnerIndex !== -1;
if (isExist)
e.owners.splice(existOwnerIndex, 1);
return e;
});
}
catch (err) {
resolve({ data: null, error: err });
}
resolve({ data: true, error: null });
})];
});
});
},
// role operations
listRoles: function (token) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
throw new Error("Invalid token.");
}
resolve(mockRoles);
})];
});
});
},
// brand operations
createBrand: function (token, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var name = profile.name, _a = profile.advertisers, advertisers = _a === void 0 ? [] : _a, _b = profile.owners, owners = _b === void 0 ? [] : _b;
if (!name) {
resolve({ data: null, error: "Please provie name in profile" });
}
if (typeof (name) != 'string') {
resolve({ data: null, error: "Invalid type of name" });
}
var id = R.reduce(function (a, b) { return a > b ? a : b; }, 0, mockBrands.map(function (e) { return e.id; })) + 1;
var advertisersInfo = mockAdvertisers.filter(function (e) { return profile.advertisers.includes(e.id); }).map(function (e) { return { id: e.id, name: e.name, brand: id }; });
var ownersInfo = mockUsers.filter(function (e) { return owners.includes(e.id); });
mockBrands.push({ id: id, name: name, advertisers: advertisersInfo, owners: ownersInfo });
// add advertiser to brand
mockAdvertisers = mockAdvertisers.map(function (e) {
if (advertisers.includes(e.id))
e.brand = id;
return e;
});
resolve({ data: utils_1.lastElement(mockBrands), error: null });
})];
});
});
},
listBrands: function (token, select) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var ids = select.ids;
if (ids) {
var brands = mockBrands.filter(function (e) { return ids.includes(e.id); });
resolve({ data: brands, error: null });
}
resolve({ data: mockBrands, error: null });
})];
});
});
},
updateBrand: function (token, id, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var brand = mockBrands.find(function (e) { return e.id == id; });
var index = mockBrands.indexOf(brand);
var owners = profile.owners ? mockUsers.filter(function (e) { return e.id == profile.owners[0]; }) : brand.owners;
mockBrands[index] = utils_1.assignObject(mockBrands[index], { name: profile.name, owners: owners });
resolve({ data: mockBrands[index], error: null });
})];
});
});
},
deleteBrand: function (token, id) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
try {
var brand_1 = mockBrands.find(function (e) { return e.id == id; });
var index = mockBrands.indexOf(brand_1);
mockBrands.splice(index, 1);
// remove brand from advertiser
mockAdvertisers = mockAdvertisers.map(function (e) {
if (brand_1.advertisers.map(function (e) { return e.id; }).includes(e.id))
e.brand = null;
return e;
});
}
catch (err) {
resolve({ data: null, error: err });
}
resolve({ data: true, error: null });
})];
});
});
},
// advertiser operations
createAdvertiser: function (token, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var name = profile.name, brand = profile.brand;
if (!name) {
resolve({ data: null, error: "Please provie name in profile" });
}
if (typeof (name) != 'string') {
resolve({ data: null, error: "Invalid type of name" });
}
if (brand && typeof (brand) != 'number') {
resolve({ data: null, error: "Invalid type of brand" });
}
// add advertiser to user
var users = mockUsers.filter(function (e) { return profile.users.includes(e.id) ||
e.role == 'root' ||
(e.brand.map(function (e) { return e.id; }).includes(brand) &&
e.role == 'superAdmin'); });
var id = R.reduce(function (a, b) { return a > b ? a : b; }, 0, mockAdvertisers.map(function (e) { return e.id; })) + 1;
var advertiser = { id: id, name: name, brand: brand, users: users };
mockUsers = mockUsers.map(function (e) {
if (users.map(function (e) { return e.id; }).includes(e.id))
e.advertisers.push(R.pick(['name', 'brand', 'id'], advertiser));
return e;
});
// create new advertiser
mockAdvertisers.push(advertiser);
// add advertiser to brand
mockBrands = mockBrands.map(function (e) {
if (e.id == profile.brand)
e.advertisers.push(R.pick(['id', 'name', 'brand'], advertiser));
return e;
});
resolve({ data: advertiser, error: null });
})];
});
});
},
listAdvertisers: function (token, select) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
//throw new Error("Invalid token.");
resolve({ data: null, error: "Invalid token" });
}
var _a = select.ids, ids = _a === void 0 ? [] : _a, _b = select.brands, brands = _b === void 0 ? [] : _b;
if (ids.length != 0) {
var advertiser = mockAdvertisers.filter(function (e) { return ids.includes(e.id); });
resolve({ data: advertiser, error: null });
}
if (brands.length != 0) {
var advertiser = mockAdvertisers.filter(function (e) { return brands.includes(e.brand); });
resolve({ data: advertiser, error: null });
}
resolve({ data: mockAdvertisers, error: null });
})];
});
});
},
updateAdvertiser: function (token, id, profile) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
var index = mockAdvertisers.findIndex(function (e) { return e.id == id; });
var advertiser = mockAdvertisers[index];
var newUser = mockUsers.filter(function (e) { return profile.users.includes(e.id); });
mockAdvertisers[index] = utils_1.assignObject(mockAdvertisers[index], { name: profile.name || advertiser.name, brand: profile.brand || advertiser.brand, users: newUser || advertiser.users });
if (profile.users) {
mockUsers = mockUsers.map(function (e) {
var existAdvIndex = e.advertisers.findIndex(function (e) { return e.id == id; });
var isExist = existAdvIndex !== -1;
if (profile.users.includes(e.id) && isExist)
return e;
if (!profile.users.includes(e.id) && !isExist)
return e;
// add advertiser to user
if (profile.users.includes(e.id) && !isExist) {
e.advertisers.push(R.pick(['name', 'brand', 'id'], mockAdvertisers[index]));
return e;
}
// remove advertiser from user
if (!profile.users.includes(e.id) && isExist) {
e.advertisers.splice(existAdvIndex, 1);
return e;
}
});
}
if (profile.brand) {
mockBrands = mockBrands.map(function (e) {
var existAdvIndex = e.advertisers.findIndex(function (e) { return e.id == id; });
var isExist = existAdvIndex !== -1;
if (profile.brand == e.id && isExist)
return e;
if (profile.brand != e.id && !isExist)
return e;
//add advertiser from brand
if (profile.brand == e.id && !isExist) {
e.advertisers.push(R.pick(['name', 'brand', 'id'], mockAdvertisers[index]));
return e;
}
// remove advertiser from brand
if (profile.brand != e.id && isExist) {
e.advertisers.splice(existAdvIndex, 1);
return e;
}
});
}
resolve({ data: mockAdvertisers[index], error: null });
})];
});
});
},
deleteAdvertiser: function (token, id) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
if (token != 'strapi_mock_token') {
resolve({ data: null, error: "Invalid token" });
}
try {
// delete advertiser
var advertiser_1 = mockAdvertisers.find(function (e) { return e.id == id; });
var index = mockAdvertisers.indexOf(advertiser_1);
mockAdvertisers.splice(index, 1);
// remove advertiser from users
var userIds_1 = advertiser_1.users.map(function (e) { return e.id; });
mockUsers = mockUsers.map(function (e) {
if (!userIds_1.includes(e.id))
return e;
var advIdx = e.advertisers.findIndex(function (e) { return e.id == advertiser_1.id; });
e.advertisers.splice(advIdx, 1);
return e;
});
// remove advertiser from brand
mockBrands = mockBrands.map(function (e) {
if (advertiser_1.brand != e.id)
return e;
var advIdx = e.advertisers.findIndex(function (e) { return e.id == advertiser_1.id; });
e.advertisers.splice(advIdx, 1);
return e;
});
}
catch (err) {
resolve({ data: null, error: err });
}
resolve({ data: true, error: null });
})];
});
});
},
};
}
exports.default = mockStrapiClientTool;