Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
IA2
GMS
Commits
dd8cfb0f
Commit
dd8cfb0f
authored
Oct 07, 2020
by
Sonia Zorba
Browse files
Handled invited registration automatically if first login happens
parent
609cb6b5
Changes
9
Hide whitespace changes
Inline
Side-by-side
gms/pom.xml
View file @
dd8cfb0f
...
...
@@ -165,7 +165,7 @@
<plugin>
<groupId>
org.jacoco
</groupId>
<artifactId>
jacoco-maven-plugin
</artifactId>
<version>
0.8.
4
</version>
<version>
0.8.
6
</version>
<executions>
<execution>
<goals>
...
...
gms/src/main/java/it/inaf/ia2/gms/controller/HomePageController.java
View file @
dd8cfb0f
...
...
@@ -82,9 +82,9 @@ public class HomePageController {
@GetMapping
(
value
=
"/"
,
produces
=
MediaType
.
TEXT_HTML_VALUE
)
public
String
index
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
ServletException
,
IOException
{
Optional
<
InvitedRegistration
>
optReg
=
invitedRegistrationManager
.
completeInvitedRegistrationIfNecessary
();
Optional
<
List
<
InvitedRegistration
>
>
optReg
=
invitedRegistrationManager
.
completeInvitedRegistrationIfNecessary
();
if
(
optReg
.
isPresent
())
{
request
.
setAttribute
(
"invited-registration"
,
optReg
.
get
());
request
.
setAttribute
(
"invited-registration
s
"
,
optReg
.
get
());
return
"/registration-completed"
;
}
...
...
gms/src/main/java/it/inaf/ia2/gms/controller/InvitedRegistrationController.java
View file @
dd8cfb0f
...
...
@@ -5,6 +5,8 @@ import it.inaf.ia2.gms.persistence.model.InvitedRegistration;
import
it.inaf.ia2.gms.service.GroupNameService
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Scanner
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
...
...
@@ -32,7 +34,7 @@ public class InvitedRegistrationController {
String
html
=
getFileContent
(
"invited-registration.html"
)
.
replace
(
"#EMAIL#"
,
invitedRegistration
.
getEmail
())
.
replace
(
"#GROUPS#"
,
getGroupsList
(
invitedRegistration
))
.
replace
(
"#GROUPS#"
,
getGroupsList
(
Collections
.
singletonList
(
invitedRegistration
))
)
.
replace
(
"#HOME#"
,
request
.
getContextPath
());
response
.
getOutputStream
().
print
(
html
);
...
...
@@ -43,14 +45,14 @@ public class InvitedRegistrationController {
response
.
setContentType
(
"text/html;charset=UTF-8"
);
InvitedRegistration
invitedRegistration
=
(
InvitedRegistration
)
request
.
getAttribute
(
"invited-registration"
);
if
(
invitedRegistration
==
null
)
{
List
<
InvitedRegistration
>
invitedRegistration
s
=
(
List
<
InvitedRegistration
>
)
request
.
getAttribute
(
"invited-registration
s
"
);
if
(
invitedRegistration
s
==
null
)
{
// redirect to home
String
baseUrl
=
ServletUriComponentsBuilder
.
fromCurrentContextPath
().
build
().
toUriString
();
response
.
sendRedirect
(
baseUrl
);
}
else
{
String
html
=
getFileContent
(
"registration-completed.html"
)
.
replace
(
"#GROUPS#"
,
getGroupsList
(
invitedRegistration
))
.
replace
(
"#GROUPS#"
,
getGroupsList
(
invitedRegistration
s
))
.
replace
(
"#HOME#"
,
request
.
getContextPath
());
response
.
getOutputStream
().
print
(
html
);
...
...
@@ -64,17 +66,19 @@ public class InvitedRegistrationController {
}
private
String
getFileContent
(
String
templateFileName
)
throws
IOException
{
try
(
InputStream
in
=
InvitedRegistrationController
.
class
.
getClassLoader
().
getResourceAsStream
(
"templates/"
+
templateFileName
))
{
try
(
InputStream
in
=
InvitedRegistrationController
.
class
.
getClassLoader
().
getResourceAsStream
(
"templates/"
+
templateFileName
))
{
Scanner
s
=
new
Scanner
(
in
).
useDelimiter
(
"\\A"
);
return
s
.
hasNext
()
?
s
.
next
()
:
""
;
}
}
private
String
getGroupsList
(
InvitedRegistration
invitedRegistration
)
{
private
String
getGroupsList
(
List
<
InvitedRegistration
>
invitedRegistration
s
)
{
String
groups
=
"<ul>"
;
for
(
String
groupName
:
groupNameService
.
getGroupsNamesFromIdentifiers
(
invitedRegistration
.
getGroupsPermissions
().
keySet
()))
{
groups
+=
"<li>"
+
groupName
+
"</li>"
;
for
(
InvitedRegistration
invitedRegistration
:
invitedRegistrations
)
{
for
(
String
groupName
:
groupNameService
.
getGroupsNamesFromIdentifiers
(
invitedRegistration
.
getGroupsPermissions
().
keySet
()))
{
groups
+=
"<li>"
+
groupName
+
"</li>"
;
}
}
groups
+=
"</ul>"
;
return
groups
;
...
...
gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java
View file @
dd8cfb0f
...
...
@@ -12,6 +12,7 @@ import it.inaf.ia2.gms.model.response.UserPermission;
import
it.inaf.ia2.gms.persistence.GroupsDAO
;
import
it.inaf.ia2.gms.persistence.PermissionsDAO
;
import
it.inaf.ia2.gms.persistence.model.GroupEntity
;
import
it.inaf.ia2.gms.persistence.model.InvitedRegistration
;
import
it.inaf.ia2.gms.persistence.model.PermissionEntity
;
import
it.inaf.ia2.gms.service.GroupNameService
;
import
it.inaf.ia2.gms.service.GroupsService
;
...
...
@@ -89,7 +90,7 @@ public class JWTWebServiceController {
List
<
String
>
names
=
groupNameService
.
getGroupsNames
(
memberships
);
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
String
name
:
names
)
{
pw
.
println
(
name
);
...
...
@@ -127,7 +128,7 @@ public class JWTWebServiceController {
}
if
(
isMember
)
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
pw
.
println
(
group
);
}
}
...
...
@@ -154,7 +155,7 @@ public class JWTWebServiceController {
});
}
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
String
groupName
:
groupNameService
.
getGroupsNames
(
visibleSubgroups
))
{
pw
.
println
(
getShortGroupName
(
groupName
,
group
));
}
...
...
@@ -185,7 +186,7 @@ public class JWTWebServiceController {
}
response
.
setStatus
(
HttpServletResponse
.
SC_CREATED
);
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
pw
.
println
(
groupParam
);
}
}
...
...
@@ -204,7 +205,7 @@ public class JWTWebServiceController {
List
<
GroupEntity
>
groups
=
membershipManager
.
getUserGroups
(
parent
,
userId
);
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
String
groupName
:
groupNameService
.
getGroupsNames
(
groups
))
{
pw
.
println
(
getShortGroupName
(
groupName
,
group
));
}
...
...
@@ -239,7 +240,7 @@ public class JWTWebServiceController {
public
void
getUserPermission
(
@PathVariable
(
"group"
)
Optional
<
String
>
groupNames
,
@RequestParam
(
"user_id"
)
Optional
<
String
>
userId
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
if
(
userId
.
isPresent
())
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
UserPermission
userPermission
:
searchService
.
getUserPermission
(
userId
.
get
(),
permissionsManager
.
getCurrentUserPermissions
(
getRoot
())))
{
String
group
=
String
.
join
(
"."
,
userPermission
.
getGroupCompleteName
());
pw
.
println
(
group
+
" "
+
userPermission
.
getPermission
());
...
...
@@ -247,7 +248,7 @@ public class JWTWebServiceController {
}
}
else
{
GroupEntity
groupEntity
=
getGroupFromNames
(
extractGroupNames
(
groupNames
));
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
it
.
inaf
.
ia2
.
gms
.
model
.
UserPermission
up
:
permissionsManager
.
getAllPermissions
(
groupEntity
))
{
pw
.
println
(
up
.
getUser
().
getId
()
+
" "
+
up
.
getPermission
());
}
...
...
@@ -277,6 +278,28 @@ public class JWTWebServiceController {
response
.
setStatus
(
HttpServletResponse
.
SC_NO_CONTENT
);
}
@GetMapping
(
value
=
"/check-invited-registration"
,
produces
=
MediaType
.
TEXT_PLAIN_VALUE
)
public
void
completeInvitedRegistrationIfNecessary
(
Principal
principal
,
HttpServletResponse
response
)
throws
IOException
{
String
userId
=
principal
.
getName
();
Set
<
String
>
groupIds
=
new
HashSet
<>();
for
(
InvitedRegistration
invitedRegistration
:
invitedRegistrationManager
.
completeInvitedRegistrationIfNecessary
(
userId
))
{
groupIds
.
addAll
(
invitedRegistration
.
getGroupsPermissions
().
keySet
());
}
List
<
GroupEntity
>
groups
=
groupsDAO
.
findGroupsByIds
(
groupIds
);
if
(!
groups
.
isEmpty
())
{
List
<
String
>
names
=
groupNameService
.
getGroupsNames
(
groups
);
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
String
name
:
names
)
{
pw
.
println
(
name
);
}
}
}
}
@PostMapping
(
value
=
"/invited-registration"
,
produces
=
MediaType
.
TEXT_PLAIN_VALUE
)
public
void
addInvitedRegistration
(
@RequestParam
(
"token_hash"
)
String
tokenHash
,
@RequestParam
(
"email"
)
String
email
,
@RequestParam
(
"groups"
)
String
groupNamesAndPermissionsParam
,
HttpServletResponse
response
)
{
...
...
@@ -314,7 +337,7 @@ public class JWTWebServiceController {
}
}
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
try
(
PrintWriter
pw
=
new
PrintWriter
(
response
.
getOutputStream
()))
{
for
(
RapUser
member
:
membershipManager
.
getMembers
(
groupEntity
))
{
if
(
selectedUserIds
==
null
||
selectedUserIds
.
contains
(
member
.
getId
()))
{
pw
.
println
(
member
.
getPrimaryEmail
());
...
...
gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java
View file @
dd8cfb0f
package
it.inaf.ia2.gms.manager
;
import
it.inaf.ia2.gms.authn.SessionData
;
import
it.inaf.ia2.gms.exception.BadRequestException
;
import
it.inaf.ia2.gms.exception.NotFoundException
;
import
it.inaf.ia2.gms.exception.UnauthorizedException
;
...
...
@@ -12,6 +13,7 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO;
import
it.inaf.ia2.gms.persistence.model.GroupEntity
;
import
it.inaf.ia2.gms.persistence.model.InvitedRegistration
;
import
it.inaf.ia2.gms.persistence.model.MembershipEntity
;
import
it.inaf.ia2.gms.rap.RapClient
;
import
it.inaf.ia2.gms.service.PermissionsService
;
import
java.nio.charset.StandardCharsets
;
import
java.security.MessageDigest
;
...
...
@@ -23,6 +25,7 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpSession
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -48,9 +51,15 @@ public class InvitedRegistrationManager extends UserAwareComponent {
private
InvitedRegistrationDAO
invitedRegistrationDAO
;
@Autowired
private
LoggingDAO
loggingDAO
;
private
RapClient
rapClient
;
@Autowired
private
SessionData
sessionData
;
@Autowired
private
LoggingDAO
loggingDAO
;
@Autowired
(
required
=
false
)
private
HttpSession
httpSession
;
public
void
addInvitedRegistration
(
String
tokenHash
,
String
email
,
Map
<
GroupEntity
,
Permission
>
groupsPermissions
)
{
...
...
@@ -93,35 +102,66 @@ public class InvitedRegistrationManager extends UserAwareComponent {
}
}
public
Optional
<
InvitedRegistration
>
completeInvitedRegistrationIfNecessary
()
{
public
Optional
<
List
<
InvitedRegistration
>
>
completeInvitedRegistrationIfNecessary
()
{
InvitedRegistration
invitedRegistration
=
(
InvitedRegistration
)
httpSession
.
getAttribute
(
INVITED_REGISTRATION
);
List
<
InvitedRegistration
>
invitedRegistration
s
=
complete
InvitedRegistration
IfNecessary
(
sessionData
.
getUserId
()
);
if
(
invitedRegistration
!=
null
)
{
InvitedRegistration
invitedRegistrationFromToken
=
(
InvitedRegistration
)
httpSession
.
getAttribute
(
INVITED_REGISTRATION
);
for
(
Map
.
Entry
<
String
,
Permission
>
entry
:
invitedRegistration
.
getGroupsPermissions
().
entrySet
())
{
String
groupId
=
entry
.
getKey
();
String
userId
=
getCurrentUserId
();
if
(
invitedRegistrationFromToken
!=
null
)
{
GroupEntity
groupEntity
=
groupsDAO
.
findGroupById
(
groupId
).
get
();
boolean
alreadyDone
=
invitedRegistrations
.
stream
().
map
(
reg
->
reg
.
getId
())
.
anyMatch
(
id
->
id
.
equals
(
invitedRegistrationFromToken
.
getId
()));
MembershipEntity
membershipEntity
=
new
MembershipEntity
();
membershipEntity
.
setUserId
(
userId
);
membershipEntity
.
setGroupId
(
groupId
);
membershipsDAO
.
addMember
(
membershipEntity
);
permissionsService
.
addPermission
(
groupEntity
,
userId
,
entry
.
getValue
());
if
(!
alreadyDone
)
{
completeInvitedRegistration
(
invitedRegistrationFromToken
);
invitedRegistrations
.
add
(
invitedRegistrationFromToken
);
}
httpSession
.
removeAttribute
(
INVITED_REGISTRATION
);
}
invitedRegistration
.
setUserId
(
getCurrentUserId
());
// FIXME (workaround): separated update for user and done in order to use triggers
invitedRegistrationDAO
.
setRegistrationUser
(
invitedRegistration
);
invitedRegistrationDAO
.
setRegistrationDone
(
invitedRegistration
);
return
Optional
.
ofNullable
(
invitedRegistrations
.
isEmpty
()
?
null
:
invitedRegistrations
);
}
httpSession
.
removeAttribute
(
INVITED_REGISTRATION
);
/**
* This method can be called from web service, since it doesn't rely on
* session.
*/
public
List
<
InvitedRegistration
>
completeInvitedRegistrationIfNecessary
(
String
userId
)
{
List
<
InvitedRegistration
>
invitedRegistrations
=
new
ArrayList
<>();
List
<
String
>
emailAddresses
=
rapClient
.
getUser
(
userId
).
getIdentities
().
stream
()
.
map
(
identity
->
identity
.
getEmail
())
.
collect
(
Collectors
.
toList
());
for
(
InvitedRegistration
invitedRegistration
:
invitedRegistrationDAO
.
getInvitedRegistrationsFromEmailAddresses
(
emailAddresses
))
{
completeInvitedRegistration
(
invitedRegistration
);
invitedRegistrations
.
add
(
invitedRegistration
);
}
return
invitedRegistrations
;
}
private
void
completeInvitedRegistration
(
InvitedRegistration
invitedRegistration
)
{
for
(
Map
.
Entry
<
String
,
Permission
>
entry
:
invitedRegistration
.
getGroupsPermissions
().
entrySet
())
{
String
groupId
=
entry
.
getKey
();
String
userId
=
getCurrentUserId
();
GroupEntity
groupEntity
=
groupsDAO
.
findGroupById
(
groupId
).
get
();
MembershipEntity
membershipEntity
=
new
MembershipEntity
();
membershipEntity
.
setUserId
(
userId
);
membershipEntity
.
setGroupId
(
groupId
);
membershipsDAO
.
addMember
(
membershipEntity
);
permissionsService
.
addPermission
(
groupEntity
,
userId
,
entry
.
getValue
());
}
return
Optional
.
ofNullable
(
invitedRegistration
);
invitedRegistration
.
setUserId
(
getCurrentUserId
());
// FIXME (workaround): separated update for user and done in order to use triggers
invitedRegistrationDAO
.
setRegistrationUser
(
invitedRegistration
);
invitedRegistrationDAO
.
setRegistrationDone
(
invitedRegistration
);
}
public
List
<
InvitedRegistrationItem
>
getInvitedRegistrationsForGroup
(
GroupEntity
group
)
{
...
...
gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java
View file @
dd8cfb0f
...
...
@@ -3,6 +3,8 @@ package it.inaf.ia2.gms.persistence;
import
it.inaf.ia2.gms.model.Permission
;
import
it.inaf.ia2.gms.persistence.model.InvitedRegistration
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Types
;
import
java.util.ArrayList
;
import
java.util.Collections
;
...
...
@@ -150,7 +152,7 @@ public class InvitedRegistrationDAO {
public
List
<
InvitedRegistration
>
getPendingInvitedRegistrationsForGroup
(
String
groupId
)
{
String
sql
=
"SELECT id, email, creation_time, permission\n"
String
sql
=
"SELECT id, email, creation_time,
group_id,
permission\n"
+
"FROM invited_registration_request r\n"
+
"JOIN invited_registration_request_group rg ON r.id = rg.request_id\n"
+
"WHERE done IS NOT TRUE AND rg.group_id = ?"
;
...
...
@@ -160,39 +162,67 @@ public class InvitedRegistrationDAO {
ps
.
setString
(
1
,
groupId
);
},
rs
->
{
// key: id
Map
<
String
,
InvitedRegistration
>
map
=
new
HashMap
<>();
List
<
InvitedRegistration
>
registrations
=
getInvitedRegistrationsFromResultSet
(
rs
);
Collections
.
sort
(
registrations
,
(
reg1
,
reg2
)
->
reg1
.
getEmail
().
compareToIgnoreCase
(
reg2
.
getEmail
()));
return
registrations
;
});
}
public
List
<
InvitedRegistration
>
getInvitedRegistrationsFromEmailAddresses
(
List
<
String
>
addresses
)
{
if
(
addresses
.
isEmpty
())
{
throw
new
IllegalArgumentException
(
"List of email addresses is empty"
);
}
String
sql
=
"SELECT id, email, creation_time, group_id, permission\n"
+
"FROM invited_registration_request r\n"
+
"JOIN invited_registration_request_group rg ON r.id = rg.request_id\n"
+
"WHERE done IS NOT TRUE AND ("
+
String
.
join
(
" OR "
,
Collections
.
nCopies
(
addresses
.
size
(),
"email ILIKE ?"
))
+
")"
;
return
jdbcTemplate
.
query
(
sql
,
ps
->
{
for
(
int
i
=
0
;
i
<
addresses
.
size
();
i
++)
{
ps
.
setString
(
i
+
1
,
addresses
.
get
(
i
));
}
},
rs
->
{
return
getInvitedRegistrationsFromResultSet
(
rs
);
});
}
while
(
rs
.
next
())
{
private
List
<
InvitedRegistration
>
getInvitedRegistrationsFromResultSet
(
ResultSet
rs
)
throws
SQLException
{
String
id
=
rs
.
getString
(
"id"
);
// key: invited registration id
Map
<
String
,
InvitedRegistration
>
map
=
new
HashMap
<>();
InvitedRegistration
reg
=
map
.
get
(
id
);
if
(
reg
==
null
)
{
String
email
=
rs
.
getString
(
"email"
);
Date
creationTime
=
new
Date
(
rs
.
getDate
(
"creation_time"
).
getTime
());
reg
=
new
InvitedRegistration
()
.
setId
(
id
)
.
setEmail
(
email
)
.
setCreationTime
(
creationTime
);
map
.
put
(
id
,
reg
);
}
while
(
rs
.
next
())
{
if
(
reg
.
getGroupsPermissions
()
==
null
)
{
reg
.
setGroupsPermissions
(
new
HashMap
<>());
}
String
id
=
rs
.
getString
(
"id"
);
Permission
permission
=
Permission
.
valueOf
(
rs
.
getString
(
"permission"
));
InvitedRegistration
reg
=
map
.
get
(
id
);
if
(
reg
==
null
)
{
String
email
=
rs
.
getString
(
"email"
);
Date
creationTime
=
new
Date
(
rs
.
getDate
(
"creation_time"
).
getTime
());
reg
=
new
InvitedRegistration
()
.
setId
(
id
)
.
setEmail
(
email
)
.
setCreationTime
(
creationTime
);
map
.
put
(
id
,
reg
);
}
reg
.
getGroupsPermissions
().
put
(
groupId
,
permission
);
}
if
(
reg
.
getGroupsPermissions
()
==
null
)
{
reg
.
setGroupsPermissions
(
new
HashMap
<>());
}
List
<
InvitedRegistration
>
registrat
ion
s
=
new
ArrayList
<>(
map
.
values
(
));
Permission
permiss
ion
=
Permission
.
valueOf
(
rs
.
getString
(
"permission"
));
Collections
.
sort
(
registrations
,
(
reg1
,
reg2
)
->
reg1
.
getEmail
().
compareToIgnoreCase
(
reg2
.
getEmail
()));
String
groupId
=
rs
.
getString
(
"group_id"
);
reg
.
getGroupsPermissions
().
put
(
groupId
,
permission
);
}
return
registrations
;
});
return
new
ArrayList
<>(
map
.
values
());
}
public
void
deleteInvitedRegistrationRequest
(
String
requestId
,
String
groupId
)
{
...
...
gms/src/main/resources/application.properties
View file @
dd8cfb0f
...
...
@@ -17,7 +17,7 @@ logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.jdbc
=
TRACE
logging.level.org.springframework.web
=
TRACE
spring.datasource.url
=
jdbc:postgresql://localhost:5432/
gms2
spring.datasource.url
=
jdbc:postgresql://localhost:5432/
postgres
spring.datasource.username
=
gms
spring.datasource.password
=
gms
...
...
gms/src/test/java/it/inaf/ia2/gms/manager/InvitedRegistrationManagerTest.java
0 → 100644
View file @
dd8cfb0f
package
it.inaf.ia2.gms.manager
;
import
it.inaf.ia2.gms.authn.SessionData
;
import
it.inaf.ia2.gms.model.Identity
;
import
it.inaf.ia2.gms.model.IdentityType
;
import
it.inaf.ia2.gms.model.Permission
;
import
it.inaf.ia2.gms.model.RapUser
;
import
it.inaf.ia2.gms.persistence.GroupsDAO
;
import
it.inaf.ia2.gms.persistence.InvitedRegistrationDAO
;
import
it.inaf.ia2.gms.persistence.LoggingDAO
;
import
it.inaf.ia2.gms.persistence.MembershipsDAO
;
import
it.inaf.ia2.gms.persistence.model.GroupEntity
;
import
it.inaf.ia2.gms.persistence.model.InvitedRegistration
;
import
it.inaf.ia2.gms.rap.RapClient
;
import
it.inaf.ia2.gms.service.PermissionsService
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
javax.servlet.http.HttpSession
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
eq
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
import
org.mockito.junit.MockitoJUnitRunner
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
InvitedRegistrationManagerTest
{
private
static
final
String
USER_ID
=
"USER_ID"
;
private
static
final
String
EMAIL
=
"user@inaf.it"
;
@Mock
private
GroupsDAO
groupsDAO
;
@Mock
private
MembershipsDAO
membershipsDAO
;
@Mock
private
PermissionsService
permissionsService
;
@Mock
private
PermissionsManager
permissionsManager
;
@Mock
private
InvitedRegistrationDAO
invitedRegistrationDAO
;
@Mock
private
RapClient
rapClient
;
@Mock
private
SessionData
sessionData
;
@Mock
private
LoggingDAO
loggingDAO
;
@Mock
private
HttpSession
httpSession
;
@InjectMocks
private
InvitedRegistrationManager
invitedRegistrationManager
;
@Before
public
void
setUp
()
{
UserAwareComponentTestUtil
.
setUser
(
invitedRegistrationManager
,
USER_ID
);
}
@Test
public
void
testAddInvitedRegistration
()
{
Map
<
GroupEntity
,
Permission
>
groupsPermissions
=
new
HashMap
<>();
GroupEntity
groupEntity
=
new
GroupEntity
();
groupEntity
.
setId
(
"b"
);
groupEntity
.
setPath
(
"a.b"
);
groupEntity
.
setName
(
"B"
);
groupsPermissions
.
put
(
groupEntity
,
Permission
.
MANAGE_MEMBERS
);
when
(
permissionsManager
.
getCurrentUserPermission
(
any
())).
thenReturn
(
Permission
.
ADMIN
);
invitedRegistrationManager
.
addInvitedRegistration
(
"token_hash"
,
EMAIL
,
groupsPermissions
);
verify
(
invitedRegistrationDAO
,
times
(
1
)).
addInvitedRegistration
(
any
());
}
@Test
public
void
testCompleteInvitedRegistrationIfNecessaryGetByEmail
()
{
Map
<
String
,
Permission
>
map1
=
new
HashMap
<>();
map1
.
put
(
"g1"
,
Permission
.
MANAGE_MEMBERS
);
InvitedRegistration
regFromToken
=
new
InvitedRegistration
()
.
setId
(
"reg1"
)
.
setEmail
(
EMAIL
)
.
setGroupsPermissions
(
map1
);
when
(
httpSession
.
getAttribute
(
eq
(
"invited-registration"
))).
thenReturn
(
regFromToken
);
when
(
sessionData
.
getUserId
()).
thenReturn
(
USER_ID
);
RapUser
user
=
new
RapUser
();
user
.
setId
(
USER_ID
);
Identity
identity
=
new
Identity
();
identity
.
setType
(
IdentityType
.
EDU_GAIN
);
identity
.
setEmail
(
EMAIL
);
user
.
setIdentities
(
Collections
.
singletonList
(
identity
));
when
(
rapClient
.
getUser
(
eq
(
USER_ID
))).
thenReturn
(
user
);
Map
<
String
,
Permission
>
map2
=
new
HashMap
<>();
map2
.
put
(
"g2"
,
Permission
.
MANAGE_MEMBERS
);
InvitedRegistration
reg2
=
new
InvitedRegistration
()
.
setId
(
"reg2"
)
.
setEmail
(
EMAIL
)
.
setGroupsPermissions
(
map2
);
List
<
InvitedRegistration
>
registrations
=
new
ArrayList
<>();
registrations
.
add
(
regFromToken
);
registrations
.
add
(
reg2
);
when
(
invitedRegistrationDAO
.
getInvitedRegistrationsFromEmailAddresses
(
any
())).
thenReturn
(
registrations
);
GroupEntity
g1
=
new
GroupEntity
();
g1
.
setId
(
"g1"
);
GroupEntity
g2
=
new
GroupEntity
();
g2
.
setId
(
"g2"
);
when
(
groupsDAO
.
findGroupById
(
eq
(
"g1"
))).
thenReturn
(
Optional
.
of
(
g1
));
when
(
groupsDAO
.
findGroupById
(
eq
(
"g2"
))).
thenReturn
(
Optional
.
of
(
g2
));
invitedRegistrationManager
.
completeInvitedRegistrationIfNecessary
();
verify
(
membershipsDAO
,
times
(
2
)).
addMember
(
any
());
verify
(
permissionsService
,
times
(
2
)).
addPermission
(
any
(),
any
(),
any
());