Skip to content
Snippets Groups Projects
Unverified Commit 0f8eab4e authored by Kali Kaneko's avatar Kali Kaneko
Browse files

[feat] first simplistic implementation of a rest api

It lacks authentication, and I need to debug a segfault/abort when
quitting. But kind of useful for demonstration purposes.
parent 3e0764ca
No related branches found
No related tags found
No related merge requests found
......@@ -66,6 +66,11 @@ func InitializeTestBitmaskContext() {
backend.EnableMockBackend()
}
//export EnableWebAPI
func EnableWebAPI() {
backend.EnableWebAPI()
}
//export RefreshContext
func RefreshContext() *C.char {
return (*C.char)(backend.RefreshContext())
......
......@@ -65,6 +65,12 @@ int main(int argc, char **argv) {
"together with gnome shell "
"extension, or to control VPN by other means)."),
},
{
{"w", "web-api"},
QApplication::translate(
"main",
"Enable web api (on port 8080)."),
},
{
{"i", "install-helpers"},
QApplication::translate(
......@@ -76,6 +82,7 @@ int main(int argc, char **argv) {
bool hideSystray = parser.isSet("no-systray");
bool installHelpers = parser.isSet("install-helpers");
bool webAPI = parser.isSet("web-api");
if (hideSystray) {
qDebug() << "Not showing systray icon because --no-systray option is set.";
......@@ -132,6 +139,9 @@ int main(int argc, char **argv) {
/* let the Go side initialize its internal state */
InitializeBitmaskContext();
/* if requested, enable web api for controlling the VPN */
if (webAPI) { EnableWebAPI(); };
/* kick off your shoes, put your feet up */
return app.exec();
}
......@@ -76,6 +76,10 @@ func EnableMockBackend() {
go enableMockBackend()
}
func EnableWebAPI() {
go enableWebAPI()
}
/* these two are a bit redundant since we already add them to ctx. however, we
want to have them available before everything else, to be able to parse cli
arguments. In the long run, we probably want to move all vendoring to qt, so
......
package backend
import (
"fmt"
"log"
"net/http"
)
func webOn(w http.ResponseWriter, r *http.Request) {
log.Println("Web UI: on")
SwitchOn()
}
func webOff(w http.ResponseWriter, r *http.Request) {
log.Println("Web UI: off")
SwitchOff()
}
func webStatus(w http.ResponseWriter, r *http.Request) {
log.Println("Web UI: status")
fmt.Fprintf(w, ctx.Status.String())
}
func webQuit(w http.ResponseWriter, r *http.Request) {
log.Println("Web UI: quit")
Quit()
}
func enableWebAPI() {
http.HandleFunc("/vpn/start", webOn)
http.HandleFunc("/vpn/stop", webOff)
http.HandleFunc("/vpn/status", webStatus)
http.HandleFunc("/vpn/quit", webQuit)
http.ListenAndServe(":8080", nil)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment