Mercurial Hosting > nabble
annotate src/global/web/Index.java @ 64:f8a307aa811f
fix security hole
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 16 Sep 2024 20:53:23 -0600 |
parents | 4987e1a38a6c |
children |
rev | line source |
---|---|
0 | 1 |
2 package global.web; | |
3 | |
4 import fschmidt.util.servlet.JtpContext; | |
5 import fschmidt.util.servlet.ServletUtils; | |
6 import global.HtmlGlobalUtils; | |
7 import global.Site; | |
8 import nabble.view.web.more.ForumStart; | |
9 import org.apache.lucene.index.Term; | |
10 import org.apache.lucene.search.IndexSearcher; | |
11 import org.apache.lucene.search.TermQuery; | |
12 import org.apache.lucene.search.Query; | |
13 import org.apache.lucene.search.ScoreDoc; | |
14 import org.apache.lucene.search.TopDocs; | |
55 | 15 import org.apache.lucene.search.BooleanClause; |
16 import org.apache.lucene.search.BooleanQuery; | |
0 | 17 import org.slf4j.Logger; |
18 import org.slf4j.LoggerFactory; | |
19 | |
20 import javax.servlet.ServletException; | |
21 import javax.servlet.http.HttpServlet; | |
22 import javax.servlet.http.HttpServletRequest; | |
23 import javax.servlet.http.HttpServletResponse; | |
24 import java.io.IOException; | |
25 import java.io.PrintWriter; | |
26 | |
27 | |
28 public final class Index extends HttpServlet { | |
29 | |
30 private static final Logger logger = LoggerFactory.getLogger(Index.class); | |
31 | |
32 // private static boolean hasJobsAtNabble = Init.get("hasJobsAtNabble",false); | |
33 | |
34 public static String path() { | |
35 return "/"; | |
36 } | |
37 | |
38 protected void service(HttpServletRequest request,HttpServletResponse response) | |
39 throws ServletException, IOException | |
40 { | |
41 JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName); | |
42 jtpContext.setEtag(request,response,"x"); | |
43 PrintWriter out = response.getWriter(); | |
44 | |
45 out.print( "\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n " ); | |
46 HtmlGlobalUtils.head(request, response, "Free Forum • Embeddable Web Apps"); | |
63
4987e1a38a6c
remove ads from homepage
Franklin Schmidt <fschmidt@gmail.com>
parents:
55
diff
changeset
|
47 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 " ); |
0 | 48 HtmlGlobalUtils.header(request,response); |
21 | 49 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=\"" ); |
0 | 50 out.print( (HtmlGlobalUtils.nabbleContextUrl) ); |
51 out.print( (ForumStart.path("forum")) ); | |
52 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=\"" ); | |
53 out.print( (HtmlGlobalUtils.nabbleContextUrl) ); | |
54 out.print( (ForumStart.path("gallery")) ); | |
55 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=\"" ); | |
56 out.print( (HtmlGlobalUtils.nabbleContextUrl) ); | |
57 out.print( (ForumStart.path("newspaper")) ); | |
58 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=\"" ); | |
59 out.print( (HtmlGlobalUtils.nabbleContextUrl) ); | |
60 out.print( (ForumStart.path("blog")) ); | |
35 | 61 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 " ); |
0 | 62 topSites(out); |
63 out.print( "\r\n </div>\r\n </div>\r\n " ); | |
64 HtmlGlobalUtils.footer(request,response); | |
65 out.print( "\r\n" ); | |
66 /* | |
67 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" ); | |
68 */ | |
69 out.print( "\r\n </body>\r\n</html>\r\n" ); | |
70 | |
71 } | |
72 | |
55 | 73 static BooleanQuery query = new BooleanQuery(); |
74 static { | |
75 query.add(new TermQuery(new Term(Site.EMBARRASSING_FLD,"false")), BooleanClause.Occur.MUST); | |
76 query.add(new TermQuery(new Term(Site.PRIVATE_FLD,"false")), BooleanClause.Occur.MUST); | |
77 } | |
0 | 78 |
79 private static void topSites(PrintWriter out) | |
80 throws ServletException, IOException | |
81 { | |
82 IndexSearcher searcher; | |
83 TopDocs hits; | |
84 try { | |
85 searcher = new IndexSearcher(Site.dir()); | |
53 | 86 hits = searcher.search( query, 60, Site.SORT_BY_ACTIVITY ); |
0 | 87 } catch(IOException e) { |
88 logger.error("Index error", e); | |
89 | |
90 out.print( "[Rebuilding Index]" ); | |
91 | |
92 return; | |
93 } | |
94 try { | |
95 | |
96 out.print( "\r\n<ul floating center>\r\n" ); | |
97 | |
98 for( ScoreDoc sd : hits.scoreDocs ) { | |
99 Site site = new Site( searcher.doc(sd.doc) ); | |
100 | |
101 out.print( "\r\n<li>" ); | |
102 out.print( (site.link()) ); | |
103 out.print( "</li>\r\n" ); | |
104 | |
105 } | |
106 | |
107 out.print( "\r\n</ul>\r\n<div style=\"padding-top:.5em;clear:both\">\r\n<a bold href=\"" ); | |
108 out.print( (RootForums.path()) ); | |
109 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" ); | |
110 | |
111 } finally { | |
112 searcher.close(); | |
113 } | |
114 } | |
115 | |
116 } | |
117 |