package com.thundermoose.plugins.user;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.sal.api.user.UserProfile;
import com.thundermoose.plugins.admin.AdminConfigDao;
import com.thundermoose.plugins.utils.Encrypter;
import com.thundermoose.plugins.utils.Utils;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Base64;
@Path("/user")
public class UserConfigResource {
private final UserManager userManager;
private final AdminConfigDao adminDao;
private final UserConfigDao userDao;
private final Utils utils;
public UserConfigResource(UserManager userManager, AdminConfigDao adminDao, UserConfigDao userDao, Utils utils) {
this.userManager = userManager;
this.adminDao = adminDao;
this.userDao = userDao;
this.utils = utils;
}
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public Response getConfig(@Context HttpServletRequest request) {
UserProfile user = userManager.getRemoteUser();
String username = user.getUsername();
UserConfig config = userDao.getUserConfig(username);
if (config.getToken() == null) {
config.setToken(generateEncryptedToken(username));
userDao.setUserConfig(username, config);
}
return Response.ok(config).build();
}
@GET
@Path("/regenerate-token")
@Produces(MediaType.APPLICATION_JSON)
public Response regenerateToken(@Context HttpServletRequest request) {
UserProfile user = userManager.getRemoteUser();
String username = user.getUsername();
userDao.setUserConfig(username, new UserConfig(generateEncryptedToken(username)));
return Response.ok().build();
}
private String generateEncryptedToken(String username) {
Encrypter encrypter = new Encrypter(Base64.getDecoder().decode(adminDao.getAdminConfig().getKey()));
return encrypter.encrypt(utils.generateTokenForUser(username, adminDao.getAdminConfig().getTtl()));
}
}