This commit is contained in:
Javi Gallego 2019-01-26 12:18:01 +01:00
commit 97badcdb5e
12 changed files with 98 additions and 47 deletions

View File

@ -41,7 +41,7 @@ export function factory($http, $window, $ocLazyLoad, $translatePartialLoader, $t
if (validations) {
promises.push(new Promise(resolve => {
$http.get(`/${moduleName}/validations`).then(
$http.get(`/${moduleName}/api/modelInfo`).then(
json => this.onValidationsReady(json, resolve),
() => resolve()
);

View File

@ -68,7 +68,7 @@ export default class Auth {
logout() {
let promise = this.$http.post('/api/Accounts/logout', null, {
headers: {Authorization: this.vnToken.token}
});
}).catch(() => {});
this.vnToken.unset();
this.loggedIn = false;

View File

@ -2,5 +2,5 @@ Invalid login: Invalid login, remember that distinction is made between uppercas
Could not contact the server: Could not contact the server, make sure you have a connection to the network
Please enter your username: Please enter your username
It seems that the server has fall down: It seems that the server has fall down, wait a few minutes and try again
Your session has expired: Your session has expired
Session has expired: Your session has expired, please login again
Access denied: Access denied

View File

@ -2,5 +2,5 @@ Invalid login: Usuario o contraseña incorrectos, recuerda que se hace distinci
Could not contact the server: No se ha podido contactar con el servidor, asegurate de que dispones de conexión con la red
Please enter your username: Por favor introduce tu nombre de usuario
It seems that the server has fall down: Parece que el servidor se ha caído, espera unos minutos e inténtalo de nuevo
Your session has expired: Tu sesión ha expirado
Session has expired: Tu sesión ha expirado, por favor vuelve a iniciar sesión
Access denied: Acción no permitida

View File

@ -1,7 +1,9 @@
<!DOCTYPE html>
<html ng-app="salix">
<head>
<meta charset="utf-8">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=no"/>
<meta name="mobile-web-app-capable" content="yes"/>
<title vn-title translate></title>
<script src="/acl"></script>
</head>

View File

@ -83,7 +83,7 @@ function $exceptionHandler(vnApp, $window, $state, $injector) {
switch (exception.status) {
case 401:
if ($state.current.name != 'login') {
messageT = 'Your session has expired';
messageT = 'Session has expired';
let params = {continue: $window.location.hash};
$state.go('login', params);
} else

View File

@ -2,6 +2,8 @@
<html ng-app="salix">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=no"/>
<meta name="mobile-web-app-capable" content="yes"/>
<title vn-title translate></title>
</head>
<body>

View File

@ -1,4 +1,63 @@
module.exports = function(app) {
module.exports = Self => {
Self.remoteMethod('modelInfo', {
description: 'Gets all models information',
accepts: [
{
arg: 'ctx',
type: 'Object',
http: {source: 'context'}
}
],
returns: {
type: 'Object',
root: true
},
http: {
path: `/modelInfo`,
verb: 'GET'
}
});
Self.modelInfo = async function(ctx) {
let json = {};
let models = Self.app.models;
for (let modelName in models) {
let model = models[modelName];
let validations = model.validations;
let jsonValidations = {};
for (let fieldName in validations) {
let jsonField = [];
for (let validation of validations[fieldName]) {
let options = validation.options;
if ((options && options.async) ||
(validation.validation == 'custom' && !validation.isExportable))
continue;
let validationCp = Object.assign({}, validation);
if (validationCp.message)
validationCp.message = ctx.req.__(validationCp.message);
jsonField.push(toJson(validationCp));
}
jsonValidations[fieldName] = jsonField;
}
json[modelName] = {
properties: model.definition.rawProperties,
validations: jsonValidations
};
}
return json;
};
function toJson(object) {
let json = {};
@ -20,44 +79,4 @@ module.exports = function(app) {
return json;
}
app.get('/validations', function(req, res) {
let json = {};
let models = app.models;
for (let modelName in models) {
let model = models[modelName];
let validations = model.validations;
let jsonValidations = {};
for (let fieldName in validations) {
let jsonField = [];
for (let validation of validations[fieldName]) {
let options = validation.options;
if ((options && options.async) ||
(validation.validation == 'custom' && !validation.isExportable))
continue;
let validationCp = Object.assign({}, validation);
if (validationCp.message)
validationCp.message = req.__(validationCp.message);
jsonField.push(toJson(validationCp));
}
jsonValidations[fieldName] = jsonField;
}
json[modelName] = {
properties: model.definition.rawProperties,
validations: jsonValidations
};
}
res.set('Content-Type', 'application/json');
res.send(JSON.stringify(json));
});
};

View File

@ -0,0 +1,4 @@
module.exports = function(Self) {
require('../methods/schema/model-info')(Self);
};

View File

@ -0,0 +1,13 @@
{
"name": "Schema",
"base": "PersistedModel",
"acls": [
{
"property": "validations",
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW"
}
]
}

View File

@ -7,4 +7,12 @@ module.exports = function(app) {
version: bootTimestamp
});
});
// FIXME: Fix until the original can be used
app.get('/api/modelInfo', function(req, res) {
app.models.Schema.modelInfo({req}).then(json => {
res.set('Content-Type', 'application/json');
res.send(JSON.stringify(json));
});
});
};

View File

@ -43,5 +43,8 @@
},
"user": {
"dataSource": "vn"
},
"Schema": {
"dataSource": "vn"
}
}