Skip to content

Commit 13d740c

Browse files
ref: app repository
1 parent 70dd3f8 commit 13d740c

3 files changed

Lines changed: 147 additions & 116 deletions

File tree

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
const db = require('../db');
2+
3+
function deleteAppRel(docker_image) {
4+
return new Promise((resolve, reject) => {
5+
try {
6+
db.query(`DELETE FROM role_has_app WHERE app_docker_image = ?`, [docker_image], (error, results) => {
7+
if (error) {
8+
console.error('Error a l\'eliminar relacions existents:', error);
9+
reject();
10+
}
11+
resolve();
12+
});
13+
}
14+
catch (err) {
15+
console.error('Error a l\'eliminar relacions existents:', err);
16+
}
17+
});
18+
}
19+
20+
function deleteApp(docker_image) {
21+
return new Promise((resolve, reject) => {
22+
try {
23+
db.query(`DELETE FROM app WHERE docker_image = ?`, [docker_image], (error, results) => {
24+
if (error) {
25+
console.error('Error a l\'eliminar dades existens de l\'app:', error);
26+
reject();
27+
}
28+
resolve();
29+
});
30+
31+
}
32+
catch (err) {
33+
console.error('Error a l\'eliminar relacions existents:', err);
34+
}
35+
});
36+
}
37+
38+
function addApp(app) {
39+
return new Promise((resolve, reject) => {
40+
db.query(`INSERT INTO app (docker_image, name, logo, availableUnauth, availableAnyAuth)
41+
VALUES (?, ?, ?, ?, ?)`, [app.docker_image, app.name, app.logo, app.availableUnauth, app.availableAnyAuth], (error, results) => {
42+
if (error) {
43+
console.error('Error al insertar app la bdd:', error);
44+
reject();
45+
}
46+
resolve();
47+
});
48+
});
49+
}
50+
51+
function addAppRole(roleid, docker_image) {
52+
return new Promise((resolve, reject) => {
53+
db.query(`INSERT INTO role_has_app (role_id, app_docker_image)
54+
VALUES (?, ?)`, [roleid, docker_image], (error, results) => {
55+
if (error) {
56+
console.error('Error al insertar rols d\'app la bdd:', error);
57+
reject();
58+
}
59+
resolve();
60+
});
61+
});
62+
}
63+
64+
function getAppsWithRoles() {
65+
return new Promise((resolve, reject) => {
66+
db.query(`SELECT docker_image, name, logo, availableUnauth, availableAnyAuth, GROUP_CONCAT(t1.role_id) roles FROM app t0
67+
LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
68+
GROUP BY docker_image, name, logo, availableUnauth, availableAnyAuth`
69+
, [catalog.repositories], (error, results) => {
70+
if (error) {
71+
console.error('Error al consultar la bdd:', error);
72+
reject();
73+
}
74+
resolve(results);
75+
});
76+
});
77+
}
78+
79+
function getAppsWithAccess(user, role, isAdmin) {
80+
let query = 'SELECT DISTINCT docker_image, name, logo FROM app t0 ';
81+
if (!isAdmin)
82+
query = query + `LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
83+
WHERE availableUnauth = 1
84+
${user ? 'OR availableAnyAuth = 1' : ''}
85+
${role != null ? 'OR t1.role_id = ?' : ''}
86+
`;
87+
return new Promise((resolve, reject) => {
88+
db.query(query, [role], (error, results) => {
89+
if (error) {
90+
console.error('Error al consultar la bdd:', error);
91+
reject();
92+
}
93+
resolve(results);
94+
});
95+
});
96+
}
97+
98+
function checkUserAppAuthorization(filter) {
99+
let query = `SELECT DISTINCT docker_image FROM app t0
100+
LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
101+
WHERE docker_image = ? and (availableUnauth = 1
102+
${filter.user ? 'OR availableAnyAuth = 1' : ''}
103+
${filter.role != null ? 'OR t1.role_id = ?' : ''})
104+
`;
105+
return new Promise((resolve, reject) => {
106+
db.query(query, [filter.app, filter.role], (error, results) => {
107+
resolve(!error && results.length > 0);
108+
});
109+
});
110+
}
111+
112+
module.exports = {
113+
deleteAppRel,
114+
deleteApp,
115+
addApp,
116+
addAppRole,
117+
getAppsWithRoles,
118+
getAppsWithAccess,
119+
checkUserAppAuthorization
120+
}

web-server/server/service/app.js

Lines changed: 26 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,20 @@
1-
const db = require('../db');
1+
const appRepository = require('../repository/app');
22

33
purgeAppData = async function (app) {
44
//Eliminem totes les dades de les relacions existents
5-
await new Promise((resolve, reject) => {
6-
try {
7-
db.query(`DELETE FROM role_has_app WHERE app_docker_image = ?`, [app.docker_image], (error, results) => {
8-
if (error) {
9-
console.error('Error a l\'eliminar relacions existents:', error);
10-
reject();
11-
}
12-
resolve();
13-
});
14-
}
15-
catch (err) {
16-
console.error('Error a l\'eliminar relacions existents:', err);
17-
}
18-
});
5+
await appRepository.deleteAppRel(app.docker_image);
196

207
//Eliminem dades de l'app
21-
await new Promise((resolve, reject) => {
22-
try {
23-
db.query(`DELETE FROM app WHERE docker_image = ?`, [app.docker_image], (error, results) => {
24-
if (error) {
25-
console.error('Error a l\'eliminar dades existens de l\'app:', error);
26-
reject();
27-
}
28-
resolve();
29-
});
30-
31-
}
32-
catch (err) {
33-
console.error('Error a l\'eliminar relacions existents:', err);
34-
}
35-
});
8+
await appRepository.deleteApp(app.docker_image);
369
}
3710

3811
insertApp = async function (app) {
39-
await new Promise((resolve, reject) => {
40-
db.query(`INSERT INTO app (docker_image, name, logo, availableUnauth, availableAnyAuth)
41-
VALUES (?, ?, ?, ?, ?)`, [app.docker_image, app.name, app.logo, app.availableUnauth, app.availableAnyAuth], (error, results) => {
42-
if (error) {
43-
console.error('Error al insertar app la bdd:', error);
44-
reject();
45-
}
46-
resolve();
47-
});
48-
});
12+
await appRepository.addApp(app);
4913
}
5014

5115
insertAppRoles = async function (app) {
5216
app.roles.map(async x => {
53-
await new Promise((resolve, reject) => {
54-
db.query(`INSERT INTO role_has_app (role_id, app_docker_image)
55-
VALUES (?, ?)`, [x, app.docker_image], (error, results) => {
56-
if (error) {
57-
console.error('Error al insertar rols d\'app la bdd:', error);
58-
reject();
59-
}
60-
resolve();
61-
});
62-
});
17+
await appRepository.addAppRole(x,app.docker_image);
6318
});
6419
}
6520

@@ -78,29 +33,16 @@ module.exports = {
7833
});//Inicialment totes son noves
7934

8035
//Marquem i emplenem aquelles del cataleg que ja tenim registrades
81-
await new Promise((resolve, reject) => {
82-
db.query(`SELECT docker_image, name, logo, availableUnauth, availableAnyAuth, GROUP_CONCAT(t1.role_id) roles FROM app t0
83-
LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
84-
GROUP BY docker_image, name, logo, availableUnauth, availableAnyAuth`
85-
, [catalog.repositories], (error, results) => {
86-
if (error) {
87-
console.error('Error al consultar la bdd:', error);
88-
reject();
89-
}
90-
else {
91-
results.forEach(app => {
92-
if (appsCataleg[app.docker_image]) {
93-
appsCataleg[app.docker_image].pendingConfig = false;
94-
appsCataleg[app.docker_image].name = app.name;
95-
appsCataleg[app.docker_image].logo = app.logo;
96-
appsCataleg[app.docker_image].availableUnauth = app.availableUnauth.toString() === '1';
97-
appsCataleg[app.docker_image].availableAnyAuth = app.availableAnyAuth.toString() === '1';
98-
appsCataleg[app.docker_image].roles = app.roles ? app.roles.split(',').map(x => parseInt(x)) : [];
99-
}
100-
})
101-
}
102-
resolve();
103-
});
36+
const results = await appRepository.getAppsWithRoles();
37+
results.forEach(app => {
38+
if (appsCataleg[app.docker_image]) {
39+
appsCataleg[app.docker_image].pendingConfig = false;
40+
appsCataleg[app.docker_image].name = app.name;
41+
appsCataleg[app.docker_image].logo = app.logo;
42+
appsCataleg[app.docker_image].availableUnauth = app.availableUnauth.toString() === '1';
43+
appsCataleg[app.docker_image].availableAnyAuth = app.availableAnyAuth.toString() === '1';
44+
appsCataleg[app.docker_image].roles = app.roles ? app.roles.split(',').map(x => parseInt(x)) : [];
45+
}
10446
});
10547

10648
//retornem les imatges
@@ -130,32 +72,16 @@ module.exports = {
13072
const filteredApps = [];
13173

13274
//Fetching de les apps a les que tenim accés
133-
let query = 'SELECT DISTINCT docker_image, name, logo FROM app t0 ';
134-
if(!filter.isAdmin)
135-
query = query + `LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
136-
WHERE availableUnauth = 1
137-
${filter.user?'OR availableAnyAuth = 1':''}
138-
${filter.role!=null?'OR t1.role_id = ?':''}
139-
`;
140-
await new Promise((resolve, reject) => {
141-
db.query(query, [filter.role], (error, results) => {
142-
if (error) {
143-
console.error('Error al consultar la bdd:', error);
144-
reject();
145-
}
146-
else {
147-
results.forEach(app => {
148-
if (appsCataleg[app.docker_image]) {
149-
filteredApps.push({
150-
image: app.docker_image,
151-
name: app.name,
152-
ico: app.logo
153-
})
154-
}
155-
})
156-
}
157-
resolve();
158-
});
75+
76+
const results = await appRepository.getAppsWithAccess(filter.user, filter.role, filter.isAdmin);
77+
results.forEach(app => {
78+
if (appsCataleg[app.docker_image]) {
79+
filteredApps.push({
80+
image: app.docker_image,
81+
name: app.name,
82+
ico: app.logo
83+
})
84+
}
15985
});
16086

16187
//retornem les imatges
@@ -167,22 +93,7 @@ module.exports = {
16793
//Si és admin té accés a tot
16894
if(filter.isAdmin) return true;
16995

170-
let canAccess = false;
171-
17296
//Si no és admin comprovem que l'applicació estigui disponible
173-
let query = `SELECT DISTINCT docker_image FROM app t0
174-
LEFT JOIN role_has_app t1 ON t0.docker_image = t1.app_docker_image
175-
WHERE docker_image = ? and (availableUnauth = 1
176-
${filter.user?'OR availableAnyAuth = 1':''}
177-
${filter.role!=null?'OR t1.role_id = ?':''})
178-
`;
179-
await new Promise((resolve, reject) => {
180-
db.query(query, [filter.app, filter.role], (error, results) => {
181-
canAccess = !error && results.length>0;
182-
resolve();
183-
});
184-
});
185-
186-
return canAccess;
97+
return await appRepository.checkUserAppAuthorization(filter);
18798
},
18899
}

web-server/server/service/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const REFRESH = 10000; //10 per cada minut
22
const TIMEOUT = 60000; //1 min
3-
const MS_ACCEPTABLES = 250;
3+
const MS_ACCEPTABLES = 100;
44
const LOCAL_ADDRESS = process.env.LOCAL_ADDRESS || '192.168.56.101';
55

66
//Estructura que manté l'status de cada servidor d'apps

0 commit comments

Comments
 (0)