protected String username() { if (sudo) { return SUPERADMIN; } return asUsername != null ? asUsername : Ctxs.ctx().username(); }
protected EntityManager em() { return Ctxs.ctx().persister(); }
public static void attach(Ctx ctx) { if (!hasContext()) { if (ctx != null) { CTXS.set(ctx); } } else { throw new IllegalStateException("The context was already opened: " + ctx()); } }
@Override public <T> T persister() { return Ctxs.ctx().persister(); }
public static WebApp app() { return Ctxs.ctx().app(); }
public static Req req() { return Ctxs.ctx().exchange(); }
@Override public synchronized HttpExchange authorize(Class<?> clazz) { return accessDeniedIf(!Secure.canAccessClass(Ctxs.ctx().username(), clazz)); }
@Override public synchronized Map<String, Object> model() { if (model == null) { model = U.map("req", this, "data", lazyData, "files", lazyFiles, "cookies", lazyCookies, "headers", lazyHeaders); model.put("verb", verb()); model.put("uri", uri()); model.put("path", path()); model.put("home", home()); model.put("host", host()); model.put("dev", isDevMode()); WebApp app = AppCtx.app(); model.put("app", app); model.put("menu", app != null ? app.getMenu() : null); List<String> providers = U.list("google", "facebook", "linkedin", "github"); Map<String, Object> oauth = U.map("popup", true, "providers", providers); model.put("oauth", oauth); boolean loggedIn = Ctxs.ctx().isLoggedIn(); model.put("loggedIn", loggedIn); model.put("user", loggedIn ? Ctxs.ctx().user() : null); model.put("version", RapidoidInfo.version()); } return model; }
private static synchronized List<Class<?>> scanClasses(String packageName, String nameRegex, Predicate<Class<?>> filter, Class<? extends Annotation> annotated, ClassLoader classLoader) { packageName = U.or(packageName, ""); List<?> cacheKey = null; WebApp app = Ctxs.ctx().app(); Classes appClasses = app.getClasses(); Map<List<?>, List<Class<?>>> cache = appClasses.getCache(); cacheKey = U.list(packageName, nameRegex, filter, annotated, classLoader); List<Class<?>> cachedClasses = cache.get(cacheKey); if (cachedClasses != null) { return cachedClasses; } long startingAt = U.time(); Log.info("Filtering " + appClasses.size() + " classes", "annotated", annotated, "package", packageName, "name", nameRegex); Pattern regex = nameRegex != null ? Pattern.compile(nameRegex) : null; List<Class<?>> classes = filterClasses(appClasses, packageName, regex, filter, annotated); cache.put(cacheKey, classes); long timeMs = U.time() - startingAt; Log.info("Finished classpath scan", "time", timeMs + "ms", "classes", classes); return classes; }
public static WebApp openRootContext() { WebApp app = WebAppGroup.root(); WebAppGroup.main().setDefaultApp(app); Ctxs.open("root"); Ctxs.ctx().setApp(app); Plugins.register(new AppClasspathEntitiesPlugin()); return app; }
@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); } });
@Override public void process(Channel ctx) { T exchange = pool(ctx.helper()).get(); assert Cls.instanceOf(exchange, exchangeType); exchange.reset(); exchange.setConnection(ctx); Ctxs.open("x-request"); try { Ctxs.ctx().setExchange(exchange); process(ctx, exchange); } finally { Ctxs.close(); } }
Ctxs.ctx().setExchange(x);