From a1519ff7685ac987f9d70b1fb49bf777028d49b0 Mon Sep 17 00:00:00 2001 From: jwijenbergh Date: Wed, 1 Mar 2023 00:34:35 +0100 Subject: Client + Exports + HTTP: Set a user-agent using the client's version --- client/client.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'client/client.go') diff --git a/client/client.go b/client/client.go index 6e25694..3c78100 100644 --- a/client/client.go +++ b/client/client.go @@ -9,6 +9,7 @@ import ( "github.com/eduvpn/eduvpn-common/internal/discovery" "github.com/eduvpn/eduvpn-common/internal/failover" "github.com/eduvpn/eduvpn-common/internal/fsm" + "github.com/eduvpn/eduvpn-common/internal/http" "github.com/eduvpn/eduvpn-common/internal/log" "github.com/eduvpn/eduvpn-common/internal/server" "github.com/eduvpn/eduvpn-common/internal/util" @@ -60,6 +61,34 @@ func isAllowedClientID(clientID string) bool { return false } +func userAgentName(clientID string) string { + switch clientID { + case "org.eduvpn.app.windows": + return "eduVPN Windows" + case "org.eduvpn.app.android": + return "eduVPN Android" + case "org.eduvpn.app.ios": + return "eduVPN iOS" + case "org.eduvpn.app.macos": + return "eduVPN MacOS" + case "org.eduvpn.app.linux": + return "eduVPN Linux" + case "org.letsconnect-vpn.app.windows": + return "Let's Connect! Windows" + case "org.letsconnect-vpn.app.android": + return "Let's Connect! Android" + case "org.letsconnect-vpn.app.ios": + return "Let's Connect! iOS" + case "org.letsconnect-vpn.app.macos": + return "Let's Connect! MacOS" + case "org.letsconnect-vpn.app.linux": + return "Let's Connect! Linux" + default: + return "unknown" + } + +} + // Client is the main struct for the VPN client. type Client struct { // The name of the client @@ -99,6 +128,7 @@ type Client struct { // It returns an error if initialization failed, for example when discovery cannot be obtained and when there are no servers. func (c *Client) Register( name string, + version string, directory string, language string, stateCallback func(FSMStateID, FSMStateID, interface{}) bool, @@ -118,6 +148,12 @@ func (c *Client) Register( return errors.Errorf("client ID is not allowed: '%v', see https://git.sr.ht/~fkooman/vpn-user-portal/tree/v3/item/src/OAuth/VpnClientDb.php for a list of allowed IDs", name) } + if len([]rune(version)) > 10 { + return errors.Errorf("version is not allowed: '%s', must be max 10 characters", version) + } + + http.RegisterAgent(userAgentName(name), version) + c.Name = name // TODO: Verify language setting? -- cgit v1.2.3