source: apps/i2ptunnel/jsp/index.jsp @ 5b31540

Last change on this file since 5b31540 was 5b31540, checked in by zzz <zzz@…>, 4 years ago

Console: Version the css links

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