Skip to content
Snippets Groups Projects
Commit 9f5fae50 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Changes in set permission and CLI

parent c67052b0
Branches
No related tags found
No related merge requests found
...@@ -28,17 +28,6 @@ The first super admin user must be added manually, then he/she will be able to a ...@@ -28,17 +28,6 @@ The first super admin user must be added manually, then he/she will be able to a
The value `user_id` is the RAP user id. The value `user_id` is the RAP user id.
## Command line clients
To add a command line client first generate the sha256 of its password:
echo -n password | sha256sum
Then insert the client line into the database:
INSERT INTO gms_client (client_id, client_secret, allowed_actions, ip_filter)
VALUES ('test', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', '{"*"}', NULL);
## Developer notes ## Developer notes
Backend and frontend are 2 separate applications: Backend and frontend are 2 separate applications:
......
...@@ -178,6 +178,13 @@ public class CLI { ...@@ -178,6 +178,13 @@ public class CLI {
client.removeMember(args[argIndex + 1], args[argIndex + 2]); client.removeMember(args[argIndex + 1], args[argIndex + 2]);
System.out.println("Member removed"); System.out.println("Member removed");
break; break;
case "set-permission":
if (argIndex + 3 >= args.length) {
displayUsage();
}
client.setPermission(args[argIndex + 1], args[argIndex + 2], Permission.valueOf(args[argIndex + 3]));
System.out.println("Permission changed");
break;
case "add-permission": case "add-permission":
if (argIndex + 3 >= args.length) { if (argIndex + 3 >= args.length) {
displayUsage(); displayUsage();
...@@ -220,6 +227,7 @@ public class CLI { ...@@ -220,6 +227,7 @@ public class CLI {
+ " delete-group <name1.name2.name3>\n" + " delete-group <name1.name2.name3>\n"
+ " add-member <name1.name2.name3> <user_id>\n" + " add-member <name1.name2.name3> <user_id>\n"
+ " remove-member <name1.name2.name3> <user_id>\n" + " remove-member <name1.name2.name3> <user_id>\n"
+ " set-permission <name1.name2.name3> <user_id> <permission>\n"
+ " add-permission <name1.name2.name3> <user_id> <permission>\n" + " add-permission <name1.name2.name3> <user_id> <permission>\n"
+ " delete-permission <name1.name2.name3> <user_id>\n" + " delete-permission <name1.name2.name3> <user_id>\n"
+ " get-member-email-addresses <name1.name2.name3> [<permission>]"); + " get-member-email-addresses <name1.name2.name3> [<permission>]");
......
...@@ -13,6 +13,7 @@ import it.inaf.ia2.gms.client.call.GetUserPermissionsCall; ...@@ -13,6 +13,7 @@ import it.inaf.ia2.gms.client.call.GetUserPermissionsCall;
import it.inaf.ia2.gms.client.call.ListGroupsCall; import it.inaf.ia2.gms.client.call.ListGroupsCall;
import it.inaf.ia2.gms.client.call.RemoveMemberCall; import it.inaf.ia2.gms.client.call.RemoveMemberCall;
import it.inaf.ia2.gms.client.call.RemovePermissionCall; import it.inaf.ia2.gms.client.call.RemovePermissionCall;
import it.inaf.ia2.gms.client.call.SetPermissionCall;
import it.inaf.ia2.gms.client.model.GroupPermission; import it.inaf.ia2.gms.client.model.GroupPermission;
import it.inaf.ia2.gms.client.model.Permission; import it.inaf.ia2.gms.client.model.Permission;
import it.inaf.ia2.gms.client.model.UserPermission; import it.inaf.ia2.gms.client.model.UserPermission;
...@@ -64,6 +65,10 @@ public class GmsClient { ...@@ -64,6 +65,10 @@ public class GmsClient {
new AddPermissionCall(httpClientWrapper).addPermission(completeGroupName, userId, permission); new AddPermissionCall(httpClientWrapper).addPermission(completeGroupName, userId, permission);
} }
public void setPermission(String completeGroupName, String userId, Permission permission) {
new SetPermissionCall(httpClientWrapper).setPermission(completeGroupName, userId, permission);
}
public void removePermission(String completeGroupName, String userId) { public void removePermission(String completeGroupName, String userId) {
new RemovePermissionCall(httpClientWrapper).removePermission(completeGroupName, userId); new RemovePermissionCall(httpClientWrapper).removePermission(completeGroupName, userId);
} }
......
package it.inaf.ia2.gms.client.call;
import static it.inaf.ia2.gms.client.call.BaseGmsCall.logServerErrorInputStream;
import it.inaf.ia2.gms.client.model.Permission;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SetPermissionCall extends BaseGmsCall {
public SetPermissionCall(HttpClientWrapper clientWrapper) {
super(clientWrapper);
}
public boolean setPermission(String completeGroupName, String userId, Permission permission) {
String endpoint = "permission";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
}
HttpRequest.BodyPublisher requestBody = HttpRequest.BodyPublishers.ofString(
"user_id=" + userId + "&permission=" + permission);
HttpRequest groupsRequest = newHttpRequest(endpoint)
.header("Accept", "text/plain")
.header("Content-Type", "application/x-www-form-urlencoded")
.PUT(requestBody)
.build();
return getClient().sendAsync(groupsRequest, HttpResponse.BodyHandlers.ofInputStream())
.thenApply(response -> {
if (response.statusCode() == 200) {
return true;
}
logServerErrorInputStream(groupsRequest, response);
throw new IllegalStateException("Unable to set permission");
}).join();
}
}
...@@ -59,6 +59,6 @@ public class SessionData { ...@@ -59,6 +59,6 @@ public class SessionData {
} }
public long getExpiresIn() { public long getExpiresIn() {
return (System.currentTimeMillis() - expiration) / 1000; return (expiration - System.currentTimeMillis()) / 1000;
} }
} }
...@@ -37,6 +37,7 @@ import org.springframework.web.bind.annotation.DeleteMapping; ...@@ -37,6 +37,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -254,23 +255,16 @@ public class JWTWebServiceController { ...@@ -254,23 +255,16 @@ public class JWTWebServiceController {
} }
} }
@PostMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE) @PostMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void addPermission(@PathVariable("group") Optional<String> groupNames, HttpServletRequest request, HttpServletResponse response) throws IOException { public void addPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
String targetUserId = request.getParameter("user_id");
if (targetUserId == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing user_id parameter");
return;
}
String permissionParam = request.getParameter("permission");
if (permissionParam == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing permission parameter");
return;
}
GroupEntity groupEntity = getGroupFromNames(extractGroupNames(groupNames)); GroupEntity groupEntity = getGroupFromNames(extractGroupNames(groupNames));
permissionsManager.addPermission(groupEntity, targetUserId, permission);
}
permissionsManager.addPermission(groupEntity, targetUserId, Permission.valueOf(permissionParam)); @PutMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void setPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
GroupEntity groupEntity = getGroupFromNames(extractGroupNames(groupNames));
permissionsManager.createOrUpdatePermission(groupEntity, targetUserId, permission);
} }
@DeleteMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE) @DeleteMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE)
......
...@@ -87,6 +87,11 @@ public class PermissionsManager extends UserAwareComponent { ...@@ -87,6 +87,11 @@ public class PermissionsManager extends UserAwareComponent {
throw unauthorizedExceptionSupplier(group).get(); throw unauthorizedExceptionSupplier(group).get();
} }
public PermissionEntity createOrUpdatePermission(GroupEntity group, String userId, Permission permission) {
verifyUserCanManagePermissions(group);
return permissionsService.createOrUpdatePermission(group, userId, permission);
}
public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission) { public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission) {
verifyUserCanManagePermissions(group); verifyUserCanManagePermissions(group);
return permissionsService.updatePermission(group, userId, permission); return permissionsService.updatePermission(group, userId, permission);
......
...@@ -62,6 +62,17 @@ public class PermissionsService { ...@@ -62,6 +62,17 @@ public class PermissionsService {
return permissionEntity; return permissionEntity;
} }
public PermissionEntity createOrUpdatePermission(GroupEntity group, String userId, Permission permission) {
PermissionEntity permissionEntity = new PermissionEntity();
permissionEntity.setGroupId(group.getId());
permissionEntity.setUserId(userId);
permissionEntity.setPermission(permission);
permissionEntity.setGroupPath(group.getPath());
return permissionsDAO.createOrUpdatePermission(permissionEntity);
}
public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission) { public PermissionEntity updatePermission(GroupEntity group, String userId, Permission permission) {
PermissionEntity permissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId) PermissionEntity permissionEntity = permissionsDAO.findPermissionEntity(group.getId(), userId)
......
package it.inaf.ia2.gms.authn;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
@RunWith(MockitoJUnitRunner.class)
public class SessionDataTest {
@Mock
private HttpServletRequest request;
@InjectMocks
private SessionData sessionData;
@Test
public void testExpired() {
OAuth2AccessToken accessToken = mock(OAuth2AccessToken.class);
when(accessToken.getExpiresIn()).thenReturn(3600);
CustomAuthenticationData data = new CustomAuthenticationData("user",
new HashMap<>(), new ArrayList<>(), accessToken, "refresh_token");
OAuth2Authentication auth = mock(OAuth2Authentication.class);
when(auth.getUserAuthentication()).thenReturn(data);
when(request.getUserPrincipal()).thenReturn(auth);
sessionData.init();
assertTrue(sessionData.getExpiresIn() > 0);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment