Unverified Commit 3fdbb895 authored by Kali Kaneko's avatar Kali Kaneko
Browse files

[feat] obfs4 selectable from gui

parent 00be891d
......@@ -19,8 +19,7 @@ Obfuscated bridges
-----------------------------
At the moment RiseupVPN offers obfs4 transport "bridges" (you can try them with
the `--obfs4` command line argument, a way to enable them from the gui will be
following soon).
the `--obfs4` command line argument, or by checking the "use obfs4 bridges" checkbox on the preferences panel.
If you know you need bridges but the current ones do not work for you, please
get in contact. We're interested in learning what are the specific censorship
......
......@@ -43,9 +43,9 @@ func UseAutomaticGateway() {
backend.UseAutomaticGateway()
}
//export UseTransport
func UseTransport(transport string) {
backend.UseTransport(transport)
//export SetTransport
func SetTransport(transport string) {
backend.SetTransport(string(transport))
}
//export GetTransport
......
......@@ -52,9 +52,9 @@ void Backend::useAutomaticGateway()
UseAutomaticGateway();
}
void Backend::useTransport(QString transport)
void Backend::setTransport(QString transport)
{
UseTransport(toGoStr(transport));
SetTransport(toGoStr(transport));
}
QString Backend::getTransport()
......
......@@ -38,7 +38,7 @@ public slots:
void donateSeen();
void useLocation(QString username);
void useAutomaticGateway();
void useTransport(QString transport);
void setTransport(QString transport);
QString getTransport();
void login(QString username, QString password);
void resetError(QString errlabel);
......
......@@ -9,6 +9,8 @@ Item {
anchors.centerIn: parent
width: parent.width
property alias displayReconnect: bridgeReconnect.visible
// TODO get obfs4Available from backend, in case provider doesn't have it
visible: true
Column {
......@@ -26,11 +28,13 @@ Item {
if (checked) {
Logic.setNeedsReconnect(true);
bridgeReconnect.visible = true;
app.useBridges(true);
} else {
// This would also need a "needs reconnect" for de-selecting bridges the next time.
// better to wait and see the new connection widgets though
Logic.setNeedsReconnect(false);
bridgeReconnect.visible = false;
app.useBridges(false);
}
}
}
......@@ -42,6 +46,7 @@ Item {
text: qsTr("Select a bridge only if you know that you need it to evade censorship in your country or local network.")
anchors.horizontalCenter: parent.horizontalCenter
wrapMode: Text.WordWrap
visible: !bridgeReconnect.visible
}
Text {
......@@ -49,10 +54,10 @@ Item {
width: 250
font.pixelSize: 12
color: "red"
text: qsTr("We will attempt to connect to a bridge the next time you connect to the VPN.")
text: qsTr("An obfs4 bridge will be used the next time you connect to the VPN.")
anchors.horizontalCenter: parent.horizontalCenter
wrapMode: Text.WordWrap
visible: false;
visible: false
}
}
}
......@@ -507,6 +507,14 @@ ApplicationWindow {
return ctx.currentLocation + ", " + ctx.currentCountry
}
function useBridges(value) {
if (value==true) {
backend.setTransport("obfs4")
} else {
backend.setTransport("openvpn")
}
}
property alias brReconnect:bridgesTab.displayReconnect
}
......@@ -24,9 +24,8 @@ func getGateway() string {
return ctx.bm.GetCurrentGateway()
}
// TODO return bool?
func useTransport(transport string) {
err := ctx.bm.UseTransport(transport)
func setTransport(t string) {
err := ctx.bm.SetTransport(t)
if err != nil {
log.Println(err)
}
......
......@@ -79,8 +79,8 @@ func UseAutomaticGateway() {
}
}
func UseTransport(label string) {
ctx.bm.UseTransport(label)
func SetTransport(label string) {
ctx.bm.SetTransport(label)
}
func GetTransport() *C.char {
......
......@@ -36,7 +36,6 @@ type Bitmask interface {
GetCurrentLocation() string
GetCurrentCountry() string
IsManualLocation() bool
UseTransport(transport string) error
NeedsCredentials() bool
DoLogin(username, password string) (bool, error)
}
......@@ -109,7 +109,7 @@ func InitializeBitmask(conf *config.Config) (Bitmask, error) {
func setTransport(b Bitmask, conf *config.Config) error {
if conf.Obfs4 {
log.Printf("Use transport Obfs4")
err := b.UseTransport("obfs4")
err := b.SetTransport("obfs4")
if err != nil {
log.Printf("Error setting transport: %v", err)
return err
......
......@@ -319,15 +319,25 @@ func (b *Bitmask) UseAutomaticGateway() {
b.bonafide.SetAutomaticGateway()
}
// UseTransport selects an obfuscation transport to use
func (b *Bitmask) UseTransport(transport string) error {
if transport != "obfs4" {
return fmt.Errorf("Transport %s not implemented", transport)
// SetTransport selects an obfuscation transport to use
func (b *Bitmask) SetTransport(t string) error {
if t != "openvpn" && t != "obfs4" {
return fmt.Errorf("Transport %s not implemented", t)
}
log.Println("Setting transport to", t)
// compare and set string looks strange, but if assigning directly
// we're getting some kind of corruption with the transport string.
// I suspect something's
// not quite right with the c<->go char pointers handling.
if t == "obfs4" {
b.transport = "obfs4"
} else if t == "openvpn" {
b.transport = "openvpn"
}
b.transport = transport
return nil
}
// GetTransport gets the obfuscation transport to use. Only obfs4 available for now.
func (b *Bitmask) GetTransport() string {
if b.transport == "obfs4" {
return "obfs4"
......@@ -336,15 +346,6 @@ func (b *Bitmask) GetTransport() string {
}
}
func (b *Bitmask) SetTransport(t string) error {
if t != "openvpn" && t != "obfs4" {
return errors.New("Transport not supported: " + t)
}
log.Println("Setting transport to", t)
b.transport = t
return nil
}
func (b *Bitmask) getTempCertPemPath() string {
return path.Join(b.tempdir, "openvpn.pem")
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment