realm-js/tests/shared/js/admin-user-helper.js

107 lines
3.7 KiB
JavaScript
Raw Normal View History

'use strict';
function node_require(module) {
return require(module);
2017-07-07 10:54:58 +00:00
}
let fs = node_require("fs");
let path = node_require("path");
var Realm = node_require('realm');
function getObjectServerPath() {
const pathParts = __dirname.split(path.sep);
let objectServerPath;
for(let p = pathParts.length; p >= 0; p--) {
const candidatePathParts = pathParts.slice(0, p);
candidatePathParts.push("object-server-for-testing");
const candidatePath = candidatePathParts.join(path.sep);
if (fs.existsSync(candidatePath)) {
return candidatePath;
}
}
return null;
}
function getAdminToken() {
const objectServerPath = getObjectServerPath();
if(objectServerPath) {
const accessTokenPath = path.resolve(objectServerPath, "admin_token.base64");
if(fs.existsSync(accessTokenPath)) {
return fs.readFileSync(accessTokenPath, "utf-8");
} else {
throw new Error("Couldn´t locate the admin token, used to access the realm object server.");
}
} else {
throw new Error("Couldn´t locate the realm object server.");
}
}
function random(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
exports.createAdminUser = function () {
return new Promise((resolve, reject) => {
2017-07-07 07:30:24 +00:00
let isAdminRetryCounter = 0;
let newAdminName = 'admin' + random(1, 100000);
let password = '123';
Realm.Sync.User.register('http://localhost:9080', newAdminName, password, (error, user) => {
if (error) {
reject(error);
} else {
let userIdentity = user.identity;
user.logout();
let admin_token_user = Realm.Sync.User.adminUser(getAdminToken());
const config = {
sync: {
user: admin_token_user,
url: `realm://localhost:9080/__admin`,
error: err =>
console.log('Error opening __admin realm ' + err.user + ' ' + err.url + ' ' + err.state),
}
};
Realm.open(config).then(realm => {
2017-07-07 13:44:54 +00:00
let pendingAdminUser = realm.objectForPrimaryKey('User', userIdentity);
realm.write(() => {
pendingAdminUser.isAdmin = true;
});
admin_token_user.logout();
2017-07-07 13:38:13 +00:00
}).then(() => {
let waitForServerToUpdateAdminUser = function () {
2017-07-07 07:30:24 +00:00
isAdminRetryCounter++;
if (isAdminRetryCounter > 10) {
reject("admin-user-helper: Create admin user timeout");
return;
}
Realm.Sync.User.login('http://localhost:9080', newAdminName, password, (error, newAdminUser) => {
if (error) {
reject(error);
} else {
let isAdmin = newAdminUser.isAdmin;
2017-07-07 07:30:24 +00:00
user.logout();
if (!isAdmin) {
setTimeout(waitForServerToUpdateAdminUser, 500);
return;
}
resolve({
username: newAdminName,
2017-07-07 13:38:13 +00:00
password
});
}
});
}
waitForServerToUpdateAdminUser();
});
}
});
});
}