-
Notifications
You must be signed in to change notification settings - Fork 46
/
ideas-2018.html
375 lines (349 loc) · 21.1 KB
/
ideas-2018.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>OpenWISP GSoC 2018 Ideas List</title>
<link rel="stylesheet" href="../css/reset.css" type="text/css">
<link rel="stylesheet" href="../css/semantic.min.css" type="text/css">
<link rel="stylesheet" href="../css/style.css" type="text/css" media="screen">
<link rel="icon" type="image/x-icon" href="../images/favicon.png" />
</head>
<body class="content">
<div class="ui sidebar vertical menu">
<a class="item" href="../index.html">Home</a>
<a class="item" href="../whatis.html">Features</a>
<a class="item" href="../history.html">History</a>
<a class="item" href="../support.html">Support</a>
<a class="item" href="https://openwisp.io/docs">Docs</a>
<a class="item" href="../thecode.html">Code</a>
<a class="item" href="../about.html">People</a>
</div>
<div class="pusher">
<div class="ui grid" id="top-bar">
<div class="ui computer only column sixteen wide">
<div class="ui center aligned container secondary menu">
<h1 class="item logo">
<a href="../">OpenWISP</a>
</h1>
<div class="right menu">
<a class="item" href="../index.html">Home</a>
<a class="item" href="../whatis.html">Features</a>
<a class="item" href="../history.html">History</a>
<a class="item" href="https://openwisp.io/docs">Docs</a>
<a class="item" href="../support.html">Support</a>
<a class="item" href="../thecode.html">Code</a>
<a class="item" href="../about.html">People</a>
</div>
</div>
</div>
<div class="ui mobile tablet only sixteen wide column">
<div class="ui menu">
<h1 class="item logo">
<a href="../">OpenWISP</a>
</h1>
<div class="right menu">
<div class="menu-open item">
<i class="sidebar icon"></i>
</div>
</div>
</div>
</div>
</div>
<div class="ui grid" id="main">
<article class="ui container">
<h1>Google Summer of Code 2018 Idea List</h1>
<p>
Do you want to apply with us?
We have a page that describes how to increase your chances of success. Please read it carefully.
</p>
<p class="center">
<a class="ui big inverted red button"
href="https://openwisp.io/docs/developer/google-summer-of-code.html">
Get started!
</a>
</p>
<h2 id="django-radius">openwisp-radius: integrating django-freeradius in OpenWISP 2</h2>
<p><strong>Languages & technologies used:</strong> python, django, freeradius, django-rest-framework, ansible.</p>
<p>One of the most important features missing in OpenWISP 2 is the <strong>AAA</strong> (Authorization, Authenticatio and Accounting),
which in OpenWISP 1 is implemented with <a href="https://github.com/openwisp/OpenWISP-User-Management-System">OpenWISP User Management System</a> from now on (OWUMS).</p>
<p>In 2017 we worked on the base module of OpenWISP 2: <a href="https://github.com/openwisp/django-freeradius">django-freeradius</a>, now is time to improve django-freeradius and integrate it in the OpenWISP 2 ecosystem.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>
add a way to enforce session limits (traffic limit, session time limit) in a similar way
as OWUMS does, using radius groups
</li>
<li>
add a way to import users from CSV, first via a management command,
then via the django admin
</li>
<li>
add optional ways to restrict API usage for security reasons, eg: token authentication, ip range;
the default behaviour should allow the application to work out of the box without additional configuration
</li>
<li>
integrate django-freeradius in the rest of the openwisp2 ecosystem;
we will create a new wrapper python package (openwisp-radius)
that will wrap django-freeradius and add multitenancy features to it,
similarly to how openwisp-controller wraps django-netjsonconfig or
openwisp-network-topology wraps django-netjsongraph
</li>
<li>
the user model of openwisp-radius will reuse what is already defined
in <a href="https://github.com/openwisp/openwisp-users">openwisp-users</a>,
but we need to add a way to easily define additional
fields that user may need (think about social security number, badge ID, ecc)
by using a Profile model. We'll need to figure out in which module is
better to add this feature
</li>
<li>
integrate openwisp-radius in ansible-openwisp2 as an optional module;
since some users will want to install only openwisp-radius we will need
to change the ansible role so that openwisp-controller can be disabled
if needed; we may decide to implement the logic of openwisp-radius
in a sub-role that becomes a dependency of ansible-openwisp2 if we feel
this makes maintenance easier
</li>
<li>keep test coverage of django-freeradius at 100%</li>
<li>keep documentation of django-freeradius up to date</li>
<li>achieve test coverage of openwisp-radius of 100%</li>
<li>
ensure the README of openwisp-radius is in line with
the quality of the openwisp2 modules
</li>
</ul>
<h2 id="openwisp-ipam">openwisp-ipam: IP Address Management module for OpenWISP 2</h2>
<p><strong>Languages & technologies used:</strong> python, django, django-rest-framework, javascript.</p>
<p>This project idea consists in creating a new OpenWISP 2 IPAM module with the
basic features for IP Address Management.</p>
<p>The project is divided in 2 phases.</p>
<h4>Phase 1: django-ipam</h4>
<p>This project idea consists in creating a django reusable app which provides
the common features for IP Address Management:</p>
<ul class="ui bulleted link list">
<li>IPv4 and IPv6 IP address management</li>
<li>Section / Subnet management with nested subnets</li>
<li>Automatic free space display for all subnets</li>
<li>Visual display for a specific subnet</li>
<li>IP request module (similar to phpipam)</li>
<li>RESTful API to for CRUD operations (using session authentication and django model permissions for authorization)</li>
<li>Possibility to search for an IP or subnet</li>
<li>CSV Import and Export of subnets and their IPs (using the same format of phpipam)</li>
</ul>
<p>The django app must have also the following traits that will be needed for the second phase:</p>
<ul class="ui bulleted link list">
<li>abstract abase models</li>
<li>reusable views for its API</li>
<li>reusable admin classes</li>
<li>reusable test classes (as in django-netjsongraph and django-freeradius)</li>
</ul>
<h4>Phase 2: openwisp-ipam</h4>
<p>In this phase we will integrate <em>django-ipam</em> with the rest of the OpenWISP 2 ecosystem</p>
<p>This will require creating a module called <em>openwisp-ipam</em> which will wrap
and integrate django-ipam in the rest of the OpenWISP 2 ecosystem,
in a very similar way as <a href="https://github.com/openwisp/openwisp-controller">openwisp-controller</a>
integrates <a href="https://github.com/openwisp/django-netjsonconfig">django-netjsonconfig</a>,
and <a href="https://github.com/openwisp/openwisp-network-topology">openwisp-network-topology</a>
integrates <a href="https://github.com/netjson/django-netjsongraph">django-netjsongraph</a>.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>complete items described in phase 1</li>
<li>complete items described in phase 2</li>
<li>provide good documentation for django-ipam in form of a README.rst (using ResStructuredText), explaining how to install, run tests, configuration details, screenshots and explanation of the main features</li>
<li>provide basic developer documentation for openwisp-ipam in form of a README.rst (using ResStructuredText), explaining how to install and run tests</li>
<li>achieve a test coverage higher than 90% in both modules</li>
</ul>
<h2 id="netjsongraphjs">netjsongraph.js: canvas and geographic data</h2>
<p><strong>Languages & technologies used:</strong> javascript, ES6, CSS, netjson and a bit of python and django in the last phase.</p>
<p><a href="https://github.com/interop-dev/netjsongraph.js">netjsongraph.js</a> is a javascript library based on d3 that allows visualization of
<a href="http://netjson.org/docs/what.html#networkgraph">NetJSON NetworkGraph objects</a>.</p>
<p>
The library uses SVG for visualization, which can be quite slow when many elements are shown,
therefore we would like to try switching to canvas.<br>
We also need an optional mode in which the network is displayed on a map.</p>
<p>
We aim at building something like <a href="https://regensburg.freifunk.net/meshviewer/#/en/graph">mesh viewer</a>
with the difference that this is a library and not an application.<br>
We want to give developers the possibility to implement features like those of mesh-viewer
in their application without reinventing the weel <b>BUT</b> we also want to integrate
these features in OpenWISP 2, infact we are already using the current <i>netjsongraph.js</i> version
in our network topology module, for more information see
<a href="https://github.com/netjson/django-netjsongraph">django-netjsongraph</a> (which is
the base module wrapped by <a href="https://github.com/openwisp/openwisp-network-topology">openwisp-network-topology</a>).
</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>Rewrite the visualizer to use canvas</li>
<li>Add an optional map mode</li>
<li>
Real time updates: refactor/change the javascript API so it becomes
easy to update the network topology graph as updates are received from the server
</li>
<li>
Provide a well written but short example in the README of how to use the
<i>real time update</i> feature to update the graph using websockets
</li>
<li>
Add support for date parsing, for example "2018-02-12T10:00:00Z" should be
converted to the date, time and time zone used by the browser.
</li>
<li>Modernize javascript code organization:
you may want to use some modern JS tool for building the library and perform testing
</li>
<li>Achieve test coverage of 90%</li>
<li>Update the travis build so that it automatically runs tests, style checks and test coverage</li>
<li>Update documentation and examples in README</li>
<li>Explain how to migrate from the previous version to the new version in the README</li>
<li>Upgrade the netjsongraph.js version in <a href="https://github.com/netjson/django-netjsongraph">django-netjsongraph</a>, ensuring everything works!</li>
<li>Release netjsongraph.js on npm</li>
</ul>
<h2 id="netengine">netengine: pull monitoring info from network devices</h2>
<p><strong>Languages & technologies used:</strong> python, NetJSON, SNMP, HTTP, OpenWRT, Linux.</p>
<p>
Netengine is a python library that aims to provide a single API
to extract common information from network devices using different protocols
(eg: SNMP, SSH, HTTP) and different firwmares (eg: OpenWRT, AirOS).
</p>
<p>
The library kinda worked but was not brought to production level work
and since OpenWISP 2 is going to have a monitoring system soon, wa want
to rewrite this library to bring its implementation to production level.
</p>
<p>
<strong>NOTE</strong>: backward compatibility does not have to be maintained
we can freely change and improve the API and internal structure of the library
if we think the change is going to improve the quality of the implementation.
</p>
<p>
<strong>WARNING</strong>: to work on this project you need an AirOS device;
OpenWRT/LEDE can be installed in a virtual box VM, but AirOS cannot (at least
not as easily). If you don't have an AirOS device compatible with the latest
version and you do not indend to buy one you cannot work on this project.<br>
If it ever happens that you get accepted but you fail to buy an AirOS device,
you will be failed.
</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>
change the output format of the to_json method to
<a href="http://netjson.org/docs/what.html#devicemonitoring">NetJSON DeviceMonitoring</a>
</li>
<li>
mock all external network calls during tests (SSH, HTTP, SNMP)
</li>
<li>
upgrade the OpenWRT backends to make it work well on OpenWRT Chaos Calmer and LEDE 17-01;
if there are incompatibilities, create different backends for each version, ensuring
the shared logic is stored in a common class
</li>
<li>
upgrade the AirOS backends to make it work with the latest 2 version of AirOS;
if there are incompatibilities, create different backends for each version, ensuring
the shared logic is stored in a common class
</li>
<li>achieve 95% test coverage</li>
<li>
improve documentation: at the moment the documentation is really scarce,
we need the documentation to mention all the backends and all the important
features, providing also a few examples of how to use the library
</li>
<li>set up a travis build that performs tests and checks test coverage</li>
</ul>
<p><strong>NOTE</strong>: this is one of those projects that sounds easy but is not.</p>
<h2 id="ansible-plugin-for-netjsonconfig">Ansible plugin for the netjsonconfig library</h2>
<p><strong>Languages & technologies used:</strong> python, ansible.</p>
<p><a class="reference external" href="https://github.com/ansible/ansible">Ansible</a> is an IT automation tool that has been recently
gaining popularity also in the <a class="reference external" href="http://openwrt.org">OpenWRT</a> world.</p>
<p>We want to implement an ansible plugin that integrates <a class="reference external" href="http://netjsonconfig.openwisp.org">netjsonconfig</a>
and allows using its two most interesting features, that is templates and context, in ansible.</p>
<p>It should be possible to define configuration templates, assign them to specific playbooks and define
specific configurations for hosts.</p>
<p>The configuration format format used by netjsonconfig is <a class="reference external" href="http://netjson.org/docs/what.html#deviceconfiguration">NetJSON DeviceConfiguration</a>, but a <em>YAML</em>
conversion of <em>NetJSON</em> would be good as well. Support for both would be preferred.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>Implement an ansible module that integrates netjsonconfig in ansible and allows using
<a class="reference external" href="http://netjson.org/docs/what.html#deviceconfiguration">NetJSON DeviceConfiguration</a> (or its <em>YAML</em> equivalent) to configure OpenWRT devices</li>
<li>Achieve a test coverage higher than 80%</li>
<li>Provide documentation using <a class="reference external" href="http://www.sphinx-doc.org/">python-sphinx</a></li>
</ul>
<h2 id="netjson-ubus">Implement NetJSON output in ubus (OpenWRT/LEDE)</h2>
<p><a href="http://netjson.org">NetJSON</a> is emerging as a common format to exchange configuration and monitoring information
from network devices. Year after year it's becoming easier to achieve interoperability between different software packages
for community networks. Now is time to start implementing NetJSON in a lower level of the stack and the next
natural step in that direction is to implement it in <a href="https://wiki.openwrt.org/doc/techref/ubus">ubus (OpenWrt micro bus architecture)</a>,
which is included by default in <a href="http://www.lede-project.org/">LEDE</a> and <a href="https://openwrt.org/">OpenWRT</a>, the two linux distributions
commonly used with OpenWISP.
</p>
<p>In this project the student will have to develop ubus API extensions that allow retrieving monitoring informatio in NetJSON format
(<a href="http://netjson.org/docs/what.html#devicemonitoring">NetJSON DeviceMonitoring</a>) from ubus.
</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>
Implement a way to retrieve <a href="http://netjson.org/docs/what.html#devicemonitoring">DeviceMonitoring</a> output in ubus,
consider reusing part of the code used in <a href="https://github.com/wlanslovenija/nodewatcher-agent#ubus-api">nodewatcher-agent</a>
</li>
<li>Write tests and obtain test coverage of 90%</li>
<li>Write a Makefile to package the software for OpenWRT/LEDE</li>
<li>Document the compilation/install process and the usage of the module in the README</li>
<li>Set up a build on travis that automatically compiles the modules and runs tests</li>
</ul>
<h2 id="pfsense-backend-for-netjsonconfig">PfSense backend for OpenWISP 2</h2>
<p><strong>Languages & technologies used:</strong> python, pfsense, json-schema, netjson.</p>
<p>Implement a <a class="reference external" href="https://pfsense.org/">PfSense</a> backend in <a class="reference external" href="http://netjsonconfig.openwisp.org">netjsonconfig</a>.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend must generate a configuration archive compatible with PfSense 2.2.x</li>
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend must generate a configuration archive compatible with PfSense 2.3.x</li>
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend schema must cover at least 75% of the features offered by the PfSense
web interface, with particular attention to interfaces, wireless settings, vlans, firewall rules and VPNs</li>
<li>The general test coverage of the library must be kept higher than 95%</li>
<li>The backend must be to be documented inside the <a class="reference external" href="http://www.sphinx-doc.org/">python-sphinx</a> docs dir
contained in the <em>netjsonconfig</em> repo</li>
</ul>
<h2>Apply with us</h2>
<p>
Do you want to apply with us?
We have a page that describes how to increase your chances of success. Please read it carefully.
</p>
<p class="center">
<a class="ui big inverted red button"
href="https://openwisp.io/docs/developer/google-summer-of-code.html">
Get started!
</a>
</p>
</article>
</div>
<div class="ui black inverted segment padding-vertical" id="footer">
<div class="ui container stackable two column grid">
<div class="column logo white">
<a href="./">OpenWISP</a>
</div>
<div class="column social">
<a href="https://twitter.com/openwisp" class="ui twitter button">
<i class="twitter icon"></i>
Twitter
</a>
<a href="https://facebook.com/openwisp" class="ui facebook button">
<i class="facebook icon"></i>
Facebook
</a>
<a href="https://www.linkedin.com/company/openwisp" class="ui linkedin button">
<i class="linkedin icon"></i>
Linked In
</a>
<a href="https://github.com/openwisp" class="ui black button">
<i class="github icon"></i> Github
</a>
</div>
<p>© 2008-<script>document.write(new Date().getFullYear())</script> OpenWISP and individual contributors.</p>
</div>
</div>
</div>
<script src="../js/jquery-3.7.1.min.js"></script>
<script src="../js/semantic.min.js"></script>
<script src="../js/scripts.js"></script>
</body>
</html>