use of com.pratilipi.common.type.Website in project pratilipi by Pratilipi.
the class PratilipiSite method doGet.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
// Setting user's author profile's default language, if not set already
if (UxModeFilter.getFilterLanguage() != null) {
Author author = dataAccessor.getAuthorByUserId(AccessTokenFilter.getAccessToken().getUserId());
if (author != null && author.getLanguage() == null) {
author.setLanguage(UxModeFilter.getFilterLanguage());
dataAccessor.createOrUpdateAuthor(author);
}
}
String uri = request.getRequestURI();
String canonicalUrl = "http://" + UxModeFilter.getWebsite().getHostName() + uri;
String alternateUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
// User
UserData userData = UserDataUtil.getCurrentUser();
// BasicMode
boolean basicMode = UxModeFilter.isBasicMode();
// Language
Language displayLanguage = UxModeFilter.getDisplayLanguage();
Language filterLanguage = UxModeFilter.getFilterLanguage();
// Navigation List
List<Navigation> navigationList = dataAccessor.getNavigationList(filterLanguage == null ? Language.ENGLISH : filterLanguage);
// Common resource list
Set<String> resourceList = getResourceList(basicMode);
Set<String> deferredResourceList = new HashSet<>();
if (basicMode) {
resourceList.add(ThirdPartyResource.BOOTSTRAP_CSS.getTag());
} else {
deferredResourceList.add(ThirdPartyResource.BOOTSTRAP_CSS.getTag());
deferredResourceList.add(ThirdPartyResource.GOOGLE_TRANSLITERATION.getTag());
}
// Load PWA
boolean loadPWA = true;
if (UxModeFilter.isCrawler())
loadPWA = false;
if (UxModeFilter.isBasicMode() && SystemProperty.STAGE.equals(SystemProperty.STAGE_PROD))
loadPWA = false;
if (uri.equals("/write") || uri.equals("/pratilipi-write") || uri.equals("/admin") || uri.startsWith("/admin/") || uri.equals("/edit-event") || uri.equals("/edit-blog"))
loadPWA = false;
if (uri.equals("/") && (UxModeFilter.getWebsite() == Website.ALL_LANGUAGE || UxModeFilter.getWebsite() == Website.GAMMA_ALL_LANGUAGE))
loadPWA = false;
// TODO: Hack - Remove it soon
if (request.getParameter("loadPWA") != null) {
loadPWA = Boolean.parseBoolean(request.getParameter("loadPWA"));
}
// Data Model for FreeMarker
Map<String, Object> dataModel = null;
String templateName = null;
// ga_location
String ga_location = null;
try {
// Search Engine Crawlers
if (uri.equals("/sitemap") && SystemProperty.STAGE.equals(SystemProperty.STAGE_PROD)) {
String content = PageDataUtil.getSitemap(request.getParameter(RequestParameter.SITEMAP_TYPE.getName()), request.getParameter(RequestParameter.SITEMAP_CURSOR.getName()), UxModeFilter.getWebsite(), basicMode);
_dispatchResponse(content, "application/xml", "UTF-8", response);
return;
}
// Robots.txt
if (uri.equals("/robots.txt")) {
dataModel = new HashMap<>();
dataModel.put("stage", SystemProperty.STAGE);
templateName = templateFilePrefix + "RobotsTxt.ftl";
String robotsTxt = FreeMarkerUtil.processTemplate(dataModel, templateName);
_dispatchResponse(robotsTxt, "text/plain", "UTF-8", response);
return;
}
// PWA
if (loadPWA) {
templateName = "PWA.ftl";
dataModel = new HashMap<>();
// Hack: Not to minify the html file
dataModel.put("stage", "pwa");
dataModel.put("lang", displayLanguage.getCode());
dataModel.put("language", displayLanguage);
dataModel.put("templateName", templateName);
String html = FreeMarkerUtil.processTemplate(dataModel, templateFilePrefix + "MainTemplate.ftl");
logger.log(Level.INFO, "Website Version : Mark-7");
_dispatchResponse(html, "text/html", "UTF-8", response);
return;
}
// Page Entity
Page page = dataAccessor.getPage(uri);
// Hard-coded links
if (uri.equals("/")) {
if (UxModeFilter.getWebsite() == Website.ALL_LANGUAGE || UxModeFilter.getWebsite() == Website.GAMMA_ALL_LANGUAGE) {
ga_location = "MasterHomePage";
dataModel = createDataModelForMasterHomePage(filterLanguage);
templateName = "MasterHome.ftl";
} else {
ga_location = "HomePage";
dataModel = createDataModelForHomePage(basicMode, filterLanguage);
templateName = (basicMode ? "HomeBasic.ftl" : "Home.ftl");
}
} else if (uri.equals("/library")) {
ga_location = "LibraryPage";
dataModel = createDataModelForLibraryPage(basicMode, filterLanguage);
templateName = (basicMode ? "LibraryBasic.ftl" : "Library.ftl");
} else if (uri.equals("/notifications")) {
ga_location = "NotificationsPage";
dataModel = createDataModelForNotificationsPage(filterLanguage, basicMode);
if (request.getParameter("action") != null)
dataModel.put("action", request.getParameter("action"));
templateName = (basicMode ? "NotificationBasic.ftl" : "Notification.ftl");
} else if (uri.equals("/search")) {
ga_location = "SearchPage";
if (request.getQueryString() != null) {
canonicalUrl = canonicalUrl + "?" + request.getQueryString();
alternateUrl = alternateUrl + "?" + request.getQueryString();
}
dataModel = createDataModelForSearchPage(basicMode, filterLanguage, request);
templateName = (basicMode ? "SearchBasic.ftl" : "Search.ftl");
} else if (uri.equals("/events")) {
ga_location = "AllEventsPage";
dataModel = createDataModelForEventsPage(filterLanguage, basicMode);
templateName = (basicMode ? "EventListBasic.ftl" : "EventList.ftl");
} else if (uri.equals("/followers")) {
ga_location = "FollowersPage";
Long authorId = null;
if (request.getParameter(RequestParameter.AUTHOR_ID.getName()) != null) {
authorId = Long.parseLong(request.getParameter(RequestParameter.AUTHOR_ID.getName()));
} else {
Long userId = AccessTokenFilter.getAccessToken().getUserId();
if (userId != null && userId != 0L)
authorId = dataAccessor.getAuthorByUserId(userId).getId();
}
Integer currentPage = request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName()) != null && !request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName()).trim().isEmpty() ? Integer.parseInt(request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName())) : 1;
if (authorId == null) {
dataModel = new HashMap<String, Object>();
dataModel.put("title", SEOTitleUtil.getFollowersPageTitle(authorId, filterLanguage));
} else {
dataModel = createDataModelForFollowersPage(authorId, currentPage, filterLanguage, basicMode);
}
templateName = (basicMode ? "FollowersListBasic.ftl" : "FollowersList.ftl");
} else if (uri.equals("/following")) {
ga_location = "FollowingPage";
Long userId = null;
if (request.getParameter(RequestParameter.USER_ID.getName()) != null)
userId = Long.parseLong(request.getParameter(RequestParameter.USER_ID.getName()));
else
userId = AccessTokenFilter.getAccessToken().getUserId();
Integer currentPage = request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName()) != null && !request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName()).trim().isEmpty() ? Integer.parseInt(request.getParameter(RequestParameter.LIST_PAGE_NUMBER.getName())) : 1;
if (userId == null || userId == 0L) {
dataModel = new HashMap<String, Object>();
dataModel.put("title", SEOTitleUtil.getFollowersPageTitle(userId, filterLanguage));
} else {
dataModel = createDataModelForFollowingPage(userId, currentPage, filterLanguage, basicMode);
}
templateName = (basicMode ? "FollowingListBasic.ftl" : "FollowingList.ftl");
} else if (uri.equals("/pratilipi-2016")) {
ga_location = "Pratilipi2016Page";
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Pratilipi in 2016");
templateName = (basicMode ? "Pratilipi2016Basic.ftl" : "Pratilipi2016.ftl");
// Master website specific links
} else if (filterLanguage == null && uri.equals("/books")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.BOOK, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == null && uri.equals("/stories")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.STORY, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == null && uri.equals("/poems")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.POEM, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == null && uri.equals("/articles")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.ARTICLE, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == null && uri.equals("/magazines")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.MAGAZINE, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
// Gujarati website specific links
} else if (filterLanguage == Language.GUJARATI && uri.equals("/short-stories")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.STORY, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == Language.GUJARATI && uri.equals("/poetry")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.POEM, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (filterLanguage == Language.GUJARATI && uri.equals("/non-fiction")) {
ga_location = "ListPage";
dataModel = createDataModelForListPage(PratilipiType.ARTICLE, basicMode, displayLanguage, filterLanguage, request);
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
// Standard Mode links only
} else if (!basicMode && uri.equals("/pratilipi-write")) {
ga_location = "Writer";
if (request.getQueryString() != null) {
canonicalUrl = canonicalUrl + "?" + request.getQueryString();
alternateUrl = alternateUrl + "?" + request.getQueryString();
}
resourceList.remove(ThirdPartyResource.POLYMER_ELEMENTS.getTag());
resourceList.add(ThirdPartyResource.BOOTSTRAP_CSS.getTag());
resourceList.add(ThirdPartyResource.TINYMCE.getTag());
Long authorId = request.getParameter(RequestParameter.AUTHOR_ID.getName()) != null ? Long.parseLong(request.getParameter(RequestParameter.AUTHOR_ID.getName())) : null;
Long pratilipiId = Long.parseLong(request.getParameter(RequestParameter.CONTENT_ID.getName()));
PratilipiV2Api.GetRequest pratilipiRequest = new PratilipiV2Api.GetRequest();
pratilipiRequest.setPratilipiId(pratilipiId);
PratilipiV2Api.Response pratilipiResponse = ApiRegistry.getApi(PratilipiV2Api.class).get(pratilipiRequest);
PratilipiContentIndexApi.GetRequest indexReq = new PratilipiContentIndexApi.GetRequest();
indexReq.setPratilipiId(pratilipiId);
PratilipiContentIndexApi.Response indexResponse = ApiRegistry.getApi(PratilipiContentIndexApi.class).getIndex(indexReq);
List<TagData> tags = TagDataUtil.getTags(pratilipiResponse.getLanguage(), pratilipiResponse.getType());
dataModel = new HashMap<String, Object>();
dataModel.put("title", SEOTitleUtil.getWritePageTitle(pratilipiId, filterLanguage));
dataModel.put("authorId", authorId);
dataModel.put("pratilipiId", pratilipiId);
dataModel.put("pratilipi", pratilipiResponse);
dataModel.put("pratilipiJson", new Gson().toJson(pratilipiResponse));
dataModel.put("indexJson", new Gson().toJson(indexResponse));
dataModel.put("tags", tags);
String action = request.getParameter("action");
if (action != null)
dataModel.put("action", action);
templateName = "WriterV2.ftl";
// Basic Mode links only
} else if (basicMode && uri.equals("/account")) {
ga_location = "AccountPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "My Account");
templateName = "AccountBasic.ftl";
} else if (basicMode && uri.equals("/navigation")) {
ga_location = "NavigationPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Menu");
dataModel.put("navigationList", navigationList);
templateName = "NavigationBasic.ftl";
} else if (basicMode && uri.equals("/updatepassword")) {
ga_location = "UpdatePasswordPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
if (request.getParameter(RequestParameter.PASSWORD_RESET_EMAIL_EMAIL.getName()) != null && request.getParameter(RequestParameter.PASSWORD_RESET_EMAIL_TOKEN.getName()) != null) {
dataModel.put("passwordResetFromMail", true);
dataModel.put("email", request.getParameter(RequestParameter.PASSWORD_RESET_EMAIL_EMAIL.getName()));
dataModel.put("verificationToken", request.getParameter(RequestParameter.PASSWORD_RESET_EMAIL_TOKEN.getName()));
}
dataModel.put("title", "Update Password");
templateName = "PasswordUpdateBasic.ftl";
} else if (basicMode && uri.equals("/share")) {
ga_location = "SharePage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Share");
templateName = "ShareBasic.ftl";
} else if (uri.equals("/register") && basicMode) {
ga_location = "RegisterPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Register");
templateName = "RegisterBasic.ftl";
} else if (uri.equals("/login") && basicMode) {
ga_location = "LoginPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Login");
templateName = "LoginBasic.ftl";
} else if (uri.equals("/forgot-password") && basicMode) {
ga_location = "ForgotPasswordPage";
canonicalUrl = "http://" + UxModeFilter.getWebsite().getMobileHostName() + uri;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Reset Password");
templateName = "PasswordResetBasic.ftl";
// Internal links - Standard Version only
} else if (!basicMode && uri.startsWith("/admin")) {
ga_location = "AdminPage";
if (uri.equals("/admin")) {
dataModel = new HashMap<>();
dataModel.put("title", "Pratilipi - Admin Access");
templateName = "Admin.ftl";
} else if (uri.equals("/admin/authors")) {
dataModel = createDataModelForAuthorsPage(filterLanguage);
templateName = "AuthorList.ftl";
} else if (uri.equals("/admin/batch-process")) {
dataModel = createDataModelForBatchProcessListPage();
templateName = "BatchProcessList.ftl";
} else if (uri.equals("/admin/email-templates")) {
dataModel = createDataModelForEmailTemplatesPage(filterLanguage);
templateName = "EmailTemplate.ftl";
} else if (uri.equals("/admin/translations")) {
dataModel = new HashMap<>();
templateName = "Translation.ftl";
}
} else if (!basicMode && uri.equals("/edit-event")) {
ga_location = "EditEventPage";
resourceList.add(ThirdPartyResource.CKEDITOR.getTag());
Long eventId = request.getParameter(RequestParameter.CONTENT_ID.getName()) != null ? Long.parseLong(request.getParameter(RequestParameter.CONTENT_ID.getName())) : null;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Create or Edit Event");
if (eventId != null) {
EventApi.GetRequest eventRequest = new EventApi.GetRequest();
eventRequest.setEventId(eventId);
EventApi.Response eventResponse = ApiRegistry.getApi(EventApi.class).get(eventRequest);
dataModel.put("eventJson", new Gson().toJson(eventResponse));
}
templateName = "EventEdit.ftl";
} else if (!basicMode && uri.equals("/edit-blog")) {
ga_location = "EditBlogPage";
resourceList.add(ThirdPartyResource.CKEDITOR.getTag());
Long blogPostId = request.getParameter(RequestParameter.CONTENT_ID.getName()) != null ? Long.parseLong(request.getParameter(RequestParameter.CONTENT_ID.getName())) : null;
Long blogId = request.getParameter("blogId") != null ? Long.parseLong(request.getParameter("blogId")) : null;
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Create or Edit Blog");
dataModel.put("blogId", blogId);
if (blogPostId != null) {
BlogPostApi.GetRequest blogPostRequest = new BlogPostApi.GetRequest();
blogPostRequest.setBlogPostId(blogPostId);
BlogPostApi.Response blogPostResponse = ApiRegistry.getApi(BlogPostApi.class).get(blogPostRequest);
dataModel.put("blogPostJson", new Gson().toJson(blogPostResponse));
}
templateName = "BlogEdit.ftl";
// Non - hardcoded links
} else if (page != null && page.getType() == PageType.PRATILIPI) {
ga_location = "PratilipiPage";
resourceList.addAll(createFbOpenGraphTags(page.getPrimaryContentId()));
dataModel = createDataModelForPratilipiPage(page.getPrimaryContentId(), filterLanguage, basicMode, request);
templateName = (basicMode ? "PratilipiBasic.ftl" : "Pratilipi.ftl");
} else if (page != null && page.getType() == PageType.AUTHOR) {
ga_location = userData.getAuthor().getId() != null && userData.getAuthor().getId() == page.getPrimaryContentId() ? "UserPage" : "AuthorPage";
dataModel = createDataModelForAuthorPage(page.getPrimaryContentId(), filterLanguage, basicMode, request);
templateName = (basicMode ? "AuthorBasic.ftl" : "Author.ftl");
} else if (page != null && page.getType() == PageType.EVENT) {
ga_location = "EventPage";
dataModel = createDataModelForEventPage(page.getPrimaryContentId(), filterLanguage, basicMode, request);
templateName = (basicMode ? "EventBasic.ftl" : "Event.ftl");
} else if (page != null && page.getType() == PageType.BLOG) {
ga_location = page.getUri().equals("/blog") ? "AllBlogsPage" : "AllAuthorInterviewsPage";
dataModel = createDataModelForBlogPage(page.getPrimaryContentId(), filterLanguage, basicMode);
templateName = (basicMode ? "BlogPostListBasic.ftl" : "BlogPostList.ftl");
} else if (page != null && page.getType() == PageType.BLOG_POST) {
ga_location = page.getUri().startsWith("/blog") ? "BlogPage" : "AuthorInterviewPage";
dataModel = createDataModelForBlogPostPage(page.getPrimaryContentId(), filterLanguage, basicMode);
templateName = (basicMode ? "BlogPostBasic.ftl" : "BlogPost.ftl");
} else if (page != null && page.getType() == PageType.READ) {
ga_location = "Reader";
if (request.getQueryString() != null) {
canonicalUrl = canonicalUrl + "?" + request.getQueryString();
alternateUrl = alternateUrl + "?" + request.getQueryString();
}
Long pratilipiId = Long.parseLong(request.getParameter(RequestParameter.CONTENT_ID.getName()));
String fontSize = AccessTokenFilter.getCookieValue(RequestCookie.FONT_SIZE.getName(), request);
String imageSize = AccessTokenFilter.getCookieValue(RequestCookie.IMAGE_SIZE.getName(), request);
String action = request.getParameter("action") != null ? request.getParameter("action") : "read";
String pageNoPattern = "reader_page_number_" + pratilipiId;
Integer pageNo = null;
if (request.getParameter(RequestParameter.READER_PAGE_NUMBER.getName()) != null)
pageNo = Integer.parseInt(request.getParameter(RequestParameter.READER_PAGE_NUMBER.getName()));
else if (AccessTokenFilter.getCookieValue(pageNoPattern, request) != null)
pageNo = Integer.parseInt(AccessTokenFilter.getCookieValue(pageNoPattern, request));
else
pageNo = 1;
dataModel = createDataModelForReadPage(pratilipiId, pageNo, request.getParameter(RequestParameter.API_VERSION.getName()), filterLanguage, basicMode);
dataModel.put("fontSize", fontSize != null ? Integer.parseInt(fontSize) : 14);
dataModel.put("imageSize", imageSize != null ? Integer.parseInt(imageSize) : 636);
dataModel.put("action", action);
templateName = (basicMode ? "ReadBasic.ftl" : "Read.ftl");
} else if (uri.matches("^/[a-z0-9-]+$") && (dataModel = createDataModelForListPage(uri.substring(1), basicMode, displayLanguage, filterLanguage, request)) != null) {
ga_location = "ListPage";
templateName = (basicMode ? "ListBasic.ftl" : "List.ftl");
} else if (uri.matches("^/[a-z0-9-/]+$") && (dataModel = createDataModelForStaticPage(uri.substring(1).replaceAll("/", "_"), displayLanguage)) != null) {
ga_location = "StaticPage";
templateName = (basicMode ? "StaticBasic.ftl" : "Static.ftl");
} else if (uri.matches("^/[a-z0-9-/]+$") && (dataModel = createDataModelForStaticPage(uri.substring(1).replaceAll("/", "_"), Language.ENGLISH)) != null) {
ga_location = "StaticPage";
templateName = (basicMode ? "StaticBasic.ftl" : "Static.ftl");
} else {
ga_location = "PageNotFound";
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Page Not Found !");
templateName = (basicMode ? "error/PageNotFoundBasic.ftl" : "error/PageNotFound.ftl");
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
} catch (InsufficientAccessException e) {
ga_location = "UnauthorisedErrorPage";
resourceList = getResourceList(basicMode);
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Unauthorized Access !");
templateName = (basicMode ? "error/AuthorizationErrorBasic.ftl" : "error/AuthorizationError.ftl");
logger.log(Level.SEVERE, "Unauthorised Exception: ", e);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
} catch (InvalidArgumentException | UnexpectedServerException e) {
ga_location = "ServerErrorPage";
resourceList = getResourceList(basicMode);
dataModel = new HashMap<String, Object>();
dataModel.put("title", "Server Error !");
templateName = (basicMode ? "error/ServerErrorBasic.ftl" : "error/ServerError.ftl");
logger.log(Level.SEVERE, "Service Unavailable: ", e);
response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
}
// Adding common data to the Data Model
Gson gson = new Gson();
UserV1Api.Response userResponse = new UserV1Api.Response(userData, UserV1Api.class);
Map<PratilipiType, Map<String, String>> pratilipiTypes = new HashMap<>();
for (PratilipiType pratilipiType : PratilipiType.values()) {
Map<String, String> pratilipiTypeMap = new HashMap<>();
pratilipiTypeMap.put("name", I18n.getString(pratilipiType.getStringId(), displayLanguage));
pratilipiTypeMap.put("namePlural", I18n.getString(pratilipiType.getPluralStringId(), displayLanguage));
pratilipiTypes.put(pratilipiType, pratilipiTypeMap);
}
Map<String, String> languageMap = new HashMap<String, String>();
for (Website website : Website.values()) {
if (!website.toString().contains("GAMMA") && !website.toString().contains("DEVO") && !website.toString().contains("ALPHA") && website != Website.ALL_LANGUAGE) {
languageMap.put(website.toString(), website.getFilterLanguage().getName());
}
}
dataModel.put("ga_userId", userData.getId().toString());
dataModel.put("ga_website", UxModeFilter.getWebsite().toString());
dataModel.put("ga_websiteMode", UxModeFilter.isBasicMode() ? "Basic" : "Standard");
dataModel.put("ga_websiteVersion", "Mark-6");
dataModel.put("ga_location", ga_location);
dataModel.put("lang", displayLanguage.getCode());
dataModel.put("language", displayLanguage);
dataModel.put("website_host", UxModeFilter.getWebsite().getHostName());
dataModel.put("website_mobile_host", UxModeFilter.getWebsite().getMobileHostName());
dataModel.put("canonical_url", canonicalUrl);
dataModel.put("alternate_url", alternateUrl);
dataModel.put("languageMap", gson.toJson(languageMap));
dataModel.put("_strings", I18n.getStrings(displayLanguage));
dataModel.put("resourceList", resourceList);
dataModel.put("deferredResourceList", deferredResourceList);
dataModel.put("user", userResponse);
dataModel.put("userJson", gson.toJson(userResponse));
dataModel.put("pratilipiTypesJson", gson.toJson(pratilipiTypes));
dataModel.put("navigationListJson", gson.toJson(navigationList));
dataModel.put("stage", SystemProperty.STAGE);
dataModel.put("basicMode", basicMode);
if (basicMode) {
StringBuffer requestUrl = new StringBuffer(request.getRequestURI());
if (request.getQueryString() != null)
requestUrl.append('?').append(request.getQueryString());
dataModel.put("requestUrl", URLEncoder.encode(requestUrl.toString(), "UTF-8"));
}
// Generating response html
String html = null;
for (int i = 0; i < 2 && html == null; i++) {
try {
dataModel.put("templateName", templateName);
// The magic
html = FreeMarkerUtil.processTemplate(dataModel, templateFilePrefix + "MainTemplate.ftl");
} catch (UnexpectedServerException e) {
logger.log(Level.SEVERE, "Exception occured while processing template.", e);
resourceList = getResourceList(basicMode);
templateName = (basicMode ? "error/ServerErrorBasic.ftl" : "error/ServerError.ftl");
}
}
// Dispatching response
logger.log(Level.INFO, "Website Version : Mark-6");
_dispatchResponse(html, "text/html", "UTF-8", response);
}
use of com.pratilipi.common.type.Website in project pratilipi by Pratilipi.
the class UxModeFilter method doFilter.
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
if (isAndroidApp) {
threadLocalBasicMode.set(false);
threadLocalWebsite.set(null);
threadLocalRefererHost.set(null);
} else {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String hostName = request.getServerName();
String requestUri = request.getRequestURI();
String userAgent = request.getHeader("user-agent");
// Defaults - for all test environments
boolean basicMode = false;
Website website = null;
// Figuring out Mode and Languages from a pre-configured list
for (Website web : Website.values()) {
if (hostName.equals(web.getHostName())) {
basicMode = false;
website = web;
break;
} else if (hostName.equals(web.getMobileHostName())) {
basicMode = true;
website = web;
break;
}
}
// NOTE: DO NOT redirect Facebook Scraping requests
if (isWebApp && website == Website.ALL_LANGUAGE && (userAgent == null || userAgent.isEmpty() || !userAgent.startsWith("facebookexternalhit/1.1"))) {
String destHostName = null;
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Page page = dataAccessor.getPage(requestUri);
if (page == null) {
// Do Nothing
} else if (page.getType() == PageType.PRATILIPI) {
Pratilipi pratilipi = dataAccessor.getPratilipi(page.getPrimaryContentId());
for (Website web : Website.values()) {
if (web.getFilterLanguage() == pratilipi.getLanguage()) {
destHostName = basicMode ? web.getMobileHostName() : web.getHostName();
break;
}
}
} else if (page.getType() == PageType.AUTHOR) {
Author author = dataAccessor.getAuthor(page.getPrimaryContentId());
for (Website web : Website.values()) {
if (web.getFilterLanguage() == author.getLanguage()) {
destHostName = basicMode ? web.getMobileHostName() : web.getHostName();
break;
}
}
} else if (page.getType() == PageType.EVENT) {
Event event = dataAccessor.getEvent(page.getPrimaryContentId());
for (Website web : Website.values()) {
if (web.getFilterLanguage() == event.getLanguage()) {
destHostName = basicMode ? web.getMobileHostName() : web.getHostName();
break;
}
}
} else if (page.getType() == PageType.BLOG_POST) {
BlogPost blogPost = dataAccessor.getBlogPost(page.getPrimaryContentId());
for (Website web : Website.values()) {
if (web.getFilterLanguage() == blogPost.getLanguage()) {
destHostName = basicMode ? web.getMobileHostName() : web.getHostName();
break;
}
}
}
if (destHostName != null) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", (request.isSecure() ? "https://" : "http://") + destHostName + requestUri);
return;
}
}
// NOTE: DO NOT redirect Facebook Scraping requests
if (isWebApp && (userAgent == null || userAgent.isEmpty() || !userAgent.startsWith("facebookexternalhit/1.1"))) {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Page page = dataAccessor.getPage(requestUri);
if (page != null && page.getUriAlias() != null && requestUri.equals(page.getUri())) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", page.getUriAlias());
return;
}
}
// Figuring out Browser capability
boolean basicBrowser = false;
boolean isCrawler = false;
if (isWebApp) {
if (userAgent == null || userAgent.trim().isEmpty()) {
basicBrowser = true;
} else if (userAgent.contains("UCBrowser")) {
// UCBrowser
/*
* UCBrowser on Android 4.3
* "Mozilla/5.0 (Linux; U; Android 4.3; en-US; GT-I9300 Build/JSS15J) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/10.0.1.512 U3/0.8.0 Mobile Safari/533.1"
*/
// Extreme mode
basicBrowser = true;
// } else if( userAgent.contains( "Opera Mobi" ) ) { // Opera Classic
// /*
// * Opera Classic on Android 4.3
// * "Opera/9.80 (Android 4.3; Linux; Opera Mobi/ADR-1411061201) Presto/2.11.355 Version/12.10"
// */
// basicBrowser = true; // Not sure whether Polymer 1.0 is supported or not
} else if (userAgent.contains("Opera Mini")) {
// Opera Mini
/*
* Opera Mini on Android 4.3
* "Opera/9.80 (Android; Opera Mini/7.6.40077/35.5706; U; en) Presto/2.8.119 Version/11.10"
*/
// Extreme mode
basicBrowser = true;
// } else if( userAgent.contains( "Trident/7" ) && userAgent.contains( "rv:11" ) ) { // Microsoft Internet Explorer 11
// /*
// * Microsoft Internet Explorer 11 on Microsoft Windows 8.1
// * "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko"
// */
// basicBrowser = true;
//
// } else if( userAgent.contains( "OPR" ) ) { // Opera
// /*
// * Opera on Microsoft Windows 8.1
// * "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.24"
// * Opera on Android 4.3
// * "Mozilla/5.0 (Linux; Android 4.3; GT-I9300 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36 OPR/25.0.1619.84037"
// */
// String userAgentSubStr = userAgent.substring( userAgent.indexOf( "OPR" ) + 4 );
// int version = Integer.parseInt( userAgentSubStr.substring( 0, userAgentSubStr.indexOf( "." ) ) );
// basicBrowser = version < 20;
//
// } else if( userAgent.contains( "Edge" ) ) {
// /*
// * Microsoft Edge browser on Windows 10
// * Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
// */
// basicBrowser = false;
//
// } else if( userAgent.contains( "Chrome" ) && ! userAgent.contains( "(Chrome)" ) ) { // Google Chrome
// /*
// * Google Chrome on Microsoft Windows 8.1
// * "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36"
// * Google Chrome on Android 4.3
// * "Mozilla/5.0 (Linux; Android 4.3; GT-I9300 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36"
// */
// String userAgentSubStr = userAgent.substring( userAgent.indexOf( "Chrome" ) + 7 );
// int version = Integer.parseInt( userAgentSubStr.substring( 0, userAgentSubStr.indexOf( "." ) ) );
// basicBrowser = version < 35;
//
// } else if( userAgent.contains( "Safari" ) ) { // Apple Safari
// /*
// * Apple Safari on Microsoft Windows 8.1
// * Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
// */
// if( userAgent.contains( "Version" ) ) {
// String userAgentSubStr = userAgent.substring( userAgent.indexOf( "Version" ) + 8 );
// int version = Integer.parseInt( userAgentSubStr.substring( 0, userAgentSubStr.indexOf( "." ) ) );
// basicBrowser = version < 8;
// } else {
// String userAgentSubStr = userAgent.substring( userAgent.indexOf( "Safari" ) + 7 );
// int version = Integer.parseInt( userAgentSubStr.substring( 0, userAgentSubStr.indexOf( "." ) ) );
// basicBrowser = version < 538 || version > 620;
// }
//
// } else if( userAgent.contains( "Firefox" ) ) { // Mozilla Firefox
// /*
// * Mozilla Firefox on Microsoft 8.1
// * "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 AlexaToolbar/alxf-2.21"
// * Mozilla Firefox on Android 4.3
// * "Mozilla/5.0 (Android; Mobile; rv:33.0) Gecko/33.0 Firefox/33.0"
// * Mozilla Firefox on Linux
// * "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)"
// */
// String userAgentSubStr = userAgent.substring( userAgent.indexOf( "Firefox" ) + 8 );
// int version = Integer.parseInt( userAgentSubStr.substring( 0, userAgentSubStr.indexOf( "." ) ) );
// basicBrowser = version < 28;
} else if (userAgent.contains("Googlebot")) {
// Googlebot/2.1; || Googlebot-News || Googlebot-Image/1.0 || Googlebot-Video/1.0
isCrawler = true;
} else if (userAgent.equals("Google (+https://developers.google.com/+/web/snippet/)")) {
// Google+
isCrawler = true;
} else if (userAgent.contains("Bingbot")) {
// Microsoft Bing
isCrawler = true;
} else if (userAgent.contains("Slurp")) {
// Yahoo
isCrawler = true;
} else if (userAgent.contains("DuckDuckBot")) {
// DuckDuckGo
isCrawler = true;
} else if (userAgent.contains("Baiduspider")) {
// Baidu - China
isCrawler = true;
} else if (userAgent.contains("YandexBot")) {
// Yandex - Russia
isCrawler = true;
} else if (userAgent.contains("Exabot")) {
// ExaLead - France
isCrawler = true;
} else if (userAgent.equals("facebot") || userAgent.startsWith("facebookexternalhit/1.0") || userAgent.startsWith("facebookexternalhit/1.1")) {
// Facebook Scraping requests
isCrawler = true;
} else if (userAgent.startsWith("WhatsApp")) {
// Whatsapp
isCrawler = true;
} else if (userAgent.startsWith("ia_archiver")) {
// Alexa Crawler
isCrawler = true;
}
}
// Redirecting requests coming from basic browsers to BasicMode
if (basicBrowser && !basicMode && website != null && website.getMobileHostName() != null) {
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
String queryString = request.getQueryString();
if (queryString == null || queryString.isEmpty())
response.setHeader("Location", (request.isSecure() ? "https://" : "http://") + website.getMobileHostName() + requestUri);
else
response.setHeader("Location", (request.isSecure() ? "https://" : "http://") + website.getMobileHostName() + requestUri + "?" + request.getQueryString());
return;
}
threadLocalBasicMode.set(basicMode);
threadLocalWebsite.set(website);
threadLocalIsCrawler.set(isCrawler);
String referer = request.getHeader("referer");
if (// Eg: referer = android-app
referer == null || !referer.startsWith("http"))
threadLocalRefererHost.set(hostName);
else
threadLocalRefererHost.set(new URL(referer).getHost());
}
chain.doFilter(req, resp);
threadLocalBasicMode.remove();
threadLocalWebsite.remove();
threadLocalIsCrawler.remove();
threadLocalRefererHost.remove();
}
Aggregations