Skip to content

Commit 670c7a3

Browse files
Merge pull request #17 from aquality-automation/feature/REPPORTQA-1037
Feature/repportqa 1037
2 parents 1f168d9 + 1625845 commit 670c7a3

18 files changed

+151
-128
lines changed

src/main/java/main/Session.java

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@
99
import main.model.db.dao.project.UserDao;
1010
import main.model.db.imports.Importer;
1111
import main.model.db.imports.TestNameNodeType;
12-
import main.model.dto.ProjectUserDto;
13-
import main.model.dto.TestRunDto;
14-
import main.model.dto.UserDto;
12+
import main.model.dto.*;
1513
import main.model.email.TestRunEmails;
16-
import org.xml.sax.SAXException;
1714

18-
import javax.xml.parsers.ParserConfigurationException;
15+
import javax.naming.AuthenticationException;
16+
import java.util.Collections;
1917
import java.util.List;
2018
import java.util.stream.Collectors;
2119

@@ -25,19 +23,32 @@ public class Session {
2523
private String session;
2624
public ControllerFactory controllerFactory;
2725

28-
public Session(String sessionId) throws AqualityException {
29-
if(isSessionValid(sessionId)){
30-
setUserMembership();
26+
public Session(String sessionId) throws AqualityException, AuthenticationException {
27+
if(isSessionValid(sessionId)) {
28+
controllerFactory = new ControllerFactory(user);
29+
return;
3130
}
32-
controllerFactory = new ControllerFactory(user);
31+
throw new AuthenticationException("Your session is not valid!");
32+
}
33+
34+
public Session(UserDto user) throws AqualityException {
35+
this.user = user;
36+
setUserMembership();
37+
controllerFactory = new ControllerFactory(this.user);
3338
}
3439

35-
public Session(){
40+
@Deprecated
41+
public Session(String importToken, int projectId) throws AqualityException {
3642
user = new UserDto();
37-
user.setAdmin(1);
38-
user.setUnit_coordinator(1);
39-
user.setManager(1);
4043
controllerFactory = new ControllerFactory(user);
44+
if(controllerFactory.getHandler(new ImportTokenDto()).isTokenValid(importToken, projectId)){
45+
ProjectUserDto projectUser = new ProjectUserDto();
46+
projectUser.setProject_id(projectId);
47+
projectUser.setEngineer(1);
48+
projectUser.setViewer(1);
49+
user.setProjectUsers(Collections.singletonList(projectUser));
50+
controllerFactory = new ControllerFactory(user);
51+
}
4152
}
4253

4354
public List<ProjectUserDto> getProjectPermissions(){
@@ -49,11 +60,7 @@ public List<ProjectUserDto> getProjectPermissions(Integer projectId){
4960
}
5061

5162
public Importer getImporter(List<String> filePaths, TestRunDto testRunTemplate, String pattern, String format, TestNameNodeType nodeType, boolean singleTestRun) throws AqualityException {
52-
try {
53-
return new Importer(filePaths, testRunTemplate, pattern, format, nodeType, singleTestRun, user);
54-
} catch (ParserConfigurationException | SAXException e) {
55-
throw new AqualityException("Some Internal SAX error: " + e.getMessage());
56-
}
63+
return new Importer(filePaths, testRunTemplate, pattern, format, nodeType, singleTestRun, user);
5764
}
5865

5966
public TestRunEmails getTestRunEmails(){
@@ -68,7 +75,7 @@ public AdministrationController getAdministrationController() {
6875
return new AdministrationController(user);
6976
}
7077

71-
public ProjectController getProjectController () throws AqualityException {
78+
public ProjectController getProjectController (){
7279
return new ProjectController(user);
7380
}
7481

@@ -84,29 +91,20 @@ public UserDto getCurrentUser() {
8491
return user;
8592
}
8693

87-
public void setCurrentUser(UserDto user) throws AqualityException {
88-
this.user = user;
89-
setUserMembership();
90-
}
91-
9294
private void setUserMembership() throws AqualityException {
9395
ProjectUserDto projectUserDto = new ProjectUserDto();
9496
projectUserDto.setUser_id(user.getId());
9597
user.setProjectUsers(new ProjectUserController(user).getProjectUserForPermissions(projectUserDto));
9698
}
9799

98100
public boolean isSessionValid() throws AqualityException {
99-
return isSessionValid(session);
101+
return isSessionValid(session);
100102
}
101103

102104
private boolean isSessionValid(String sessionId) throws AqualityException {
103-
if(sessionId != null){
104-
UserDao userDao = new UserDao();
105-
user = userDao.IsAuthorized(sessionId);
106-
session = sessionId;
107-
return user != null;
108-
}
109-
user = null;
110-
return false;
105+
UserDao userDao = new UserDao();
106+
user = userDao.GetAuthorizedUser(sessionId);
107+
session = sessionId;
108+
return user != null;
111109
}
112110
}

src/main/java/main/controllers/Administration/UserController.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -103,29 +103,6 @@ public UserDto auth(String authString, boolean ldap) throws AqualityException {
103103
throw new AqualityException("Seems your password was updated. Log in again please.");
104104
}
105105

106-
public UserDto checkSession(String session) throws AqualityException {
107-
Base64 base64 = new Base64();
108-
DateUtils dates = new DateUtils();
109-
String[] strings = StringUtils.newStringUtf8(base64.decode(session)).split(":");
110-
UserDto user = new UserDto();
111-
user.setUser_name(strings[0]);
112-
List<UserDto> users = userDao.searchAll(user);
113-
if(users.size() > 0){
114-
user = users.get(0);
115-
if(!user.getSession_code().equals(session)){
116-
throw new AqualityException("Credentials you've provided are not valid. Reenter please.");
117-
}
118-
if(new Date().after(dates.fromyyyyMMdd(strings[2]))){
119-
throw new AqualityException("Session Expired.");
120-
}
121-
}
122-
else{
123-
throw new AqualityException("Credentials you've provided are not valid. Reenter please.");
124-
}
125-
126-
return user;
127-
}
128-
129106
private List<UserDto> toPublicUsers(List<UserDto> users) {
130107
for (UserDto user :
131108
users) {

src/main/java/main/controllers/ControllerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class ControllerFactory {
1111
public ControllerFactory(UserDto user){
1212
this.user = user;
1313
}
14+
1415
public ProjectController getHandler(ProjectDto entity) {
1516
return new ProjectController(user);
1617
}

src/main/java/main/controllers/Project/ProjectController.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ public ProjectDto create(ProjectDto template) throws AqualityException {
3232

3333
@Override
3434
public List<ProjectDto> get(ProjectDto template) throws AqualityException {
35-
template.setUser_id(baseUser.getId());
35+
if (baseUser.getApiSessionProjectId() != null) {
36+
template.setId(baseUser.getApiSessionProjectId());
37+
} else {
38+
template.setUser_id(baseUser.getId());
39+
}
3640
List<ProjectDto> projects = projectDao.searchAll(template);
3741
return fillCustomers(projects);
3842
}

src/main/java/main/exceptions/AqualityPermissionsException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public class AqualityPermissionsException extends AqualityException {
66
public AqualityPermissionsException(String error, UserDto user) {
7-
super(String.format("[Permissions %s]: " + error, user != null ? user.getUser_name() : "anonymous"));
7+
super(String.format("[Permissions %s]: " + error, user != null && user.getUser_name() != null ? user.getUser_name() : "anonymous"));
88
this.responseCode = 403;
99
}
1010
}
Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package main.model.db.dao.project;
22

3+
import main.controllers.Project.ImportTokenController;
4+
import main.controllers.Project.ProjectUserController;
35
import main.exceptions.AqualityException;
46
import main.exceptions.AqualityPermissionsException;
57
import main.model.db.dao.DAO;
8+
import main.model.dto.ProjectUserDto;
69
import main.model.dto.UserDto;
710
import main.utils.DateUtils;
811
import org.apache.commons.codec.binary.Base64;
912
import org.apache.commons.codec.binary.StringUtils;
1013

14+
import java.util.ArrayList;
15+
import java.util.Collections;
1116
import java.util.Date;
1217
import java.util.List;
1318

@@ -20,25 +25,76 @@ public UserDao() {
2025
remove = "{call REMOVE_USER(?)}";
2126
}
2227

23-
public UserDto IsAuthorized(String sessionId) throws AqualityException {
28+
/**
29+
* Check id session or token is valid
30+
* @param sessionHash Base64 String with Session ID = {username}:{uuid}:{creationDate} or project:{projectId}:{token}
31+
* @return User for session
32+
* @throws AqualityException error about authorization status
33+
*/
34+
public UserDto GetAuthorizedUser(String sessionHash) throws AqualityException {
2435
Base64 base64 = new Base64();
36+
String sessionId = StringUtils.newStringUtf8(base64.decode(sessionHash));
37+
boolean isApiToken = sessionId.startsWith("project");
38+
if(isApiToken){
39+
return IsAuthorizedToken(sessionId);
40+
}
41+
return IsAuthorizedUser(sessionId, sessionHash);
42+
}
43+
44+
/**
45+
* Check If User Authorized
46+
* @param sessionId Session ID = {username}:{uuid}:{creationDate}
47+
* @param sessionHash Hash of Session ID = {username}:{uuid}:{creationDate}
48+
* @return Authorized User
49+
* @throws AqualityException error about authorization status
50+
*/
51+
private UserDto IsAuthorizedUser(String sessionId, String sessionHash) throws AqualityException {
52+
String[] strings = sessionId.split(":");
2553
DateUtils dates = new DateUtils();
26-
String[] strings = StringUtils.newStringUtf8(base64.decode(sessionId)).split(":");
2754
UserDto user = new UserDto();
2855
user.setUser_name(strings[0]);
2956
List<UserDto> users = searchAll(user);
57+
3058
if(users.size() > 0){
3159
user = users.get(0);
32-
if(!user.getSession_code().equals(sessionId)){
33-
throw new AqualityPermissionsException("Credentials you've provided are not valid. Reenter please.", user);
34-
}
35-
if(new Date().after(dates.fromyyyyMMdd(strings[2]))){
36-
throw new AqualityPermissionsException("Session Expired.", user);
60+
if (user.getSession_code().equals(sessionHash)) {
61+
if (new Date().before(dates.fromyyyyMMdd(strings[2]))) {
62+
ProjectUserDto projectUserDto = new ProjectUserDto();
63+
projectUserDto.setUser_id(user.getId());
64+
user.setProjectUsers(new ProjectUserController(user).getProjectUserForPermissions(projectUserDto));
65+
return user;
66+
}
67+
else{
68+
throw new AqualityPermissionsException("Session Expired.", user);
69+
}
3770
}
3871
}
72+
throw new AqualityPermissionsException("Credentials you've provided are not valid. Reenter please.", user);
73+
}
74+
75+
/**
76+
* Check If Token Valid
77+
* @param sessionId Session ID = project:{projectId}:{token}
78+
* @return Project Engineer
79+
* @throws AqualityException error about authorization status
80+
*/
81+
private UserDto IsAuthorizedToken(String sessionId) throws AqualityException {
82+
String[] strings = sessionId.split(":");
83+
Integer projectId = Integer.parseInt(strings[1]);
84+
boolean isTokenValid = new ImportTokenController(new UserDto()).isTokenValid(strings[2],projectId);
85+
86+
if(isTokenValid){
87+
UserDto user = new UserDto();
88+
ProjectUserDto projectUser = new ProjectUserDto();
89+
projectUser.setProject_id(projectId);
90+
projectUser.setViewer(1);
91+
projectUser.setEngineer(1);
92+
user.setProjectUsers(Collections.singletonList(projectUser));
93+
user.setApiSessionProjectId(projectId);
94+
return user;
95+
}
3996
else{
40-
throw new AqualityPermissionsException("Credentials you've provided are not valid. Reenter please.", user);
97+
throw new AqualityPermissionsException("The import token is not valid", null);
4198
}
42-
return user;
4399
}
44100
}

src/main/java/main/model/db/imports/Importer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import main.model.dto.ImportDto;
55
import main.model.dto.TestRunDto;
66
import main.model.dto.UserDto;
7-
import org.xml.sax.SAXException;
87

9-
import javax.xml.parsers.ParserConfigurationException;
108
import java.io.File;
119
import java.util.ArrayList;
1210
import java.util.Collections;
@@ -27,7 +25,7 @@ public class Importer extends BaseImporter {
2725

2826
private HandlerFactory handlerFactory = new HandlerFactory();
2927

30-
public Importer(List<String> files, TestRunDto testRunTemplate, String pattern, String type, TestNameNodeType testNameNodeType, boolean singleTestRun, UserDto user) throws AqualityException, ParserConfigurationException, SAXException {
28+
public Importer(List<String> files, TestRunDto testRunTemplate, String pattern, String type, TestNameNodeType testNameNodeType, boolean singleTestRun, UserDto user) {
3129
super(testRunTemplate.getProject_id(), pattern, user);
3230
this.environment = testRunTemplate.getExecution_environment();
3331
this.ci_build = testRunTemplate.getCi_build();

src/main/java/main/model/dto/ProjectUserDto.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.Data; import lombok.EqualsAndHashCode;
44
import main.annotations.*;
5+
import main.utils.BooleanUtil;
56

67

78
@Data @EqualsAndHashCode(callSuper = true)
@@ -29,22 +30,22 @@ public class ProjectUserDto extends BaseDto {
2930
private Integer viewer;
3031

3132
public boolean isAdmin(){
32-
return admin > 0;
33+
return BooleanUtil.intToBoolean(admin);
3334
}
3435

3536
public boolean isManager(){
36-
return manager > 0;
37+
return BooleanUtil.intToBoolean(manager);
3738
}
3839

3940
public boolean isEngineer(){
40-
return engineer > 0;
41+
return BooleanUtil.intToBoolean(engineer);
4142
}
4243

4344
public boolean isViewer(){
44-
return viewer > 0;
45+
return BooleanUtil.intToBoolean(viewer);
4546
}
4647

4748
public boolean isEditor() {
48-
return admin > 0 || manager > 0 || engineer > 0;
49+
return isAdmin() || isManager() || isEngineer();
4950
}
5051
}

src/main/java/main/model/dto/UserDto.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import main.annotations.DataBaseSearchable;
88
import main.exceptions.AqualityException;
99
import main.model.db.dao.project.TestSuiteDao;
10+
import main.utils.BooleanUtil;
1011

1112
import java.util.List;
1213

@@ -69,29 +70,30 @@ public class UserDto extends BaseDto {
6970
@DataBaseInsert
7071
private Integer audit_notifications;
7172
private List<ProjectUserDto> projectUsers;
73+
private Integer ApiSessionProjectId;
7274

7375
public boolean isAdmin(){
74-
return admin > 0;
76+
return BooleanUtil.intToBoolean(admin);
7577
}
7678

7779
public boolean isCoordinator(){
78-
return unit_coordinator > 0;
80+
return BooleanUtil.intToBoolean(unit_coordinator);
7981
}
8082

8183
public boolean isAuditor(){
82-
return auditor > 0;
84+
return BooleanUtil.intToBoolean(auditor);
8385
}
8486

8587
public boolean isAuditAdmin(){
86-
return audit_admin > 0;
88+
return BooleanUtil.intToBoolean(audit_admin);
8789
}
8890

8991
public boolean isManager(){
90-
return manager > 0;
92+
return BooleanUtil.intToBoolean(manager);
9193
}
9294

9395
public boolean isFromGlobalManagement(){
94-
return isManager() || isAuditor() || isAuditAdmin() || account_manager > 0 || isCoordinator() || head > 0;
96+
return isManager() || isAuditor() || isAuditAdmin() || BooleanUtil.intToBoolean(account_manager) || isCoordinator() || BooleanUtil.intToBoolean(head);
9597
}
9698

9799
public ProjectUserDto getProjectUser(Integer projectId){
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package main.utils;
2+
3+
public class BooleanUtil {
4+
public static boolean intToBoolean(Integer value){
5+
return value != null && value > 0;
6+
}
7+
}

0 commit comments

Comments
 (0)