public static void clearUserData(Req req) { if (Ctxs.hasContext()) { Ctxs.required().setUser(UserInfo.ANONYMOUS); } if (req.hasToken()) { Map<String, Serializable> token = req.token(); token.remove(Tokens._USER); token.remove(Tokens._SCOPE); } }
@Override public void authorize(UserInfo user) { Ctxs.required().setUser(user); req.token().put(Tokens._USER, user.username); long ttl = Conf.TOKEN.entry("ttl").or(0); long expiresOn = ttl > 0 ? U.time() + ttl : Long.MAX_VALUE; req.token().put(Tokens._EXPIRES, expiresOn); req.tokenChanged.set(true); }
@Override public Object wrap(final Req req, final HandlerInvocation invocation) throws Exception { TokenAuthData auth = HttpUtils.getAuth(req); String username = auth != null ? auth.user : null; if (U.isEmpty(username)) { HttpUtils.clearUserData(req); } Set<String> roles = userRoles(req, username); Set<String> scope = auth != null ? auth.scope : null; if (U.notEmpty(requiredRoles) && !Secure.hasAnyRole(username, roles, requiredRoles)) { throw new SecurityException("The user doesn't have the required roles!"); } Ctx ctx = Ctxs.required(); ctx.setUser(new UserInfo(username, roles, scope)); return invocation.invoke(); }
public static Ctx open(WithContext context) { Ctx ctx = Ctxs.open(context.tag()); ctx.setExchange(context.exchange()); ctx.setPersister(context.persister()); ctx.setUser(context.user()); Coll.assign(ctx.extras(), U.safe(context.extras())); return ctx; }
public static void clearUserData(Req req) { if (Ctxs.hasContext()) { Ctxs.required().setUser(UserInfo.ANONYMOUS); } if (req.hasToken()) { Map<String, Serializable> token = req.token(); token.remove(Tokens._USER); token.remove(Tokens._SCOPE); } }
@Override public Object wrap(final Req req, final HandlerInvocation invocation) throws Exception { TokenAuthData auth = HttpUtils.getAuth(req); String username = auth != null ? auth.user : null; if (U.isEmpty(username)) { HttpUtils.clearUserData(req); } Set<String> roles = userRoles(req, username); Set<String> scope = auth != null ? auth.scope : null; if (U.notEmpty(requiredRoles) && !Secure.hasAnyRole(username, roles, requiredRoles)) { throw new SecurityException("The user doesn't have the required roles!"); } Ctx ctx = Ctxs.required(); ctx.setUser(new UserInfo(username, roles, scope)); return invocation.invoke(); }
@Override public Object handle(HttpExchange x) { x.accessDeniedIf(!Conf.dev()); String username = x.param("user"); U.must(username.matches("\\w+")); username += "@debug"; String email = username; String name = U.capitalized(username); UserInfo user = new UserInfo(username, email, name); Ctxs.ctx().setUser(user); user.saveTo(x.cookiepack()); throw x.goBack(0); } });
private void processRequest(HttpExchangeImpl x) { WebApp app = getApp(x); Ctxs.ctx().setApp(app); Ctxs.ctx().setUser(x.user()); Router router = app.getRouter(); U.notNull(router, "application router"); executeRequest(router, x); // the context must live on, since async jobs might be scheduled... }
@Override public boolean login(String username, String password) { LoginProvider loginProvider = Customization.of(req).loginProvider(); U.must(loginProvider != null, "A login provider wasn't set!"); RolesProvider rolesProvider = Customization.of(req).rolesProvider(); U.must(rolesProvider != null, "A roles provider wasn't set!"); req.tokenChanged.set(true); boolean success; try { success = loginProvider.login(req, username, password); if (success) { Set<String> roles = rolesProvider.getRolesForUser(req, username); long ttl = Conf.TOKEN.entry("ttl").or(0); long expiresOn = ttl > 0 ? U.time() + ttl : Long.MAX_VALUE; UserInfo user = new UserInfo(username, roles, null); Ctxs.required().setUser(user); request().token().put(Tokens._USER, username); request().token().put(Tokens._EXPIRES, expiresOn); } } catch (Throwable e) { throw U.rte("Login error!", e); } return success; }
public static synchronized <T> T executeInCtx(CtxData cd, Callable<T> action) { Ctx ctx = Ctxs.open("call"); ctx.setApp(cd.app()); ctx.setExchange(null); ctx.setUser(new UserInfo(cd.username(), cd.roles())); U.assign(ctx.extras(), cd.extras()); try { return Lmbd.call(action); } finally { Ctxs.close(); } }