diff options
| author | Aleksandar Pesic <peske.nis@gmail.com> | 2022-12-04 21:48:20 +0100 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-12-12 13:26:51 +0100 |
| commit | 3ac1d35257b56cca92ad0eb7f4d18abb366cf105 (patch) | |
| tree | 432db14d1f92a252518f371be420fa0d3ef044c8 /internal/server/secureinternet.go | |
| parent | 37bca013bd4405548b274ac473acf959ad661ee6 (diff) | |
simplify error handling
fixes #6
Signed-off-by: Aleksandar Pesic <peske.nis@gmail.com>
Diffstat (limited to 'internal/server/secureinternet.go')
| -rw-r--r-- | internal/server/secureinternet.go | 151 |
1 files changed, 55 insertions, 96 deletions
diff --git a/internal/server/secureinternet.go b/internal/server/secureinternet.go index 998390d..12263a6 100644 --- a/internal/server/secureinternet.go +++ b/internal/server/secureinternet.go @@ -1,15 +1,13 @@ package server import ( - "errors" - "fmt" - "github.com/eduvpn/eduvpn-common/internal/oauth" "github.com/eduvpn/eduvpn-common/internal/util" "github.com/eduvpn/eduvpn-common/types" + "github.com/go-errors/errors" ) -// A secure internet server which has its own OAuth tokens +// SecureInternetHomeServer secure internet server which has its own OAuth tokens // It specifies the current location url it is connected to. type SecureInternetHomeServer struct { Auth oauth.OAuth `json:"oauth"` @@ -24,150 +22,111 @@ type SecureInternetHomeServer struct { CurrentLocation string `json:"current_location"` } -func (servers *Servers) GetSecureInternetHomeServer() (*SecureInternetHomeServer, error) { - if !servers.HasSecureLocation() { - return nil, errors.New("no secure internet home server") +func (ss *Servers) GetSecureInternetHomeServer() (*SecureInternetHomeServer, error) { + if !ss.HasSecureLocation() { + return nil, errors.Errorf("no secure internet home server") } - return &servers.SecureInternetHomeServer, nil + return &ss.SecureInternetHomeServer, nil } -func (servers *Servers) SetSecureInternet(server Server) error { - errorMessage := "failed setting secure internet server" - base, baseErr := server.Base() - if baseErr != nil { - return types.NewWrappedError(errorMessage, baseErr) +func (ss *Servers) SetSecureInternet(server Server) error { + b, err := server.Base() + if err != nil { + return err } - if base.Type != "secure_internet" { - return types.NewWrappedError(errorMessage, errors.New("not a secure internet server")) + if b.Type != "secure_internet" { + return errors.Errorf("not a secure internet server") } // The location should already be configured // TODO: check for location? - servers.IsType = SecureInternetServerType + ss.IsType = SecureInternetServerType return nil } -func (servers *Servers) RemoveSecureInternet() { +func (ss *Servers) RemoveSecureInternet() { // Empty out the struct - servers.SecureInternetHomeServer = SecureInternetHomeServer{} + ss.SecureInternetHomeServer = SecureInternetHomeServer{} // If the current server is secure internet, default to custom server - if servers.IsType == SecureInternetServerType { - servers.IsType = CustomServerType + if ss.IsType == SecureInternetServerType { + ss.IsType = CustomServerType } } -func (server *SecureInternetHomeServer) TemplateAuth() func(string) string { +func (s *SecureInternetHomeServer) TemplateAuth() func(string) string { return func(authURL string) string { - return util.ReplaceWAYF(server.AuthorizationTemplate, authURL, server.HomeOrganizationID) + return util.ReplaceWAYF(s.AuthorizationTemplate, authURL, s.HomeOrganizationID) } } -func (server *SecureInternetHomeServer) Base() (*Base, error) { - errorMessage := "failed getting current secure internet home base" - if server.BaseMap == nil { - return nil, types.NewWrappedError( - errorMessage, - &SecureInternetMapNotFoundError{}, - ) +func (s *SecureInternetHomeServer) Base() (*Base, error) { + if s.BaseMap == nil { + return nil, errors.Errorf("secure internet map not found") } - base, exists := server.BaseMap[server.CurrentLocation] - - if !exists { - return nil, types.NewWrappedError( - errorMessage, - &SecureInternetBaseNotFoundError{Current: server.CurrentLocation}, - ) + b, ok := s.BaseMap[s.CurrentLocation] + if !ok { + return nil, errors.Errorf("secure internet base with location '%s' not found", s.CurrentLocation) } - return base, nil + return b, nil } -func (server *SecureInternetHomeServer) OAuth() *oauth.OAuth { - return &server.Auth +func (s *SecureInternetHomeServer) OAuth() *oauth.OAuth { + return &s.Auth } -func (servers *Servers) HasSecureLocation() bool { - return servers.SecureInternetHomeServer.CurrentLocation != "" +func (ss *Servers) HasSecureLocation() bool { + return ss.SecureInternetHomeServer.CurrentLocation != "" } -func (server *SecureInternetHomeServer) addLocation( - locationServer *types.DiscoveryServer, -) (*Base, error) { - errorMessage := "failed adding a location" +func (s *SecureInternetHomeServer) addLocation(locSrv *types.DiscoveryServer) (*Base, error) { // Initialize the base map if it is non-nil - if server.BaseMap == nil { - server.BaseMap = make(map[string]*Base) + if s.BaseMap == nil { + s.BaseMap = make(map[string]*Base) } // Add the location to the base map - base, exists := server.BaseMap[locationServer.CountryCode] - - if !exists || base == nil { + b, ok := s.BaseMap[locSrv.CountryCode] + if !ok || b == nil { // Create the base to be added to the map - base = &Base{} - base.URL = locationServer.BaseURL - base.DisplayName = server.DisplayName - base.SupportContact = locationServer.SupportContact - base.Type = "secure_internet" - endpointsErr := base.InitializeEndpoints() - if endpointsErr != nil { - return nil, types.NewWrappedError(errorMessage, endpointsErr) + b = &Base{} + b.URL = locSrv.BaseURL + b.DisplayName = s.DisplayName + b.SupportContact = locSrv.SupportContact + b.Type = "secure_internet" + if err := b.InitializeEndpoints(); err != nil { + return nil, err } } // Ensure it is in the map - server.BaseMap[locationServer.CountryCode] = base - return base, nil + s.BaseMap[locSrv.CountryCode] = b + return b, nil } // Initializes the home server and adds its own location. -func (server *SecureInternetHomeServer) init( - homeOrg *types.DiscoveryOrganization, - homeLocation *types.DiscoveryServer, -) error { - errorMessage := "failed initializing secure internet home server" - - if server.HomeOrganizationID != homeOrg.OrgID { +func (s *SecureInternetHomeServer) init( + homeOrg *types.DiscoveryOrganization, homeLoc *types.DiscoveryServer) error { + if s.HomeOrganizationID != homeOrg.OrgID { // New home organisation, clear everything - *server = SecureInternetHomeServer{} + *s = SecureInternetHomeServer{} } // Make sure to set the organization ID - server.HomeOrganizationID = homeOrg.OrgID - server.DisplayName = homeOrg.DisplayName + s.HomeOrganizationID = homeOrg.OrgID + s.DisplayName = homeOrg.DisplayName // Make sure to set the authorization URL template - server.AuthorizationTemplate = homeLocation.AuthenticationURLTemplate + s.AuthorizationTemplate = homeLoc.AuthenticationURLTemplate - base, baseErr := server.addLocation(homeLocation) - - if baseErr != nil { - return types.NewWrappedError(errorMessage, baseErr) + b, err := s.addLocation(homeLoc) + if err != nil { + return err } // Make sure oauth contains our endpoints - server.Auth.Init(base.URL, base.Endpoints.API.V3.Authorization, base.Endpoints.API.V3.Token) + s.Auth.Init(b.URL, b.Endpoints.API.V3.Authorization, b.Endpoints.API.V3.Token) return nil } - -type SecureInternetHomeNotFoundError struct{} - -func (e *SecureInternetHomeNotFoundError) Error() string { - return "failed to get secure internet home server, not found" -} - -type SecureInternetMapNotFoundError struct{} - -func (e *SecureInternetMapNotFoundError) Error() string { - return "secure internet map not found" -} - -type SecureInternetBaseNotFoundError struct { - Current string -} - -func (e *SecureInternetBaseNotFoundError) Error() string { - return fmt.Sprintf("secure internet base not found with current location: %s", e.Current) -} |
