Merge pull request #2160 from remakeelectric/app-mosq
[oweals/luci.git] / applications / luci-app-firewall / luasrc / view / firewall / cbi_addrule.htm
1 <%
2         local fw = require "luci.model.firewall".init()
3         local zones = fw:get_zones()
4 %>
5
6 <% if #zones > 0 then %>
7         <h4><%:Open ports on router%></h4>
8         <div class="table">
9                 <div class="tr cbi-section-table-titles">
10                         <div class="th"><%:Name%></div>
11                         <div class="th"><%:Protocol%></div>
12                         <div class="th"><%:External port%></div>
13                         <div class="th"></div>
14                 </div>
15                 <div class="tr">
16                         <div class="td">
17                                 <input type="text" class="cbi-input-text" id="_newopen.name" name="_newopen.name" placeholder="<%:New input rule%>" />
18                         </div>
19                         <div class="td">
20                                 <select class="cbi-input-select" id="_newopen.proto" name="_newopen.proto">
21                                         <option value="tcp udp">TCP+UDP</option>
22                                         <option value="tcp">TCP</option>
23                                         <option value="udp">UDP</option>
24                                         <option value="other"><%:Other...%></option>
25                                 </select>
26                         </div>
27                         <div class="td">
28                                 <input type="text" class="cbi-input-text" id="_newopen.extport" name="_newopen.extport" />
29                         </div>
30                         <div class="td bottom">
31                                 <input type="submit" class="cbi-button cbi-button-add" name="_newopen.submit" value="<%:Add%>" />
32                         </div>
33                 </div>
34         </div>
35 <% end %>
36 <% if #zones > 1 then %>
37         <h4><%:New forward rule%></h4>
38         <div class="table">
39                 <div class="tr cbi-section-table-titles">
40                         <div class="th"><%:Name%></div>
41                         <div class="th"><%:Source zone%></div>
42                         <div class="th"><%:Destination zone%></div>
43                         <div class="th"></div>
44                 </div>
45                 <div class="tr">
46                         <div class="td">
47                                 <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New forward rule%>" />
48                         </div>
49                         <div class="td">
50                                 <select class="cbi-input-text" id="_newfwd.src" name="_newfwd.src">
51                                         <% local k, v; for k, v in ipairs(fw:get_zones()) do -%>
52                                                 <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option>
53                                         <%- end %>
54                                 </select>
55                         </div>
56                         <div class="td">
57                                 <select class="cbi-input-text" id="_newfwd.dest" name="_newfwd.dest">
58                                         <% local k, v; for k, v in ipairs(fw:get_zones()) do -%>
59                                                 <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option>
60                                         <%- end %>
61                                 </select>
62                         </div>
63                         <div class="td bottom">
64                                 <input type="submit" class="cbi-button cbi-button-link" name="_newfwd.submit" value="<%:Add and edit...%>" />
65                         </div>
66                 </div>
67         </div>
68 <% else %>
69         <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" />
70 <% end %>
71
72 <% if #zones > 0 then %>
73         <script type="text/javascript">//<![CDATA[
74                 cbi_validate_field('_newopen.extport', true, 'list(neg(portrange))');
75                 cbi_bind(document.getElementById('_newopen.extport'), 'blur',
76                         function() {
77                                 var n = document.getElementById('_newopen.name');
78                                 var p = document.getElementById('_newopen.proto');
79                                 var hints = {
80                                 /*  port    name     0=both, 1=tcp, 2=udp, 3=other */
81                                         22:   [ 'SSH',   1 ],
82                                         53:   [ 'DNS',   0 ],
83                                         80:   [ 'HTTP',  1 ],
84                                         443:  [ 'HTTPS', 1 ],
85                                 };
86
87                                 if (!this.className.match(/invalid/))
88                                 {
89                                         var hint = hints[this.value || 0];
90                                         if (hint)
91                                         {
92                                                 p.selectedIndex = hint[1];
93
94                                                 if (!n.value)
95                                                         n.value = hint[0];
96                                         }
97                                         else if (!n.value && this.value)
98                                         {
99                                                 n.value = 'Open' + this.value;
100                                         }
101                                 }
102                         });
103
104
105                 cbi_validate_field('cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>', true, 'uciname');
106         //]]></script>
107 <% end %>