The OONI Backend (or OONIB) will mainly accomplish two tasks: assisting probes in running tests (TestHelper), collecting reports from OONI-probes or third party censorship related testing systems (Reports, PacketCapture)
The OONI Backend (or OONIB) will mainly accomplish two tasks: assisting probes in running tests (TestHelper), collecting reports from OONI-probes or third party censorship related testing systems (Reports, PacketCapture)
== Test Helpers ==
## Test Helpers
This backend infrastructure will be distributed and will run at least the following services:
This backend infrastructure will be distributed and will run at least the following services:
* UDP and TCP Echo ([wiki:doc/OONI/Backend/TCPUDPEcho])
* UDP and TCP Echo ([doc/OONI/Backend/TCPUDPEcho](doc/OONI/Backend/TCPUDPEcho))
* Two way traceroute helper ([wiki:doc/OONI/Tests/TwoWayTraceroute])
* Two way traceroute helper ([doc/OONI/Tests/TwoWayTraceroute](doc/OONI/Tests/TwoWayTraceroute))
* HTTP Server ([wiki:doc/OONI/Backend/HTTPServer])
* HTTP Server ([doc/OONI/Backend/HTTPServer](doc/OONI/Backend/HTTPServer))
* DNS resolver ([wiki:doc/OONI/Backend/DNSResolver])
* DNS resolver ([doc/OONI/Backend/DNSResolver](doc/OONI/Backend/DNSResolver))
== Reporting system ==
## Reporting system
The reporting system will expose an HTTP RESTful API over HTTPS or HTTPO (a.k.a. HTTP/.onion). This API will allow probes that are interested in sending a report to an OONIB node to do so.
The reporting system will expose an HTTP RESTful API over HTTPS or HTTPO (a.k.a. HTTP/.onion). This API will allow probes that are interested in sending a report to an OONIB node to do so.
=== REST API spec ===
### REST API spec
'''/report/do'''
**/report/do**
Responsible for creating and updating reports.
Responsible for creating and updating reports.
'':POST''
_:POST_
Creates a new report with the input
Creates a new report with the input
{{{
```
* Request
* Request
...
@@ -46,10 +46,10 @@ Creates a new report with the input
...
@@ -46,10 +46,10 @@ Creates a new report with the input
{'backend_version': 'XXX', 'report_id': 'XXX'}
{'backend_version': 'XXX', 'report_id': 'XXX'}
}}}
```
''Required parameters''
_Required parameters_
software_name: This is a string specifying the name of the software that is submitting a report (for example "OONI-probe")
software_name: This is a string specifying the name of the software that is submitting a report (for example "OONI-probe")
...
@@ -59,36 +59,36 @@ test_name: This is the name of the test for which the report is being submitted
...
@@ -59,36 +59,36 @@ test_name: This is the name of the test for which the report is being submitted
test_version: This is the version of the test for which a report is being created
test_version: This is the version of the test for which a report is being created
''Optional Parameters''
_Optional Parameters_
test_helper: specifies which test helper we are interested in using
test_helper: specifies which test helper we are interested in using
client_ip: is required when using test helpers to allow the matching up of client submitted reports with backend generated reports in OONIB.
client_ip: is required when using test helpers to allow the matching up of client submitted reports with backend generated reports in OONIB.
'':PUT''
_:PUT_
Update an already existing report.
Update an already existing report.
{{{
```
{'report_id': 'XXX',
{'report_id': 'XXX',
'report': 'XXX'
'report': 'XXX'
}
}
}}}
```
'''/report/pcap'''
**/report/pcap**
This is the async pcap reporting system. It requires the client to have created a report
This is the async pcap reporting system. It requires the client to have created a report
already, but can work independently from test progress.
already, but can work independently from test progress.
'''/testhelper/'''
**/testhelper/**
This part of the API is used for signaling with the Test helper backend
This part of the API is used for signaling with the Test helper backend
'''/controlchannel/'''
**/controlchannel/**
This part of the API is used for configuring the control channel part of the backend.
This part of the API is used for configuring the control channel part of the backend.