Mercurial Hosting > nabble
view src/global/web/Index.java @ 66:3fbe9cb2e325 default tip
security
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 18 Sep 2024 03:51:47 -0600 |
parents | 4987e1a38a6c |
children |
line wrap: on
line source
package global.web; import fschmidt.util.servlet.JtpContext; import fschmidt.util.servlet.ServletUtils; import global.HtmlGlobalUtils; import global.Site; import nabble.view.web.more.ForumStart; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public final class Index extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(Index.class); // private static boolean hasJobsAtNabble = Init.get("hasJobsAtNabble",false); public static String path() { return "/"; } protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName); jtpContext.setEtag(request,response,"x"); PrintWriter out = response.getWriter(); out.print( "\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n " ); HtmlGlobalUtils.head(request, response, "Free Forum • Embeddable Web Apps"); out.print( "\r\n <link rel=\"canonical\" href=\"https://www.nabble.com/\">\r\n <meta name=\"description\" content=\"Create a free forum online in less than one minute. All forums are embeddable and fully customizable with scripting language. Choose a unique style and build a discussion board for your community.\" />\r\n <meta name=\"keywords\" content=\"free forum, free photo gallery, free newspaper, free blog, best forum, free message board, message board hosting, bulletin board, customizable, private forum, phpBB, vBulletin, hosted, communities\">\r\n <meta name=\"google-site-verification\" content=\"SUurO4gVJ46SZyzANkH4pJBGH8q-6Bv5P-ZgRBH8Cck\" />\r\n <style>\r\n div[actions] i.fa.fa-chevron-right {\r\n color: #DDD;\r\n float: right;\r\n }\r\n a[fixed] {\r\n margin-top: -3em;\r\n position: absolute;\r\n right: 1em;\r\n text-decoration: none;\r\n background-color: #555;\r\n border-radius: .5em;\r\n padding: .5em;\r\n color: #D0D0D0;\r\n text-shadow: 0px 1px 1px black;\r\n border-bottom: 1px dotted #757474;\r\n }\r\n @media (max-width: 950px) {\r\n div[footer] {\r\n padding-bottom: 5em;\r\n }\r\n }\r\n div[note] {\r\n margin-top: 1em;\r\n text-align: right;\r\n }\r\n </style>\r\n </head>\r\n <body lato>\r\n " ); HtmlGlobalUtils.header(request,response); out.print( "\r\n <div full>\r\n <div content center>\r\n <span style=\"display:inline-block\">\r\n <div col1 center>\r\n <h1 oswald>Free Forum Hosting & Online Web Apps!</h1>\r\n <h2 lato gray>Clean Look <span light>•</span> Embeddable <span light>•</span> Customizable</h2>\r\n <img src=\"/assets/images/home.png\" alt=\"Free forum hosting and online embeddable apps\"/>\r\n </div>\r\n <div col2 actions>\r\n <ul>\r\n <li><a href=\"" ); out.print( (HtmlGlobalUtils.nabbleContextUrl) ); out.print( (ForumStart.path("forum")) ); out.print( "\" title=\"Click to create a free forum\">Create Free Forum</a> <i class=\"fa fa-chevron-right\"></i></li>\r\n <li><a href=\"" ); out.print( (HtmlGlobalUtils.nabbleContextUrl) ); out.print( (ForumStart.path("gallery")) ); out.print( "\" title=\"Click to create a free photo gallery\">Create Photo Gallery</a> <i class=\"fa fa-chevron-right\"></i></li>\r\n <li><a href=\"" ); out.print( (HtmlGlobalUtils.nabbleContextUrl) ); out.print( (ForumStart.path("newspaper")) ); out.print( "\" title=\"Click to create a free newspaper\">Create News Site</a> <i class=\"fa fa-chevron-right\"></i></li>\r\n <li><a href=\"" ); out.print( (HtmlGlobalUtils.nabbleContextUrl) ); out.print( (ForumStart.path("blog")) ); out.print( "\" title=\"Click to create a free blog\">Create Blog</a> <i class=\"fa fa-chevron-right\"></i></li>\r\n </ul>\r\n </div>\r\n </span>\r\n </div>\r\n <div content paddingTop>\r\n <div col33 center>\r\n <h2 oswald>Multi Language</h2>\r\n <ul floating>\r\n <li>English</li>\r\n <li>Čeština (Czech Republic)</li>\r\n <li>Español</li>\r\n <li>Français</li>\r\n <li>Polski</li>\r\n <li>Português (Brasil)</li>\r\n <li>Svenska</li>\r\n <li>Türkçe</li>\r\n <li>Русский</li>\r\n <li>Ελληνικά</li>\r\n <li>中文 (简体)</li>\r\n <li><a href=\"http://support.nabble.com/Nabble-Translations-f6669344.html\">Translate to other languages</a> »</li>\r\n </ul>\r\n </div>\r\n <div col33 center>\r\n <h2 oswald>Embed into any Website</h2>\r\n <p lineHeight marginHorizontal>All Nabble apps are naturally embeddable, which means that they can be easily displayed inside any web page.\r\n </p>\r\n </div>\r\n <div col33 center>\r\n <h2 oswald>Fully Customizable</h2>\r\n <p lineHeight marginHorizontal>All Nabble apps are built with NAML, a scripting language that gives you full control over the app pages.</p>\r\n </div>\r\n </div>\r\n <div content center paddingTop>\r\n <h2 oswald>Browse Active Nabble Apps</h2>\r\n " ); topSites(out); out.print( "\r\n </div>\r\n </div>\r\n " ); HtmlGlobalUtils.footer(request,response); out.print( "\r\n" ); /* out.print( "\r\n <a fixed href=\"http://www.blasma.com\">Help design a new forum <i class=\"fa fa-chevron-right\"></i></a>\r\n" ); */ out.print( "\r\n </body>\r\n</html>\r\n" ); } static BooleanQuery query = new BooleanQuery(); static { query.add(new TermQuery(new Term(Site.EMBARRASSING_FLD,"false")), BooleanClause.Occur.MUST); query.add(new TermQuery(new Term(Site.PRIVATE_FLD,"false")), BooleanClause.Occur.MUST); } private static void topSites(PrintWriter out) throws ServletException, IOException { IndexSearcher searcher; TopDocs hits; try { searcher = new IndexSearcher(Site.dir()); hits = searcher.search( query, 60, Site.SORT_BY_ACTIVITY ); } catch(IOException e) { logger.error("Index error", e); out.print( "[Rebuilding Index]" ); return; } try { out.print( "\r\n<ul floating center>\r\n" ); for( ScoreDoc sd : hits.scoreDocs ) { Site site = new Site( searcher.doc(sd.doc) ); out.print( "\r\n<li>" ); out.print( (site.link()) ); out.print( "</li>\r\n" ); } out.print( "\r\n</ul>\r\n<div style=\"padding-top:.5em;clear:both\">\r\n<a bold href=\"" ); out.print( (RootForums.path()) ); out.print( "\" title=\"View more active forums and apps\">View More</a></b> <i class=\"fa fa-chevron-right\"></i>\r\n</div>\r\n" ); } finally { searcher.close(); } } }