@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;
}