source: apps/i2ptunnel/jsp/index.jsp @ dd5f8b45

Last change on this file since dd5f8b45 was dd5f8b45, checked in by zzz <zzz@…>, 14 months ago

i2ptunnel: jsp whitespace removal

  • Property mode set to 100644
File size: 15.5 KB
Line 
1<%
2    // NOTE: Do the header carefully so there is no whitespace before the <?xml... line
3
4    // http://www.crazysquirrel.com/computing/general/form-encoding.jspx
5    if (request.getCharacterEncoding() == null)
6        request.setCharacterEncoding("UTF-8");
7
8    response.setHeader("X-Frame-Options", "SAMEORIGIN");
9    response.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'");
10    response.setHeader("X-XSS-Protection", "1; mode=block");
11    response.setHeader("X-Content-Type-Options", "nosniff");
12    response.setHeader("Referrer-Policy", "no-referrer");
13    response.setHeader("Accept-Ranges", "none");
14
15%><%@page pageEncoding="UTF-8"
16%><%@page trimDirectiveWhitespaces="true"
17%><%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean"
18%><?xml version="1.0" encoding="UTF-8"?>
19<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
20<jsp:useBean class="net.i2p.i2ptunnel.web.IndexBean" id="indexBean" scope="request" />
21<jsp:setProperty name="indexBean" property="*" />
22<jsp:useBean class="net.i2p.i2ptunnel.ui.Messages" id="intl" scope="request" />
23<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
24<head>
25    <title><%=intl._t("Hidden Services Manager")%></title>
26
27    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
28    <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
29
30    <% if (indexBean.allowCSS()) {
31  %><link rel="icon" href="<%=indexBean.getTheme()%>images/favicon.ico" />
32    <link href="<%=indexBean.getTheme()%>i2ptunnel.css?<%=net.i2p.CoreVersion.VERSION%>" rel="stylesheet" type="text/css" /> 
33    <% }
34  %>
35</head><body id="tunnelListPage">
36<%
37  boolean isInitialized = indexBean.isInitialized();
38  String nextNonce = isInitialized ? net.i2p.i2ptunnel.web.IndexBean.getNextNonce() : null;
39
40  // not synced, oh well
41  int lastID = indexBean.getLastMessageID();
42  String msgs = indexBean.getMessages();
43  if (msgs.length() > 0) {
44%>
45<div class="panel" id="messages">
46    <h2><%=intl._t("Status Messages")%></h2>
47    <table id="statusMessagesTable">
48        <tr>
49            <td id="tunnelMessages">
50        <textarea id="statusMessages" rows="4" cols="60" readonly="readonly"><%=msgs%></textarea>
51            </td>
52        </tr><tr>
53            <td class="buttons">
54                <a class="control" href="list"><%=intl._t("Refresh")%></a>
55<%
56  if (isInitialized) {
57%>
58                <a class="control" href="list?action=Clear&amp;msgid=<%=lastID%>&amp;nonce=<%=nextNonce%>"><%=intl._t("Clear")%></a>
59<%
60  }  // isInitialized
61%>
62            </td>
63        </tr>
64    </table>
65</div>
66<%
67  }  // !msgs.isEmpty()
68  if (isInitialized) {
69%>
70<div class="panel" id="globalTunnelControl">
71    <h2><%=intl._t("Global Tunnel Control")%></h2>
72    <table>
73        <tr>
74            <td class="buttons">
75                <a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
76                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Stop%20all"><%=intl._t("Stop All")%></a>
77                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Start%20all"><%=intl._t("Start All")%></a>
78                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Restart%20all"><%=intl._t("Restart All")%></a>
79<%--
80                //this is really bad because it stops and restarts all tunnels, which is probably not what you want
81                <a class="control" href="list?nonce=<%=nextNonce%>&amp;action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
82--%>
83            </td>
84        </tr>
85    </table>
86</div>
87<div class="panel" id="servers">
88    <h2><%=intl._t("I2P Hidden Services")%></h2>
89<table id="serverTunnels">
90    <tr>
91        <th class="tunnelName"><%=intl._t("Name")%></th>
92        <th class="tunnelType"><%=intl._t("Type")%></th>
93        <th class="tunnelLocation"><%=intl._t("Points at")%></th>
94        <th class="tunnelPreview"><%=intl._t("Preview")%></th>
95        <th class="tunnelStatus"><%=intl._t("Status")%></th>
96        <th class="tunnelControl"><%=intl._t("Control")%></th>
97    </tr>
98<%
99        for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
100            if (indexBean.isClient(curServer)) continue;
101%>
102    <tr class="tunnelProperties">
103        <td class="tunnelName">
104            <a href="edit?tunnel=<%=curServer%>" title="<%=intl._t("Edit Server Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a>
105        </td><td class="tunnelType"><%=indexBean.getTunnelType(curServer)%>
106        </td><td class="tunnelLocation">
107<%
108            if (indexBean.isServerTargetLinkValid(curServer)) {
109                if (indexBean.isSSLEnabled(curServer)) { %>
110                    <a href="https://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTPS server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%> SSL</a>
111<%              } else { %>
112                    <a href="http://<%=indexBean.getServerTarget(curServer)%>/" title="<%=intl._t("Test HTTP server, bypassing I2P")%>" target="_top"><%=indexBean.getServerTarget(curServer)%></a>
113<%
114                }
115            } else {
116          %><%=indexBean.getServerTarget(curServer)%>
117<%
118                if (indexBean.isSSLEnabled(curServer)) { %>
119                    SSL
120<%
121                }
122            }
123%>
124        </td><td class="tunnelPreview">
125<%
126            if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
127%>
128            <a class="control" title="<%=intl._t("Test HTTP server through I2P")%>" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
129<%
130            } else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
131          %><%=intl._t("Base32 Address")%>:<%=indexBean.getDestHashBase32(curServer)%>
132<%
133            } else {
134          %><%=intl._t("No Preview")%>
135<%
136            }
137%>
138        </td><td class="tunnelStatus">
139<%
140            switch (indexBean.getTunnelStatus(curServer)) {
141                case IndexBean.STARTING:
142          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
143        </td><td class="tunnelControl">
144            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
145<%
146                break;
147                case IndexBean.RUNNING:
148          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
149        </td><td class="tunnelControl">
150            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
151<%
152                break;
153                case IndexBean.NOT_RUNNING:
154          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
155        </td><td class="tunnelControl">
156            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
157<%
158                break;
159            }
160%>
161        </td>
162    </tr><tr>
163        <td class="tunnelDestination" colspan="6">
164            <span class="tunnelDestinationLabel">
165<%
166                String name = indexBean.getSpoofedHost(curServer);
167                    if (name == null || name.equals("")) {
168                        name = indexBean.getTunnelName(curServer);
169                        out.write("<b>");
170                        out.write(intl._t("Destination"));
171                        out.write(":</b></span> ");
172                        out.write(indexBean.getDestHashBase32(curServer));
173                   } else {
174                       out.write("<b>");
175                       out.write(intl._t("Hostname"));
176                       out.write(":</b></span> ");
177                       out.write(name);
178                   }
179%>
180        </td>
181    </tr>
182<%
183            String encName = indexBean.getEncryptedBase32(curServer);
184            if (encName != null && encName.length() > 0) {
185%>
186    <tr>
187        <td class="tunnelDestination" colspan="6">
188            <span class="tunnelDestinationLabel"><b><%=intl._t("Encrypted")%>:</b></span>
189            <%=encName%>
190        </td>
191    </tr>
192<%
193            } // encName
194%>
195    <tr>
196        <td class="tunnelDescription" colspan="6">
197            <span class="tunnelDestinationLabel"><b><%=intl._t("Description")%>:</b></span>
198            <%=indexBean.getTunnelDescription(curServer)%>
199        </td>
200    </tr>
201<%
202        } // for loop
203%>
204    <tr>
205        <td class="newTunnel" colspan="6">
206           <form id="addNewServerTunnelForm" action="edit">
207               <b><%=intl._t("New hidden service")%>:</b>&nbsp;
208                    <select name="type">
209                        <option value="httpserver">HTTP</option>
210                        <option value="server"><%=intl._t("Standard")%></option>
211                        <option value="httpbidirserver">HTTP bidir</option>
212                        <option value="ircserver">IRC</option>
213                        <option value="streamrserver">Streamr</option>
214                    </select>
215                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
216            </form>
217        </td>
218    </tr>
219</table>
220</div>
221<div class="panel" id="clients">
222    <h2><%=intl._t("I2P Client Tunnels")%></h2>
223<table id="clientTunnels">
224    <tr>
225        <th class="tunnelName"><%=intl._t("Name")%></th>
226        <th class="tunnelType"><%=intl._t("Type")%></th>
227        <th class="tunnelInterface"><%=intl._t("Interface")%></th>
228        <th class="tunnelPort"><%=intl._t("Port")%></th>
229        <th class="tunnelStatus"><%=intl._t("Status")%></th>
230        <th class="tunnelControl"><%=intl._t("Control")%></th>
231    </tr>
232<%
233        for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
234            if (!indexBean.isClient(curClient)) continue;
235%>
236    <tr class="tunnelProperties">
237        <td class="tunnelName">
238            <a href="edit?tunnel=<%=curClient%>" title="<%=intl._t("Edit Tunnel Settings for")%>&nbsp;<%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a>
239        </td><td class="tunnelType"><%=indexBean.getTunnelType(curClient)%>
240        </td><td class="tunnelInterface">
241<%
242               /* should only happen for streamr client */
243               String cHost= indexBean.getClientInterface(curClient);
244               if (cHost == null || "".equals(cHost)) {
245                   out.write("<font color=\"red\">");
246                   out.write(intl._t("Host not set"));
247                   out.write("</font>");
248               } else {
249                   out.write(cHost);
250               }
251%>
252        </td><td class="tunnelPort">
253<%
254               String cPort= indexBean.getClientPort2(curClient);
255               out.write(cPort);
256               if (indexBean.isSSLEnabled(curClient))
257                   out.write(" SSL");
258%>
259        </td><td class="tunnelStatus">
260<%
261            switch (indexBean.getTunnelStatus(curClient)) {
262                case IndexBean.STARTING:
263          %><div class="statusStarting text" title="<%=intl._t("Starting...")%>"><%=intl._t("Starting...")%></div>
264        </td><td class="tunnelControl">
265            <a class="control" title="<%=intl._t("Stop this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
266<%
267                break;
268                case IndexBean.STANDBY:
269          %><div class="statusStarting text" title="<%=intl._t("Standby")%>"><%=intl._t("Standby")%></div>
270        </td><td class="tunnelControl">
271            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
272<%
273                break;
274                case IndexBean.RUNNING:
275          %><div class="statusRunning text" title="<%=intl._t("Running")%>"><%=intl._t("Running")%></div>
276        </td><td class="tunnelControl">
277            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=nextNonce%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
278<%
279                break;
280                case IndexBean.NOT_RUNNING:
281          %><div class="statusNotRunning text" title="<%=intl._t("Stopped")%>"><%=intl._t("Stopped")%></div>
282        </td><td class="tunnelControl">
283            <a class="control" title="<%=intl._t("Start this Tunnel")%>" href="list?nonce=<%=nextNonce%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
284<%
285                break;
286            }
287%>
288        </td>
289    </tr><tr>
290        <td class="tunnelDestination" colspan="6">
291            <span class="tunnelDestinationLabel">
292<%             if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
293                   "sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
294                <b><%=intl._t("Outproxy")%>:</b>
295<%             } else { %>
296                <b><%=intl._t("Destination")%>:</b>
297 <%            } %>
298</span>
299<%
300               if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
301                   %><%=intl._t("internal plugin")%><%
302               } else {
303                   String cdest = indexBean.getClientDestination(curClient);
304                   if (cdest.length() > 70) { // Probably a B64 (a B32 is 60 chars) so truncate
305                       %><%=cdest.substring(0, 45)%>&hellip;<%=cdest.substring(cdest.length() - 15, cdest.length())%><%
306                   } else if (cdest.length() > 0) {
307                       %><%=cdest%><%
308                   } else {
309                       %><i><%=intl._t("none")%></i><%
310                   }
311               } %>
312        </td>
313    </tr>
314<% /* TODO SSL outproxy for httpclient if plugin not present */ %>
315    <tr>
316        <td class="tunnelDescription" colspan="6">
317            <span class="tunnelDescriptionLabel"><b><%=intl._t("Description")%>:</b></span>
318            <%=indexBean.getTunnelDescription(curClient)%>
319        </td>
320    </tr>
321<%
322        }
323%>
324    <tr>
325        <td class="newTunnel" colspan="6">
326            <form id="addNewClientTunnelForm" action="edit">
327                <b><%=intl._t("New client tunnel")%>:</b>&nbsp;
328                    <select name="type">
329                        <option value="client"><%=intl._t("Standard")%></option>
330                        <option value="httpclient">HTTP/CONNECT</option>
331                        <option value="ircclient">IRC</option>
332                        <option value="sockstunnel">SOCKS 4/4a/5</option>
333                        <option value="socksirctunnel">SOCKS IRC</option>
334                        <option value="connectclient">CONNECT</option>
335                        <option value="streamrclient">Streamr</option>
336                    </select>
337                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
338            </form>
339        </td>
340    </tr>
341</table>
342</div>
343<%
344
345  }  // isInitialized()
346
347%>
348</body></html>
Note: See TracBrowser for help on using the repository browser.