package controllers;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import constant.Token;
import play.mvc.Http.Context;
import play.mvc.Http.Request;
import play.mvc.Result;
import play.mvc.Security;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
final String requestRepoId = extractRepositoryId(ctx.request());
final String sessionRepoId = ctx.session().get(Token.LOGIN_REPOSITORY_ID);
if (StringUtils.isBlank(sessionRepoId) || sessionRepoId.equals(requestRepoId)) {
return ctx.session().get(Token.LOGIN_USER_ID);
}
// Redirect to login page
return null;
}
@Override
public Result onUnauthorized(Context ctx) {
String sessionRepoId = ctx.session().get(Token.LOGIN_REPOSITORY_ID);
if(StringUtils.isBlank(sessionRepoId)){
final String requestRepoId = extractRepositoryId(ctx.request());
if(StringUtils.isBlank(requestRepoId)){
return redirect(routes.Application.error());
}else{
return redirect(routes.Application.login(requestRepoId));
}
}else{
return redirect(routes.Application.login(sessionRepoId));
}
}
private String extractRepositoryId(Request request) {
String uri = request.uri();
Pattern p = Pattern.compile("^/ui/repo/([^/]*).*");
Matcher m = p.matcher(uri);
if (m.find()) {
return m.group(1);
}
return null;
}
}