Skip to content
IA2UserIdentifier.java 1.53 KiB
Newer Older
package it.inaf.ia2.vollt;

import it.inaf.ia2.aa.ServiceLocator;
import it.inaf.ia2.aa.data.User;
import it.inaf.ia2.aa.jwt.InvalidTokenException;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import uws.UWSException;
import uws.job.user.JobOwner;
import uws.service.UWSUrl;
import uws.service.UserIdentifier;

public class IA2UserIdentifier implements UserIdentifier {

    @Override
    public JobOwner extractUserId(UWSUrl urlInterpreter, HttpServletRequest request) throws UWSException {

        String token = null;

        String header = request.getHeader("Authorization");
        if (header != null && !header.isEmpty()) {
            if (header.startsWith("Bearer ")) {
                token = header.substring("Bearer ".length());
            }
        }

        return getUser(token);
    }

    @Override
    public JobOwner restoreUser(String id, String pseudo, Map<String, Object> otherData) throws UWSException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    private CustomJobOwner getUser(String token) throws UWSException {

        if (token != null) {
            try {
                User user = ServiceLocator.getInstance().getUserManager().getUserFromAccessToken(token);
                return new CustomJobOwner(user.getName(), user.getGroups());
            } catch (InvalidTokenException ex) {
                throw new UWSException(401, "Invalid token");
            }
        }

        return new CustomJobOwner("anonymous", Arrays.asList());
    }
}