diff options
Diffstat (limited to 'internal/server/institute.go')
| -rw-r--r-- | internal/server/institute.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/internal/server/institute.go b/internal/server/institute.go new file mode 100644 index 0000000..881f96d --- /dev/null +++ b/internal/server/institute.go @@ -0,0 +1,73 @@ +package server + +import ( + "context" + "time" + + "github.com/eduvpn/eduvpn-common/internal/api" + "github.com/eduvpn/eduvpn-common/internal/config/v2" + "github.com/eduvpn/eduvpn-common/internal/discovery" + "github.com/eduvpn/eduvpn-common/types/server" + "github.com/jwijenbergh/eduoauth-go" +) + +func (s *Servers) AddInstitute(ctx context.Context, disco *discovery.Discovery, id string, na bool) (*Server, error) { + // This is basically done to double check if the server is part of the institute access section of disco + dsrv, err := disco.ServerByURL(id, "institute_access") + if err != nil { + return nil, err + } + + sd := api.ServerData{ + ID: dsrv.BaseURL, + Type: server.TypeInstituteAccess, + BaseWK: dsrv.BaseURL, + BaseAuthWK: dsrv.BaseURL, + } + + var a *api.API + if !na { + // Authorize by creating the API object + a, err = api.NewAPI(ctx, s.clientID, sd, s.cb, nil) + if err != nil { + return nil, err + } + } + + err = s.config.AddServer(dsrv.BaseURL, server.TypeInstituteAccess, v2.Server{LastAuthorizeTime: time.Now()}) + if err != nil { + return nil, err + } + + inst := s.NewServer(dsrv.BaseURL, server.TypeInstituteAccess, a) + return &inst, nil +} + +func (s *Servers) GetInstitute(ctx context.Context, id string, disco *discovery.Discovery, tok *eduoauth.Token, disableAuth bool) (*Server, error) { + // This is basically done to double check if the server is part of the institute access section of disco + dsrv, err := disco.ServerByURL(id, "institute_access") + if err != nil { + return nil, err + } + + // Get the server from the config + _, err = s.config.GetServer(dsrv.BaseURL, server.TypeInstituteAccess) + if err != nil { + return nil, err + } + sd := api.ServerData{ + ID: dsrv.BaseURL, + Type: server.TypeInstituteAccess, + BaseWK: dsrv.BaseURL, + BaseAuthWK: dsrv.BaseURL, + DisableAuthorize: disableAuth, + } + // Authorize by creating the API object + a, err := api.NewAPI(ctx, s.clientID, sd, s.cb, tok) + if err != nil { + return nil, err + } + + inst := s.NewServer(dsrv.BaseURL, server.TypeInstituteAccess, a) + return &inst, nil +} |
