package org.yamcs.web.rest;
import java.util.Arrays;
import org.yamcs.management.ManagementService;
import org.yamcs.protobuf.SchemaYamcsManagement;
import org.yamcs.protobuf.YamcsManagement.ClientInfo;
import org.yamcs.protobuf.YamcsManagement.UserInfo;
import org.yamcs.security.Privilege;
import org.yamcs.security.User;
import org.yamcs.web.HttpException;
/**
* Handles incoming requests related to the user
*/
public class UserRestHandler extends RestHandler {
@Route(path = "/api/user", method = "GET")
public void getUser(RestRequest req) throws HttpException {
User user = Privilege.getInstance().getUser(req.getAuthToken());
UserInfo.Builder userInfob;
if (user == null) {
userInfob = buildFullyPrivilegedUser();
userInfob.setLogin(Privilege.getDefaultUser());
} else {
userInfob = UserInfo.newBuilder();
userInfob.setLogin(user.getPrincipalName());
userInfob.addAllRoles(Arrays.asList(user.getRoles()));
userInfob.addAllTmParaPrivileges(user.getTmParaPrivileges());
userInfob.addAllTmParaSetPrivileges(user.getTmParaSetPrivileges());
userInfob.addAllTmPacketPrivileges(user.getTmPacketPrivileges());
userInfob.addAllTcPrivileges(user.getTcPrivileges());
userInfob.addAllSystemPrivileges(user.getSystemPrivileges());
}
for (ClientInfo ci : ManagementService.getInstance().getClientInfo(userInfob.getLogin())) {
userInfob.addClientInfo(ci);
}
UserInfo info = userInfob.build();
completeOK(req, info, SchemaYamcsManagement.UserInfo.WRITE);
}
private UserInfo.Builder buildFullyPrivilegedUser() {
UserInfo.Builder userInfob = UserInfo.newBuilder();
userInfob.addRoles("admin");
userInfob.addTmParaPrivileges(".*");
userInfob.addTmParaSetPrivileges(".*");
userInfob.addTmPacketPrivileges(".*");
userInfob.addTcPrivileges(".*");
for(Privilege.SystemPrivilege sp : Privilege.SystemPrivilege.values()) {
userInfob.addSystemPrivileges(sp.name());
}
return userInfob;
}
}