diff --git a/api/routes/routes.go b/api/routes/routes.go index 78140eb00af..99b1f9d51b4 100644 --- a/api/routes/routes.go +++ b/api/routes/routes.go @@ -35,7 +35,7 @@ func NewRouter(service services.Service) *echo.Echo { internalAPI.POST(OfflineDeviceURL, gateway.Handler(handler.OfflineDevice)) internalAPI.GET(LookupDeviceURL, gateway.Handler(handler.LookupDevice)) - internalAPI.PATCH(SetSessionAuthenticatedURL, gateway.Handler(handler.SetSessionAuthenticated)) + internalAPI.PATCH(UpdateSessionURL, gateway.Handler(handler.UpdateSession)) internalAPI.POST(CreateSessionURL, gateway.Handler(handler.CreateSession)) internalAPI.POST(FinishSessionURL, gateway.Handler(handler.FinishSession)) internalAPI.POST(KeepAliveSessionURL, gateway.Handler(handler.KeepAliveSession)) diff --git a/api/routes/session.go b/api/routes/session.go index 2ffef51f983..fe0476954bf 100644 --- a/api/routes/session.go +++ b/api/routes/session.go @@ -11,14 +11,14 @@ import ( ) const ( - GetSessionsURL = "/sessions" - GetSessionURL = "/sessions/:uid" - SetSessionAuthenticatedURL = "/sessions/:uid" - CreateSessionURL = "/sessions" - FinishSessionURL = "/sessions/:uid/finish" - KeepAliveSessionURL = "/sessions/:uid/keepalive" - RecordSessionURL = "/sessions/:uid/record" - PlaySessionURL = "/sessions/:uid/play" + GetSessionsURL = "/sessions" + GetSessionURL = "/sessions/:uid" + UpdateSessionURL = "/sessions/:uid" + CreateSessionURL = "/sessions" + FinishSessionURL = "/sessions/:uid/finish" + KeepAliveSessionURL = "/sessions/:uid/keepalive" + RecordSessionURL = "/sessions/:uid/record" + PlaySessionURL = "/sessions/:uid/play" ) const ( @@ -62,8 +62,8 @@ func (h *Handler) GetSession(c gateway.Context) error { return c.JSON(http.StatusOK, session) } -func (h *Handler) SetSessionAuthenticated(c gateway.Context) error { - var req requests.SessionAuthenticatedSet +func (h *Handler) UpdateSession(c gateway.Context) error { + var req requests.SessionUpdate if err := c.Bind(&req); err != nil { return err } @@ -72,7 +72,10 @@ func (h *Handler) SetSessionAuthenticated(c gateway.Context) error { return err } - return h.service.SetSessionAuthenticated(c.Ctx(), models.UID(req.UID), req.Authenticated) + return h.service.UpdateSession(c.Ctx(), models.UID(req.UID), models.SessionUpdate{ + Authenticated: req.Authenticated, + Type: req.Type, + }) } func (h *Handler) CreateSession(c gateway.Context) error { diff --git a/api/services/mocks/services.go b/api/services/mocks/services.go index 836ea84e579..20abd96be06 100644 --- a/api/services/mocks/services.go +++ b/api/services/mocks/services.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.43.1. DO NOT EDIT. +// Code generated by mockery v2.20.0. DO NOT EDIT. package mocks @@ -30,10 +30,6 @@ type Service struct { func (_m *Service) AddNamespaceUser(ctx context.Context, memberUsername string, memberRole string, tenantID string, userID string) (*models.Namespace, error) { ret := _m.Called(ctx, memberUsername, memberRole, tenantID, userID) - if len(ret) == 0 { - panic("no return value specified for AddNamespaceUser") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string) (*models.Namespace, error)); ok { @@ -60,10 +56,6 @@ func (_m *Service) AddNamespaceUser(ctx context.Context, memberUsername string, func (_m *Service) AddPublicKeyTag(ctx context.Context, tenant string, fingerprint string, tag string) error { ret := _m.Called(ctx, tenant, fingerprint, tag) - if len(ret) == 0 { - panic("no return value specified for AddPublicKeyTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, fingerprint, tag) @@ -78,10 +70,6 @@ func (_m *Service) AddPublicKeyTag(ctx context.Context, tenant string, fingerpri func (_m *Service) AuthAPIKey(ctx context.Context, key string) (*models.APIKey, error) { ret := _m.Called(ctx, key) - if len(ret) == 0 { - panic("no return value specified for AuthAPIKey") - } - var r0 *models.APIKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.APIKey, error)); ok { @@ -108,10 +96,6 @@ func (_m *Service) AuthAPIKey(ctx context.Context, key string) (*models.APIKey, func (_m *Service) AuthCacheToken(ctx context.Context, tenant string, id string, token string) error { ret := _m.Called(ctx, tenant, id, token) - if len(ret) == 0 { - panic("no return value specified for AuthCacheToken") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, id, token) @@ -126,10 +110,6 @@ func (_m *Service) AuthCacheToken(ctx context.Context, tenant string, id string, func (_m *Service) AuthDevice(ctx context.Context, req requests.DeviceAuth, remoteAddr string) (*models.DeviceAuthResponse, error) { ret := _m.Called(ctx, req, remoteAddr) - if len(ret) == 0 { - panic("no return value specified for AuthDevice") - } - var r0 *models.DeviceAuthResponse var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.DeviceAuth, string) (*models.DeviceAuthResponse, error)); ok { @@ -156,10 +136,6 @@ func (_m *Service) AuthDevice(ctx context.Context, req requests.DeviceAuth, remo func (_m *Service) AuthGetToken(ctx context.Context, id string) (*models.UserAuthResponse, error) { ret := _m.Called(ctx, id) - if len(ret) == 0 { - panic("no return value specified for AuthGetToken") - } - var r0 *models.UserAuthResponse var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.UserAuthResponse, error)); ok { @@ -186,10 +162,6 @@ func (_m *Service) AuthGetToken(ctx context.Context, id string) (*models.UserAut func (_m *Service) AuthIsCacheToken(ctx context.Context, tenant string, id string) (bool, error) { ret := _m.Called(ctx, tenant, id) - if len(ret) == 0 { - panic("no return value specified for AuthIsCacheToken") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (bool, error)); ok { @@ -214,10 +186,6 @@ func (_m *Service) AuthIsCacheToken(ctx context.Context, tenant string, id strin func (_m *Service) AuthPublicKey(ctx context.Context, req requests.PublicKeyAuth) (*models.PublicKeyAuthResponse, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for AuthPublicKey") - } - var r0 *models.PublicKeyAuthResponse var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.PublicKeyAuth) (*models.PublicKeyAuthResponse, error)); ok { @@ -244,10 +212,6 @@ func (_m *Service) AuthPublicKey(ctx context.Context, req requests.PublicKeyAuth func (_m *Service) AuthSwapToken(ctx context.Context, ID string, tenant string) (*models.UserAuthResponse, error) { ret := _m.Called(ctx, ID, tenant) - if len(ret) == 0 { - panic("no return value specified for AuthSwapToken") - } - var r0 *models.UserAuthResponse var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.UserAuthResponse, error)); ok { @@ -274,10 +238,6 @@ func (_m *Service) AuthSwapToken(ctx context.Context, ID string, tenant string) func (_m *Service) AuthUncacheToken(ctx context.Context, tenant string, id string) error { ret := _m.Called(ctx, tenant, id) - if len(ret) == 0 { - panic("no return value specified for AuthUncacheToken") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, tenant, id) @@ -292,10 +252,6 @@ func (_m *Service) AuthUncacheToken(ctx context.Context, tenant string, id strin func (_m *Service) AuthUser(ctx context.Context, req *requests.UserAuth, sourceIP string) (*models.UserAuthResponse, int64, string, error) { ret := _m.Called(ctx, req, sourceIP) - if len(ret) == 0 { - panic("no return value specified for AuthUser") - } - var r0 *models.UserAuthResponse var r1 int64 var r2 string @@ -336,10 +292,6 @@ func (_m *Service) AuthUser(ctx context.Context, req *requests.UserAuth, sourceI func (_m *Service) AuthUserInfo(ctx context.Context, username string, tenant string, token string) (*models.UserAuthResponse, error) { ret := _m.Called(ctx, username, tenant, token) - if len(ret) == 0 { - panic("no return value specified for AuthUserInfo") - } - var r0 *models.UserAuthResponse var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (*models.UserAuthResponse, error)); ok { @@ -366,10 +318,6 @@ func (_m *Service) AuthUserInfo(ctx context.Context, username string, tenant str func (_m *Service) BillingEvaluate(_a0 internalclient.Client, _a1 string) (bool, error) { ret := _m.Called(_a0, _a1) - if len(ret) == 0 { - panic("no return value specified for BillingEvaluate") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(internalclient.Client, string) (bool, error)); ok { @@ -394,10 +342,6 @@ func (_m *Service) BillingEvaluate(_a0 internalclient.Client, _a1 string) (bool, func (_m *Service) BillingReport(_a0 internalclient.Client, _a1 string, _a2 string) error { ret := _m.Called(_a0, _a1, _a2) - if len(ret) == 0 { - panic("no return value specified for BillingReport") - } - var r0 error if rf, ok := ret.Get(0).(func(internalclient.Client, string, string) error); ok { r0 = rf(_a0, _a1, _a2) @@ -412,10 +356,6 @@ func (_m *Service) BillingReport(_a0 internalclient.Client, _a1 string, _a2 stri func (_m *Service) CreateAPIKey(ctx context.Context, req *requests.CreateAPIKey) (*responses.CreateAPIKey, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for CreateAPIKey") - } - var r0 *responses.CreateAPIKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, *requests.CreateAPIKey) (*responses.CreateAPIKey, error)); ok { @@ -442,10 +382,6 @@ func (_m *Service) CreateAPIKey(ctx context.Context, req *requests.CreateAPIKey) func (_m *Service) CreateDeviceTag(ctx context.Context, uid models.UID, tag string) error { ret := _m.Called(ctx, uid, tag) - if len(ret) == 0 { - panic("no return value specified for CreateDeviceTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, tag) @@ -460,10 +396,6 @@ func (_m *Service) CreateDeviceTag(ctx context.Context, uid models.UID, tag stri func (_m *Service) CreateNamespace(ctx context.Context, namespace requests.NamespaceCreate, userID string) (*models.Namespace, error) { ret := _m.Called(ctx, namespace, userID) - if len(ret) == 0 { - panic("no return value specified for CreateNamespace") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.NamespaceCreate, string) (*models.Namespace, error)); ok { @@ -490,10 +422,6 @@ func (_m *Service) CreateNamespace(ctx context.Context, namespace requests.Names func (_m *Service) CreatePrivateKey(ctx context.Context) (*models.PrivateKey, error) { ret := _m.Called(ctx) - if len(ret) == 0 { - panic("no return value specified for CreatePrivateKey") - } - var r0 *models.PrivateKey var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*models.PrivateKey, error)); ok { @@ -520,10 +448,6 @@ func (_m *Service) CreatePrivateKey(ctx context.Context) (*models.PrivateKey, er func (_m *Service) CreatePublicKey(ctx context.Context, req requests.PublicKeyCreate, tenant string) (*responses.PublicKeyCreate, error) { ret := _m.Called(ctx, req, tenant) - if len(ret) == 0 { - panic("no return value specified for CreatePublicKey") - } - var r0 *responses.PublicKeyCreate var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.PublicKeyCreate, string) (*responses.PublicKeyCreate, error)); ok { @@ -550,10 +474,6 @@ func (_m *Service) CreatePublicKey(ctx context.Context, req requests.PublicKeyCr func (_m *Service) CreateSession(ctx context.Context, session requests.SessionCreate) (*models.Session, error) { ret := _m.Called(ctx, session) - if len(ret) == 0 { - panic("no return value specified for CreateSession") - } - var r0 *models.Session var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.SessionCreate) (*models.Session, error)); ok { @@ -580,10 +500,6 @@ func (_m *Service) CreateSession(ctx context.Context, session requests.SessionCr func (_m *Service) DeactivateSession(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for DeactivateSession") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -598,10 +514,6 @@ func (_m *Service) DeactivateSession(ctx context.Context, uid models.UID) error func (_m *Service) DeleteAPIKey(ctx context.Context, req *requests.DeleteAPIKey) error { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for DeleteAPIKey") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, *requests.DeleteAPIKey) error); ok { r0 = rf(ctx, req) @@ -616,10 +528,6 @@ func (_m *Service) DeleteAPIKey(ctx context.Context, req *requests.DeleteAPIKey) func (_m *Service) DeleteDevice(ctx context.Context, uid models.UID, tenant string) error { ret := _m.Called(ctx, uid, tenant) - if len(ret) == 0 { - panic("no return value specified for DeleteDevice") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, tenant) @@ -634,10 +542,6 @@ func (_m *Service) DeleteDevice(ctx context.Context, uid models.UID, tenant stri func (_m *Service) DeleteNamespace(ctx context.Context, tenantID string) error { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for DeleteNamespace") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, tenantID) @@ -652,10 +556,6 @@ func (_m *Service) DeleteNamespace(ctx context.Context, tenantID string) error { func (_m *Service) DeletePublicKey(ctx context.Context, fingerprint string, tenant string) error { ret := _m.Called(ctx, fingerprint, tenant) - if len(ret) == 0 { - panic("no return value specified for DeletePublicKey") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, fingerprint, tenant) @@ -670,10 +570,6 @@ func (_m *Service) DeletePublicKey(ctx context.Context, fingerprint string, tena func (_m *Service) DeleteTag(ctx context.Context, tenant string, tag string) error { ret := _m.Called(ctx, tenant, tag) - if len(ret) == 0 { - panic("no return value specified for DeleteTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, tenant, tag) @@ -688,10 +584,6 @@ func (_m *Service) DeleteTag(ctx context.Context, tenant string, tag string) err func (_m *Service) EditNamespace(ctx context.Context, req *requests.NamespaceEdit) (*models.Namespace, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for EditNamespace") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, *requests.NamespaceEdit) (*models.Namespace, error)); ok { @@ -718,10 +610,6 @@ func (_m *Service) EditNamespace(ctx context.Context, req *requests.NamespaceEdi func (_m *Service) EditNamespaceUser(ctx context.Context, tenantID string, userID string, memberID string, memberNewRole string) error { ret := _m.Called(ctx, tenantID, userID, memberID, memberNewRole) - if len(ret) == 0 { - panic("no return value specified for EditNamespaceUser") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string) error); ok { r0 = rf(ctx, tenantID, userID, memberID, memberNewRole) @@ -736,10 +624,6 @@ func (_m *Service) EditNamespaceUser(ctx context.Context, tenantID string, userI func (_m *Service) EditSessionRecordStatus(ctx context.Context, sessionRecord bool, tenantID string) error { ret := _m.Called(ctx, sessionRecord, tenantID) - if len(ret) == 0 { - panic("no return value specified for EditSessionRecordStatus") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, bool, string) error); ok { r0 = rf(ctx, sessionRecord, tenantID) @@ -754,10 +638,6 @@ func (_m *Service) EditSessionRecordStatus(ctx context.Context, sessionRecord bo func (_m *Service) EvaluateKeyFilter(ctx context.Context, key *models.PublicKey, dev models.Device) (bool, error) { ret := _m.Called(ctx, key, dev) - if len(ret) == 0 { - panic("no return value specified for EvaluateKeyFilter") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, *models.PublicKey, models.Device) (bool, error)); ok { @@ -782,10 +662,6 @@ func (_m *Service) EvaluateKeyFilter(ctx context.Context, key *models.PublicKey, func (_m *Service) EvaluateKeyUsername(ctx context.Context, key *models.PublicKey, username string) (bool, error) { ret := _m.Called(ctx, key, username) - if len(ret) == 0 { - panic("no return value specified for EvaluateKeyUsername") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, *models.PublicKey, string) (bool, error)); ok { @@ -810,10 +686,6 @@ func (_m *Service) EvaluateKeyUsername(ctx context.Context, key *models.PublicKe func (_m *Service) GetDevice(ctx context.Context, uid models.UID) (*models.Device, error) { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for GetDevice") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) (*models.Device, error)); ok { @@ -840,10 +712,6 @@ func (_m *Service) GetDevice(ctx context.Context, uid models.UID) (*models.Devic func (_m *Service) GetDeviceByPublicURLAddress(ctx context.Context, address string) (*models.Device, error) { ret := _m.Called(ctx, address) - if len(ret) == 0 { - panic("no return value specified for GetDeviceByPublicURLAddress") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Device, error)); ok { @@ -870,10 +738,6 @@ func (_m *Service) GetDeviceByPublicURLAddress(ctx context.Context, address stri func (_m *Service) GetNamespace(ctx context.Context, tenantID string) (*models.Namespace, error) { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for GetNamespace") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Namespace, error)); ok { @@ -900,10 +764,6 @@ func (_m *Service) GetNamespace(ctx context.Context, tenantID string) (*models.N func (_m *Service) GetPublicKey(ctx context.Context, fingerprint string, tenant string) (*models.PublicKey, error) { ret := _m.Called(ctx, fingerprint, tenant) - if len(ret) == 0 { - panic("no return value specified for GetPublicKey") - } - var r0 *models.PublicKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.PublicKey, error)); ok { @@ -930,10 +790,6 @@ func (_m *Service) GetPublicKey(ctx context.Context, fingerprint string, tenant func (_m *Service) GetSession(ctx context.Context, uid models.UID) (*models.Session, error) { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for GetSession") - } - var r0 *models.Session var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) (*models.Session, error)); ok { @@ -960,10 +816,6 @@ func (_m *Service) GetSession(ctx context.Context, uid models.UID) (*models.Sess func (_m *Service) GetSessionRecord(ctx context.Context, tenantID string) (bool, error) { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for GetSessionRecord") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (bool, error)); ok { @@ -988,10 +840,6 @@ func (_m *Service) GetSessionRecord(ctx context.Context, tenantID string) (bool, func (_m *Service) GetStats(ctx context.Context) (*models.Stats, error) { ret := _m.Called(ctx) - if len(ret) == 0 { - panic("no return value specified for GetStats") - } - var r0 *models.Stats var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*models.Stats, error)); ok { @@ -1018,10 +866,6 @@ func (_m *Service) GetStats(ctx context.Context) (*models.Stats, error) { func (_m *Service) GetTags(ctx context.Context, tenant string) ([]string, int, error) { ret := _m.Called(ctx, tenant) - if len(ret) == 0 { - panic("no return value specified for GetTags") - } - var r0 []string var r1 int var r2 error @@ -1055,10 +899,6 @@ func (_m *Service) GetTags(ctx context.Context, tenant string) ([]string, int, e func (_m *Service) KeepAliveSession(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for KeepAliveSession") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -1073,10 +913,6 @@ func (_m *Service) KeepAliveSession(ctx context.Context, uid models.UID) error { func (_m *Service) ListAPIKeys(ctx context.Context, req *requests.ListAPIKey) ([]models.APIKey, int, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for ListAPIKeys") - } - var r0 []models.APIKey var r1 int var r2 error @@ -1110,10 +946,6 @@ func (_m *Service) ListAPIKeys(ctx context.Context, req *requests.ListAPIKey) ([ func (_m *Service) ListDevices(ctx context.Context, tenant string, status models.DeviceStatus, paginator query.Paginator, filter query.Filters, sorter query.Sorter) ([]models.Device, int, error) { ret := _m.Called(ctx, tenant, status, paginator, filter, sorter) - if len(ret) == 0 { - panic("no return value specified for ListDevices") - } - var r0 []models.Device var r1 int var r2 error @@ -1147,10 +979,6 @@ func (_m *Service) ListDevices(ctx context.Context, tenant string, status models func (_m *Service) ListNamespaces(ctx context.Context, paginator query.Paginator, filters query.Filters, export bool) ([]models.Namespace, int, error) { ret := _m.Called(ctx, paginator, filters, export) - if len(ret) == 0 { - panic("no return value specified for ListNamespaces") - } - var r0 []models.Namespace var r1 int var r2 error @@ -1184,10 +1012,6 @@ func (_m *Service) ListNamespaces(ctx context.Context, paginator query.Paginator func (_m *Service) ListPublicKeys(ctx context.Context, paginator query.Paginator) ([]models.PublicKey, int, error) { ret := _m.Called(ctx, paginator) - if len(ret) == 0 { - panic("no return value specified for ListPublicKeys") - } - var r0 []models.PublicKey var r1 int var r2 error @@ -1221,10 +1045,6 @@ func (_m *Service) ListPublicKeys(ctx context.Context, paginator query.Paginator func (_m *Service) ListSessions(ctx context.Context, paginator query.Paginator) ([]models.Session, int, error) { ret := _m.Called(ctx, paginator) - if len(ret) == 0 { - panic("no return value specified for ListSessions") - } - var r0 []models.Session var r1 int var r2 error @@ -1258,10 +1078,6 @@ func (_m *Service) ListSessions(ctx context.Context, paginator query.Paginator) func (_m *Service) LookupDevice(ctx context.Context, namespace string, name string) (*models.Device, error) { ret := _m.Called(ctx, namespace, name) - if len(ret) == 0 { - panic("no return value specified for LookupDevice") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.Device, error)); ok { @@ -1288,10 +1104,6 @@ func (_m *Service) LookupDevice(ctx context.Context, namespace string, name stri func (_m *Service) OfflineDevice(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for OfflineDevice") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -1306,10 +1118,6 @@ func (_m *Service) OfflineDevice(ctx context.Context, uid models.UID) error { func (_m *Service) PublicKey() *rsa.PublicKey { ret := _m.Called() - if len(ret) == 0 { - panic("no return value specified for PublicKey") - } - var r0 *rsa.PublicKey if rf, ok := ret.Get(0).(func() *rsa.PublicKey); ok { r0 = rf() @@ -1326,10 +1134,6 @@ func (_m *Service) PublicKey() *rsa.PublicKey { func (_m *Service) RemoveDeviceTag(ctx context.Context, uid models.UID, tag string) error { ret := _m.Called(ctx, uid, tag) - if len(ret) == 0 { - panic("no return value specified for RemoveDeviceTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, tag) @@ -1344,10 +1148,6 @@ func (_m *Service) RemoveDeviceTag(ctx context.Context, uid models.UID, tag stri func (_m *Service) RemoveNamespaceUser(ctx context.Context, tenantID string, memberID string, userID string) (*models.Namespace, error) { ret := _m.Called(ctx, tenantID, memberID, userID) - if len(ret) == 0 { - panic("no return value specified for RemoveNamespaceUser") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (*models.Namespace, error)); ok { @@ -1374,10 +1174,6 @@ func (_m *Service) RemoveNamespaceUser(ctx context.Context, tenantID string, mem func (_m *Service) RemovePublicKeyTag(ctx context.Context, tenant string, fingerprint string, tag string) error { ret := _m.Called(ctx, tenant, fingerprint, tag) - if len(ret) == 0 { - panic("no return value specified for RemovePublicKeyTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, fingerprint, tag) @@ -1392,10 +1188,6 @@ func (_m *Service) RemovePublicKeyTag(ctx context.Context, tenant string, finger func (_m *Service) RenameDevice(ctx context.Context, uid models.UID, name string, tenant string) error { ret := _m.Called(ctx, uid, name, tenant) - if len(ret) == 0 { - panic("no return value specified for RenameDevice") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string, string) error); ok { r0 = rf(ctx, uid, name, tenant) @@ -1410,10 +1202,6 @@ func (_m *Service) RenameDevice(ctx context.Context, uid models.UID, name string func (_m *Service) RenameTag(ctx context.Context, tenant string, oldTag string, newTag string) error { ret := _m.Called(ctx, tenant, oldTag, newTag) - if len(ret) == 0 { - panic("no return value specified for RenameTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, oldTag, newTag) @@ -1424,32 +1212,10 @@ func (_m *Service) RenameTag(ctx context.Context, tenant string, oldTag string, return r0 } -// SetSessionAuthenticated provides a mock function with given fields: ctx, uid, authenticated -func (_m *Service) SetSessionAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error { - ret := _m.Called(ctx, uid, authenticated) - - if len(ret) == 0 { - panic("no return value specified for SetSessionAuthenticated") - } - - var r0 error - if rf, ok := ret.Get(0).(func(context.Context, models.UID, bool) error); ok { - r0 = rf(ctx, uid, authenticated) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // Setup provides a mock function with given fields: ctx, req func (_m *Service) Setup(ctx context.Context, req requests.Setup) error { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for Setup") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, requests.Setup) error); ok { r0 = rf(ctx, req) @@ -1464,10 +1230,6 @@ func (_m *Service) Setup(ctx context.Context, req requests.Setup) error { func (_m *Service) SystemDownloadInstallScript(ctx context.Context, req requests.SystemInstallScript) (*template.Template, map[string]interface{}, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for SystemDownloadInstallScript") - } - var r0 *template.Template var r1 map[string]interface{} var r2 error @@ -1503,10 +1265,6 @@ func (_m *Service) SystemDownloadInstallScript(ctx context.Context, req requests func (_m *Service) SystemGetInfo(ctx context.Context, req requests.SystemGetInfo) (*models.SystemInfo, error) { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for SystemGetInfo") - } - var r0 *models.SystemInfo var r1 error if rf, ok := ret.Get(0).(func(context.Context, requests.SystemGetInfo) (*models.SystemInfo, error)); ok { @@ -1533,10 +1291,6 @@ func (_m *Service) SystemGetInfo(ctx context.Context, req requests.SystemGetInfo func (_m *Service) UpdateAPIKey(ctx context.Context, req *requests.UpdateAPIKey) error { ret := _m.Called(ctx, req) - if len(ret) == 0 { - panic("no return value specified for UpdateAPIKey") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, *requests.UpdateAPIKey) error); ok { r0 = rf(ctx, req) @@ -1551,10 +1305,6 @@ func (_m *Service) UpdateAPIKey(ctx context.Context, req *requests.UpdateAPIKey) func (_m *Service) UpdateDataUser(ctx context.Context, userID string, req *requests.UserDataUpdate) ([]string, error) { ret := _m.Called(ctx, userID, req) - if len(ret) == 0 { - panic("no return value specified for UpdateDataUser") - } - var r0 []string var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, *requests.UserDataUpdate) ([]string, error)); ok { @@ -1581,10 +1331,6 @@ func (_m *Service) UpdateDataUser(ctx context.Context, userID string, req *reque func (_m *Service) UpdateDevice(ctx context.Context, tenant string, uid models.UID, name *string, publicURL *bool) error { ret := _m.Called(ctx, tenant, uid, name, publicURL) - if len(ret) == 0 { - panic("no return value specified for UpdateDevice") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, models.UID, *string, *bool) error); ok { r0 = rf(ctx, tenant, uid, name, publicURL) @@ -1599,10 +1345,6 @@ func (_m *Service) UpdateDevice(ctx context.Context, tenant string, uid models.U func (_m *Service) UpdateDeviceStatus(ctx context.Context, tenant string, uid models.UID, status models.DeviceStatus) error { ret := _m.Called(ctx, tenant, uid, status) - if len(ret) == 0 { - panic("no return value specified for UpdateDeviceStatus") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, models.UID, models.DeviceStatus) error); ok { r0 = rf(ctx, tenant, uid, status) @@ -1617,10 +1359,6 @@ func (_m *Service) UpdateDeviceStatus(ctx context.Context, tenant string, uid mo func (_m *Service) UpdateDeviceTag(ctx context.Context, uid models.UID, tags []string) error { ret := _m.Called(ctx, uid, tags) - if len(ret) == 0 { - panic("no return value specified for UpdateDeviceTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, []string) error); ok { r0 = rf(ctx, uid, tags) @@ -1635,10 +1373,6 @@ func (_m *Service) UpdateDeviceTag(ctx context.Context, uid models.UID, tags []s func (_m *Service) UpdatePasswordUser(ctx context.Context, id string, currentPassword string, newPassword string) error { ret := _m.Called(ctx, id, currentPassword, newPassword) - if len(ret) == 0 { - panic("no return value specified for UpdatePasswordUser") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, id, currentPassword, newPassword) @@ -1653,10 +1387,6 @@ func (_m *Service) UpdatePasswordUser(ctx context.Context, id string, currentPas func (_m *Service) UpdatePublicKey(ctx context.Context, fingerprint string, tenant string, key requests.PublicKeyUpdate) (*models.PublicKey, error) { ret := _m.Called(ctx, fingerprint, tenant, key) - if len(ret) == 0 { - panic("no return value specified for UpdatePublicKey") - } - var r0 *models.PublicKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, requests.PublicKeyUpdate) (*models.PublicKey, error)); ok { @@ -1683,10 +1413,6 @@ func (_m *Service) UpdatePublicKey(ctx context.Context, fingerprint string, tena func (_m *Service) UpdatePublicKeyTags(ctx context.Context, tenant string, fingerprint string, tags []string) error { ret := _m.Called(ctx, tenant, fingerprint, tags) - if len(ret) == 0 { - panic("no return value specified for UpdatePublicKeyTags") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, []string) error); ok { r0 = rf(ctx, tenant, fingerprint, tags) @@ -1697,12 +1423,27 @@ func (_m *Service) UpdatePublicKeyTags(ctx context.Context, tenant string, finge return r0 } -// NewService creates a new instance of Service. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewService(t interface { +// UpdateSession provides a mock function with given fields: ctx, uid, model +func (_m *Service) UpdateSession(ctx context.Context, uid models.UID, model models.SessionUpdate) error { + ret := _m.Called(ctx, uid, model) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, models.UID, models.SessionUpdate) error); ok { + r0 = rf(ctx, uid, model) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +type mockConstructorTestingTNewService interface { mock.TestingT Cleanup(func()) -}) *Service { +} + +// NewService creates a new instance of Service. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewService(t mockConstructorTestingTNewService) *Service { mock := &Service{} mock.Mock.Test(t) diff --git a/api/services/session.go b/api/services/session.go index a82dc702642..d0077cdd998 100644 --- a/api/services/session.go +++ b/api/services/session.go @@ -16,7 +16,7 @@ type SessionService interface { CreateSession(ctx context.Context, session requests.SessionCreate) (*models.Session, error) DeactivateSession(ctx context.Context, uid models.UID) error KeepAliveSession(ctx context.Context, uid models.UID) error - SetSessionAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error + UpdateSession(ctx context.Context, uid models.UID, model models.SessionUpdate) error } func (s *service) ListSessions(ctx context.Context, paginator query.Paginator) ([]models.Session, int, error) { @@ -62,6 +62,33 @@ func (s *service) KeepAliveSession(ctx context.Context, uid models.UID) error { return s.store.SessionSetLastSeen(ctx, uid) } -func (s *service) SetSessionAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error { - return s.store.SessionSetAuthenticated(ctx, uid, authenticated) +func (s *service) UpdateSession(ctx context.Context, uid models.UID, model models.SessionUpdate) error { + sess, err := s.store.SessionGet(ctx, uid) + if err != nil { + return NewErrSessionNotFound(uid, err) + } + + var insertActiveSession bool + + if model.Authenticated != nil { + if !sess.Authenticated { + sess.Authenticated = *model.Authenticated + + insertActiveSession = true + } + } + + if model.Type != nil { + sess.Type = *model.Type + } + + if err := s.store.SessionUpdate(ctx, uid, sess); err != nil { + return err + } + + if insertActiveSession { + return s.store.SessionActiveCreate(ctx, uid, sess) + } + + return nil } diff --git a/api/services/session_test.go b/api/services/session_test.go index 1f0ac6ca7b1..0915e8c6282 100644 --- a/api/services/session_test.go +++ b/api/services/session_test.go @@ -269,32 +269,82 @@ func TestDeactivateSession(t *testing.T) { mock.AssertExpectations(t) } -func TestSetSessionAuthenticated(t *testing.T) { +func TestUpdateSession(t *testing.T) { mock := new(mocks.Store) ctx := context.TODO() + theTrue := true + cases := []struct { name string uid models.UID + model models.SessionUpdate requiredMocks func() expected error }{ { - name: "fails", + name: "fails whne cannot get the sessioni", + uid: models.UID("_uid"), + model: models.SessionUpdate{}, + requiredMocks: func() { + mock.On("SessionGet", ctx, models.UID("_uid")).Return(nil, goerrors.New("error")).Once() + }, + expected: NewErrSessionNotFound(models.UID("_uid"), goerrors.New("error")), + }, + { + name: "fails to update the session", + uid: models.UID("_uid"), + model: models.SessionUpdate{}, + requiredMocks: func() { + sess := &models.Session{} + + mock.On("SessionGet", ctx, models.UID("_uid")).Return(sess, nil).Once() + + mock.On("SessionUpdate", ctx, models.UID("_uid"), sess).Return(goerrors.New("error")).Once() + }, + expected: goerrors.New("error"), + }, + { + name: "success to update the session", + uid: models.UID("_uid"), + model: models.SessionUpdate{}, + requiredMocks: func() { + sess := &models.Session{} + + mock.On("SessionGet", ctx, models.UID("_uid")).Return(sess, nil).Once() + + mock.On("SessionUpdate", ctx, models.UID("_uid"), sess).Return(nil).Once() + }, + expected: nil, + }, + { + name: "fails to update the session when authenticated field is updated", uid: models.UID("_uid"), + model: models.SessionUpdate{ + Authenticated: &theTrue, + }, requiredMocks: func() { - mock.On("SessionSetAuthenticated", ctx, models.UID("_uid"), true). - Return(goerrors.New("error")).Once() + sess := &models.Session{} + + mock.On("SessionGet", ctx, models.UID("_uid")).Return(sess, nil).Once() + mock.On("SessionUpdate", ctx, models.UID("_uid"), sess).Return(nil).Once() + mock.On("SessionActiveCreate", ctx, models.UID("_uid"), sess).Return(goerrors.New("error")).Once() }, expected: goerrors.New("error"), }, { - name: "succeeds", - uid: models.UID("uid"), + name: "success to update the session when authenticated field is updated", + uid: models.UID("_uid"), + model: models.SessionUpdate{ + Authenticated: &theTrue, + }, requiredMocks: func() { - mock.On("SessionSetAuthenticated", ctx, models.UID("uid"), true). - Return(nil).Once() + sess := &models.Session{} + + mock.On("SessionGet", ctx, models.UID("_uid")).Return(sess, nil).Once() + mock.On("SessionUpdate", ctx, models.UID("_uid"), sess).Return(nil).Once() + mock.On("SessionActiveCreate", ctx, models.UID("_uid"), sess).Return(nil).Once() }, expected: nil, }, @@ -305,7 +355,7 @@ func TestSetSessionAuthenticated(t *testing.T) { tc.requiredMocks() service := NewService(store.Store(mock), privateKey, publicKey, storecache.NewNullCache(), clientMock, nil) - err := service.SetSessionAuthenticated(ctx, tc.uid, true) + err := service.UpdateSession(ctx, tc.uid, tc.model) assert.Equal(t, tc.expected, err) }) } diff --git a/api/store/mocks/store.go b/api/store/mocks/store.go index ef4ee6aa45c..5579e3a70b1 100644 --- a/api/store/mocks/store.go +++ b/api/store/mocks/store.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.43.1. DO NOT EDIT. +// Code generated by mockery v2.20.0. DO NOT EDIT. package mocks @@ -24,10 +24,6 @@ type Store struct { func (_m *Store) APIKeyConflicts(ctx context.Context, tenantID string, target *models.APIKeyConflicts) ([]string, bool, error) { ret := _m.Called(ctx, tenantID, target) - if len(ret) == 0 { - panic("no return value specified for APIKeyConflicts") - } - var r0 []string var r1 bool var r2 error @@ -61,10 +57,6 @@ func (_m *Store) APIKeyConflicts(ctx context.Context, tenantID string, target *m func (_m *Store) APIKeyCreate(ctx context.Context, APIKey *models.APIKey) (string, error) { ret := _m.Called(ctx, APIKey) - if len(ret) == 0 { - panic("no return value specified for APIKeyCreate") - } - var r0 string var r1 error if rf, ok := ret.Get(0).(func(context.Context, *models.APIKey) (string, error)); ok { @@ -89,10 +81,6 @@ func (_m *Store) APIKeyCreate(ctx context.Context, APIKey *models.APIKey) (strin func (_m *Store) APIKeyDelete(ctx context.Context, tenantID string, name string) error { ret := _m.Called(ctx, tenantID, name) - if len(ret) == 0 { - panic("no return value specified for APIKeyDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, tenantID, name) @@ -107,10 +95,6 @@ func (_m *Store) APIKeyDelete(ctx context.Context, tenantID string, name string) func (_m *Store) APIKeyGet(ctx context.Context, id string) (*models.APIKey, error) { ret := _m.Called(ctx, id) - if len(ret) == 0 { - panic("no return value specified for APIKeyGet") - } - var r0 *models.APIKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.APIKey, error)); ok { @@ -137,10 +121,6 @@ func (_m *Store) APIKeyGet(ctx context.Context, id string) (*models.APIKey, erro func (_m *Store) APIKeyGetByName(ctx context.Context, tenantID string, name string) (*models.APIKey, error) { ret := _m.Called(ctx, tenantID, name) - if len(ret) == 0 { - panic("no return value specified for APIKeyGetByName") - } - var r0 *models.APIKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.APIKey, error)); ok { @@ -167,10 +147,6 @@ func (_m *Store) APIKeyGetByName(ctx context.Context, tenantID string, name stri func (_m *Store) APIKeyList(ctx context.Context, tenantID string, paginator query.Paginator, sorter query.Sorter) ([]models.APIKey, int, error) { ret := _m.Called(ctx, tenantID, paginator, sorter) - if len(ret) == 0 { - panic("no return value specified for APIKeyList") - } - var r0 []models.APIKey var r1 int var r2 error @@ -204,10 +180,6 @@ func (_m *Store) APIKeyList(ctx context.Context, tenantID string, paginator quer func (_m *Store) APIKeyUpdate(ctx context.Context, tenantID string, name string, changes *models.APIKeyChanges) error { ret := _m.Called(ctx, tenantID, name, changes) - if len(ret) == 0 { - panic("no return value specified for APIKeyUpdate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, *models.APIKeyChanges) error); ok { r0 = rf(ctx, tenantID, name, changes) @@ -222,10 +194,6 @@ func (_m *Store) APIKeyUpdate(ctx context.Context, tenantID string, name string, func (_m *Store) DeviceBulkDeleteTag(ctx context.Context, tenant string, tag string) (int64, error) { ret := _m.Called(ctx, tenant, tag) - if len(ret) == 0 { - panic("no return value specified for DeviceBulkDeleteTag") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (int64, error)); ok { @@ -250,10 +218,6 @@ func (_m *Store) DeviceBulkDeleteTag(ctx context.Context, tenant string, tag str func (_m *Store) DeviceBulkRenameTag(ctx context.Context, tenant string, currentTag string, newTag string) (int64, error) { ret := _m.Called(ctx, tenant, currentTag, newTag) - if len(ret) == 0 { - panic("no return value specified for DeviceBulkRenameTag") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (int64, error)); ok { @@ -278,10 +242,6 @@ func (_m *Store) DeviceBulkRenameTag(ctx context.Context, tenant string, current func (_m *Store) DeviceChooser(ctx context.Context, tenantID string, chosen []string) error { ret := _m.Called(ctx, tenantID, chosen) - if len(ret) == 0 { - panic("no return value specified for DeviceChooser") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, []string) error); ok { r0 = rf(ctx, tenantID, chosen) @@ -296,10 +256,6 @@ func (_m *Store) DeviceChooser(ctx context.Context, tenantID string, chosen []st func (_m *Store) DeviceCreate(ctx context.Context, d models.Device, hostname string) error { ret := _m.Called(ctx, d, hostname) - if len(ret) == 0 { - panic("no return value specified for DeviceCreate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.Device, string) error); ok { r0 = rf(ctx, d, hostname) @@ -314,10 +270,6 @@ func (_m *Store) DeviceCreate(ctx context.Context, d models.Device, hostname str func (_m *Store) DeviceCreatePublicURLAddress(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceCreatePublicURLAddress") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -332,10 +284,6 @@ func (_m *Store) DeviceCreatePublicURLAddress(ctx context.Context, uid models.UI func (_m *Store) DeviceDelete(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -350,10 +298,6 @@ func (_m *Store) DeviceDelete(ctx context.Context, uid models.UID) error { func (_m *Store) DeviceGet(ctx context.Context, uid models.UID) (*models.Device, error) { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceGet") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) (*models.Device, error)); ok { @@ -380,10 +324,6 @@ func (_m *Store) DeviceGet(ctx context.Context, uid models.UID) (*models.Device, func (_m *Store) DeviceGetByMac(ctx context.Context, mac string, tenantID string, status models.DeviceStatus) (*models.Device, error) { ret := _m.Called(ctx, mac, tenantID, status) - if len(ret) == 0 { - panic("no return value specified for DeviceGetByMac") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, models.DeviceStatus) (*models.Device, error)); ok { @@ -410,10 +350,6 @@ func (_m *Store) DeviceGetByMac(ctx context.Context, mac string, tenantID string func (_m *Store) DeviceGetByName(ctx context.Context, name string, tenantID string, status models.DeviceStatus) (*models.Device, error) { ret := _m.Called(ctx, name, tenantID, status) - if len(ret) == 0 { - panic("no return value specified for DeviceGetByName") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, models.DeviceStatus) (*models.Device, error)); ok { @@ -440,10 +376,6 @@ func (_m *Store) DeviceGetByName(ctx context.Context, name string, tenantID stri func (_m *Store) DeviceGetByPublicURLAddress(ctx context.Context, address string) (*models.Device, error) { ret := _m.Called(ctx, address) - if len(ret) == 0 { - panic("no return value specified for DeviceGetByPublicURLAddress") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Device, error)); ok { @@ -470,10 +402,6 @@ func (_m *Store) DeviceGetByPublicURLAddress(ctx context.Context, address string func (_m *Store) DeviceGetByUID(ctx context.Context, uid models.UID, tenantID string) (*models.Device, error) { ret := _m.Called(ctx, uid, tenantID) - if len(ret) == 0 { - panic("no return value specified for DeviceGetByUID") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) (*models.Device, error)); ok { @@ -500,10 +428,6 @@ func (_m *Store) DeviceGetByUID(ctx context.Context, uid models.UID, tenantID st func (_m *Store) DeviceGetTags(ctx context.Context, tenant string) ([]string, int, error) { ret := _m.Called(ctx, tenant) - if len(ret) == 0 { - panic("no return value specified for DeviceGetTags") - } - var r0 []string var r1 int var r2 error @@ -537,10 +461,6 @@ func (_m *Store) DeviceGetTags(ctx context.Context, tenant string) ([]string, in func (_m *Store) DeviceList(ctx context.Context, status models.DeviceStatus, pagination query.Paginator, filters query.Filters, sorter query.Sorter, acceptable store.DeviceAcceptable) ([]models.Device, int, error) { ret := _m.Called(ctx, status, pagination, filters, sorter, acceptable) - if len(ret) == 0 { - panic("no return value specified for DeviceList") - } - var r0 []models.Device var r1 int var r2 error @@ -574,10 +494,6 @@ func (_m *Store) DeviceList(ctx context.Context, status models.DeviceStatus, pag func (_m *Store) DeviceListByUsage(ctx context.Context, tenantID string) ([]models.UID, error) { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for DeviceListByUsage") - } - var r0 []models.UID var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) ([]models.UID, error)); ok { @@ -604,10 +520,6 @@ func (_m *Store) DeviceListByUsage(ctx context.Context, tenantID string) ([]mode func (_m *Store) DeviceLookup(ctx context.Context, namespace string, hostname string) (*models.Device, error) { ret := _m.Called(ctx, namespace, hostname) - if len(ret) == 0 { - panic("no return value specified for DeviceLookup") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.Device, error)); ok { @@ -634,10 +546,6 @@ func (_m *Store) DeviceLookup(ctx context.Context, namespace string, hostname st func (_m *Store) DevicePullTag(ctx context.Context, uid models.UID, tag string) error { ret := _m.Called(ctx, uid, tag) - if len(ret) == 0 { - panic("no return value specified for DevicePullTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, tag) @@ -652,10 +560,6 @@ func (_m *Store) DevicePullTag(ctx context.Context, uid models.UID, tag string) func (_m *Store) DevicePushTag(ctx context.Context, uid models.UID, tag string) error { ret := _m.Called(ctx, uid, tag) - if len(ret) == 0 { - panic("no return value specified for DevicePushTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, tag) @@ -670,10 +574,6 @@ func (_m *Store) DevicePushTag(ctx context.Context, uid models.UID, tag string) func (_m *Store) DeviceRemovedCount(ctx context.Context, tenant string) (int64, error) { ret := _m.Called(ctx, tenant) - if len(ret) == 0 { - panic("no return value specified for DeviceRemovedCount") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (int64, error)); ok { @@ -698,10 +598,6 @@ func (_m *Store) DeviceRemovedCount(ctx context.Context, tenant string) (int64, func (_m *Store) DeviceRemovedDelete(ctx context.Context, tenant string, uid models.UID) error { ret := _m.Called(ctx, tenant, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceRemovedDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, models.UID) error); ok { r0 = rf(ctx, tenant, uid) @@ -716,10 +612,6 @@ func (_m *Store) DeviceRemovedDelete(ctx context.Context, tenant string, uid mod func (_m *Store) DeviceRemovedGet(ctx context.Context, tenant string, uid models.UID) (*models.DeviceRemoved, error) { ret := _m.Called(ctx, tenant, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceRemovedGet") - } - var r0 *models.DeviceRemoved var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, models.UID) (*models.DeviceRemoved, error)); ok { @@ -746,10 +638,6 @@ func (_m *Store) DeviceRemovedGet(ctx context.Context, tenant string, uid models func (_m *Store) DeviceRemovedInsert(ctx context.Context, tenant string, device *models.Device) error { ret := _m.Called(ctx, tenant, device) - if len(ret) == 0 { - panic("no return value specified for DeviceRemovedInsert") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, *models.Device) error); ok { r0 = rf(ctx, tenant, device) @@ -764,10 +652,6 @@ func (_m *Store) DeviceRemovedInsert(ctx context.Context, tenant string, device func (_m *Store) DeviceRemovedList(ctx context.Context, tenant string, pagination query.Paginator, filters query.Filters, sorter query.Sorter) ([]models.DeviceRemoved, int, error) { ret := _m.Called(ctx, tenant, pagination, filters, sorter) - if len(ret) == 0 { - panic("no return value specified for DeviceRemovedList") - } - var r0 []models.DeviceRemoved var r1 int var r2 error @@ -801,10 +685,6 @@ func (_m *Store) DeviceRemovedList(ctx context.Context, tenant string, paginatio func (_m *Store) DeviceRename(ctx context.Context, uid models.UID, hostname string) error { ret := _m.Called(ctx, uid, hostname) - if len(ret) == 0 { - panic("no return value specified for DeviceRename") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, string) error); ok { r0 = rf(ctx, uid, hostname) @@ -819,10 +699,6 @@ func (_m *Store) DeviceRename(ctx context.Context, uid models.UID, hostname stri func (_m *Store) DeviceSetOffline(ctx context.Context, uid string) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for DeviceSetOffline") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, uid) @@ -837,10 +713,6 @@ func (_m *Store) DeviceSetOffline(ctx context.Context, uid string) error { func (_m *Store) DeviceSetOnline(ctx context.Context, connectedDevices []models.ConnectedDevice) error { ret := _m.Called(ctx, connectedDevices) - if len(ret) == 0 { - panic("no return value specified for DeviceSetOnline") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, []models.ConnectedDevice) error); ok { r0 = rf(ctx, connectedDevices) @@ -855,10 +727,6 @@ func (_m *Store) DeviceSetOnline(ctx context.Context, connectedDevices []models. func (_m *Store) DeviceSetPosition(ctx context.Context, uid models.UID, position models.DevicePosition) error { ret := _m.Called(ctx, uid, position) - if len(ret) == 0 { - panic("no return value specified for DeviceSetPosition") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, models.DevicePosition) error); ok { r0 = rf(ctx, uid, position) @@ -873,10 +741,6 @@ func (_m *Store) DeviceSetPosition(ctx context.Context, uid models.UID, position func (_m *Store) DeviceSetTags(ctx context.Context, uid models.UID, tags []string) (int64, int64, error) { ret := _m.Called(ctx, uid, tags) - if len(ret) == 0 { - panic("no return value specified for DeviceSetTags") - } - var r0 int64 var r1 int64 var r2 error @@ -908,10 +772,6 @@ func (_m *Store) DeviceSetTags(ctx context.Context, uid models.UID, tags []strin func (_m *Store) DeviceUpdate(ctx context.Context, tenant string, uid models.UID, name *string, publicURL *bool) error { ret := _m.Called(ctx, tenant, uid, name, publicURL) - if len(ret) == 0 { - panic("no return value specified for DeviceUpdate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, models.UID, *string, *bool) error); ok { r0 = rf(ctx, tenant, uid, name, publicURL) @@ -926,10 +786,6 @@ func (_m *Store) DeviceUpdate(ctx context.Context, tenant string, uid models.UID func (_m *Store) DeviceUpdateLastSeen(ctx context.Context, uid models.UID, ts time.Time) error { ret := _m.Called(ctx, uid, ts) - if len(ret) == 0 { - panic("no return value specified for DeviceUpdateLastSeen") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, time.Time) error); ok { r0 = rf(ctx, uid, ts) @@ -944,10 +800,6 @@ func (_m *Store) DeviceUpdateLastSeen(ctx context.Context, uid models.UID, ts ti func (_m *Store) DeviceUpdateOnline(ctx context.Context, uid models.UID, online bool) error { ret := _m.Called(ctx, uid, online) - if len(ret) == 0 { - panic("no return value specified for DeviceUpdateOnline") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, bool) error); ok { r0 = rf(ctx, uid, online) @@ -962,10 +814,6 @@ func (_m *Store) DeviceUpdateOnline(ctx context.Context, uid models.UID, online func (_m *Store) DeviceUpdateStatus(ctx context.Context, uid models.UID, status models.DeviceStatus) error { ret := _m.Called(ctx, uid, status) - if len(ret) == 0 { - panic("no return value specified for DeviceUpdateStatus") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, models.DeviceStatus) error); ok { r0 = rf(ctx, uid, status) @@ -980,10 +828,6 @@ func (_m *Store) DeviceUpdateStatus(ctx context.Context, uid models.UID, status func (_m *Store) GetStats(ctx context.Context) (*models.Stats, error) { ret := _m.Called(ctx) - if len(ret) == 0 { - panic("no return value specified for GetStats") - } - var r0 *models.Stats var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*models.Stats, error)); ok { @@ -1010,10 +854,6 @@ func (_m *Store) GetStats(ctx context.Context) (*models.Stats, error) { func (_m *Store) NamespaceAddMember(ctx context.Context, tenantID string, memberID string, memberRole string) (*models.Namespace, error) { ret := _m.Called(ctx, tenantID, memberID, memberRole) - if len(ret) == 0 { - panic("no return value specified for NamespaceAddMember") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (*models.Namespace, error)); ok { @@ -1040,10 +880,6 @@ func (_m *Store) NamespaceAddMember(ctx context.Context, tenantID string, member func (_m *Store) NamespaceCreate(ctx context.Context, namespace *models.Namespace) (*models.Namespace, error) { ret := _m.Called(ctx, namespace) - if len(ret) == 0 { - panic("no return value specified for NamespaceCreate") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, *models.Namespace) (*models.Namespace, error)); ok { @@ -1070,10 +906,6 @@ func (_m *Store) NamespaceCreate(ctx context.Context, namespace *models.Namespac func (_m *Store) NamespaceDelete(ctx context.Context, tenantID string) error { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for NamespaceDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, tenantID) @@ -1088,10 +920,6 @@ func (_m *Store) NamespaceDelete(ctx context.Context, tenantID string) error { func (_m *Store) NamespaceEdit(ctx context.Context, tenant string, changes *models.NamespaceChanges) error { ret := _m.Called(ctx, tenant, changes) - if len(ret) == 0 { - panic("no return value specified for NamespaceEdit") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, *models.NamespaceChanges) error); ok { r0 = rf(ctx, tenant, changes) @@ -1106,10 +934,6 @@ func (_m *Store) NamespaceEdit(ctx context.Context, tenant string, changes *mode func (_m *Store) NamespaceEditMember(ctx context.Context, tenantID string, memberID string, memberNewRole string) error { ret := _m.Called(ctx, tenantID, memberID, memberNewRole) - if len(ret) == 0 { - panic("no return value specified for NamespaceEditMember") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenantID, memberID, memberNewRole) @@ -1124,10 +948,6 @@ func (_m *Store) NamespaceEditMember(ctx context.Context, tenantID string, membe func (_m *Store) NamespaceGet(ctx context.Context, tenantID string, countDevices bool) (*models.Namespace, error) { ret := _m.Called(ctx, tenantID, countDevices) - if len(ret) == 0 { - panic("no return value specified for NamespaceGet") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, bool) (*models.Namespace, error)); ok { @@ -1154,10 +974,6 @@ func (_m *Store) NamespaceGet(ctx context.Context, tenantID string, countDevices func (_m *Store) NamespaceGetByName(ctx context.Context, name string) (*models.Namespace, error) { ret := _m.Called(ctx, name) - if len(ret) == 0 { - panic("no return value specified for NamespaceGetByName") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Namespace, error)); ok { @@ -1184,10 +1000,6 @@ func (_m *Store) NamespaceGetByName(ctx context.Context, name string) (*models.N func (_m *Store) NamespaceGetFirst(ctx context.Context, id string) (*models.Namespace, error) { ret := _m.Called(ctx, id) - if len(ret) == 0 { - panic("no return value specified for NamespaceGetFirst") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Namespace, error)); ok { @@ -1214,10 +1026,6 @@ func (_m *Store) NamespaceGetFirst(ctx context.Context, id string) (*models.Name func (_m *Store) NamespaceGetSessionRecord(ctx context.Context, tenantID string) (bool, error) { ret := _m.Called(ctx, tenantID) - if len(ret) == 0 { - panic("no return value specified for NamespaceGetSessionRecord") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (bool, error)); ok { @@ -1242,10 +1050,6 @@ func (_m *Store) NamespaceGetSessionRecord(ctx context.Context, tenantID string) func (_m *Store) NamespaceList(ctx context.Context, paginator query.Paginator, filters query.Filters, export bool) ([]models.Namespace, int, error) { ret := _m.Called(ctx, paginator, filters, export) - if len(ret) == 0 { - panic("no return value specified for NamespaceList") - } - var r0 []models.Namespace var r1 int var r2 error @@ -1279,10 +1083,6 @@ func (_m *Store) NamespaceList(ctx context.Context, paginator query.Paginator, f func (_m *Store) NamespaceRemoveMember(ctx context.Context, tenantID string, memberID string) (*models.Namespace, error) { ret := _m.Called(ctx, tenantID, memberID) - if len(ret) == 0 { - panic("no return value specified for NamespaceRemoveMember") - } - var r0 *models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.Namespace, error)); ok { @@ -1309,10 +1109,6 @@ func (_m *Store) NamespaceRemoveMember(ctx context.Context, tenantID string, mem func (_m *Store) NamespaceSetSessionRecord(ctx context.Context, sessionRecord bool, tenantID string) error { ret := _m.Called(ctx, sessionRecord, tenantID) - if len(ret) == 0 { - panic("no return value specified for NamespaceSetSessionRecord") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, bool, string) error); ok { r0 = rf(ctx, sessionRecord, tenantID) @@ -1327,10 +1123,6 @@ func (_m *Store) NamespaceSetSessionRecord(ctx context.Context, sessionRecord bo func (_m *Store) NamespaceUpdate(ctx context.Context, tenantID string, namespace *models.Namespace) error { ret := _m.Called(ctx, tenantID, namespace) - if len(ret) == 0 { - panic("no return value specified for NamespaceUpdate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, *models.Namespace) error); ok { r0 = rf(ctx, tenantID, namespace) @@ -1345,10 +1137,6 @@ func (_m *Store) NamespaceUpdate(ctx context.Context, tenantID string, namespace func (_m *Store) PrivateKeyCreate(ctx context.Context, key *models.PrivateKey) error { ret := _m.Called(ctx, key) - if len(ret) == 0 { - panic("no return value specified for PrivateKeyCreate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, *models.PrivateKey) error); ok { r0 = rf(ctx, key) @@ -1363,10 +1151,6 @@ func (_m *Store) PrivateKeyCreate(ctx context.Context, key *models.PrivateKey) e func (_m *Store) PrivateKeyGet(ctx context.Context, fingerprint string) (*models.PrivateKey, error) { ret := _m.Called(ctx, fingerprint) - if len(ret) == 0 { - panic("no return value specified for PrivateKeyGet") - } - var r0 *models.PrivateKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.PrivateKey, error)); ok { @@ -1393,10 +1177,6 @@ func (_m *Store) PrivateKeyGet(ctx context.Context, fingerprint string) (*models func (_m *Store) PublicKeyBulkDeleteTag(ctx context.Context, tenant string, tag string) (int64, error) { ret := _m.Called(ctx, tenant, tag) - if len(ret) == 0 { - panic("no return value specified for PublicKeyBulkDeleteTag") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (int64, error)); ok { @@ -1421,10 +1201,6 @@ func (_m *Store) PublicKeyBulkDeleteTag(ctx context.Context, tenant string, tag func (_m *Store) PublicKeyBulkRenameTag(ctx context.Context, tenant string, currentTag string, newTag string) (int64, error) { ret := _m.Called(ctx, tenant, currentTag, newTag) - if len(ret) == 0 { - panic("no return value specified for PublicKeyBulkRenameTag") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (int64, error)); ok { @@ -1449,10 +1225,6 @@ func (_m *Store) PublicKeyBulkRenameTag(ctx context.Context, tenant string, curr func (_m *Store) PublicKeyCreate(ctx context.Context, key *models.PublicKey) error { ret := _m.Called(ctx, key) - if len(ret) == 0 { - panic("no return value specified for PublicKeyCreate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, *models.PublicKey) error); ok { r0 = rf(ctx, key) @@ -1467,10 +1239,6 @@ func (_m *Store) PublicKeyCreate(ctx context.Context, key *models.PublicKey) err func (_m *Store) PublicKeyDelete(ctx context.Context, fingerprint string, tenantID string) error { ret := _m.Called(ctx, fingerprint, tenantID) - if len(ret) == 0 { - panic("no return value specified for PublicKeyDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, fingerprint, tenantID) @@ -1485,10 +1253,6 @@ func (_m *Store) PublicKeyDelete(ctx context.Context, fingerprint string, tenant func (_m *Store) PublicKeyGet(ctx context.Context, fingerprint string, tenantID string) (*models.PublicKey, error) { ret := _m.Called(ctx, fingerprint, tenantID) - if len(ret) == 0 { - panic("no return value specified for PublicKeyGet") - } - var r0 *models.PublicKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*models.PublicKey, error)); ok { @@ -1515,10 +1279,6 @@ func (_m *Store) PublicKeyGet(ctx context.Context, fingerprint string, tenantID func (_m *Store) PublicKeyGetTags(ctx context.Context, tenant string) ([]string, int, error) { ret := _m.Called(ctx, tenant) - if len(ret) == 0 { - panic("no return value specified for PublicKeyGetTags") - } - var r0 []string var r1 int var r2 error @@ -1552,10 +1312,6 @@ func (_m *Store) PublicKeyGetTags(ctx context.Context, tenant string) ([]string, func (_m *Store) PublicKeyList(ctx context.Context, paginator query.Paginator) ([]models.PublicKey, int, error) { ret := _m.Called(ctx, paginator) - if len(ret) == 0 { - panic("no return value specified for PublicKeyList") - } - var r0 []models.PublicKey var r1 int var r2 error @@ -1589,10 +1345,6 @@ func (_m *Store) PublicKeyList(ctx context.Context, paginator query.Paginator) ( func (_m *Store) PublicKeyPullTag(ctx context.Context, tenant string, fingerprint string, tag string) error { ret := _m.Called(ctx, tenant, fingerprint, tag) - if len(ret) == 0 { - panic("no return value specified for PublicKeyPullTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, fingerprint, tag) @@ -1607,10 +1359,6 @@ func (_m *Store) PublicKeyPullTag(ctx context.Context, tenant string, fingerprin func (_m *Store) PublicKeyPushTag(ctx context.Context, tenant string, fingerprint string, tag string) error { ret := _m.Called(ctx, tenant, fingerprint, tag) - if len(ret) == 0 { - panic("no return value specified for PublicKeyPushTag") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) error); ok { r0 = rf(ctx, tenant, fingerprint, tag) @@ -1625,10 +1373,6 @@ func (_m *Store) PublicKeyPushTag(ctx context.Context, tenant string, fingerprin func (_m *Store) PublicKeySetTags(ctx context.Context, tenant string, fingerprint string, tags []string) (int64, int64, error) { ret := _m.Called(ctx, tenant, fingerprint, tags) - if len(ret) == 0 { - panic("no return value specified for PublicKeySetTags") - } - var r0 int64 var r1 int64 var r2 error @@ -1660,10 +1404,6 @@ func (_m *Store) PublicKeySetTags(ctx context.Context, tenant string, fingerprin func (_m *Store) PublicKeyUpdate(ctx context.Context, fingerprint string, tenantID string, key *models.PublicKeyUpdate) (*models.PublicKey, error) { ret := _m.Called(ctx, fingerprint, tenantID, key) - if len(ret) == 0 { - panic("no return value specified for PublicKeyUpdate") - } - var r0 *models.PublicKey var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, *models.PublicKeyUpdate) (*models.PublicKey, error)); ok { @@ -1686,14 +1426,24 @@ func (_m *Store) PublicKeyUpdate(ctx context.Context, fingerprint string, tenant return r0, r1 } +// SessionActiveCreate provides a mock function with given fields: ctx, uid, session +func (_m *Store) SessionActiveCreate(ctx context.Context, uid models.UID, session *models.Session) error { + ret := _m.Called(ctx, uid, session) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, models.UID, *models.Session) error); ok { + r0 = rf(ctx, uid, session) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // SessionCreate provides a mock function with given fields: ctx, session func (_m *Store) SessionCreate(ctx context.Context, session models.Session) (*models.Session, error) { ret := _m.Called(ctx, session) - if len(ret) == 0 { - panic("no return value specified for SessionCreate") - } - var r0 *models.Session var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.Session) (*models.Session, error)); ok { @@ -1720,10 +1470,6 @@ func (_m *Store) SessionCreate(ctx context.Context, session models.Session) (*mo func (_m *Store) SessionDeleteActives(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for SessionDeleteActives") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -1738,10 +1484,6 @@ func (_m *Store) SessionDeleteActives(ctx context.Context, uid models.UID) error func (_m *Store) SessionDeleteRecordFrameByDate(ctx context.Context, lte time.Time) (int64, int64, error) { ret := _m.Called(ctx, lte) - if len(ret) == 0 { - panic("no return value specified for SessionDeleteRecordFrameByDate") - } - var r0 int64 var r1 int64 var r2 error @@ -1773,10 +1515,6 @@ func (_m *Store) SessionDeleteRecordFrameByDate(ctx context.Context, lte time.Ti func (_m *Store) SessionGet(ctx context.Context, uid models.UID) (*models.Session, error) { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for SessionGet") - } - var r0 *models.Session var r1 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) (*models.Session, error)); ok { @@ -1803,10 +1541,6 @@ func (_m *Store) SessionGet(ctx context.Context, uid models.UID) (*models.Sessio func (_m *Store) SessionList(ctx context.Context, paginator query.Paginator) ([]models.Session, int, error) { ret := _m.Called(ctx, paginator) - if len(ret) == 0 { - panic("no return value specified for SessionList") - } - var r0 []models.Session var r1 int var r2 error @@ -1836,32 +1570,10 @@ func (_m *Store) SessionList(ctx context.Context, paginator query.Paginator) ([] return r0, r1, r2 } -// SessionSetAuthenticated provides a mock function with given fields: ctx, uid, authenticated -func (_m *Store) SessionSetAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error { - ret := _m.Called(ctx, uid, authenticated) - - if len(ret) == 0 { - panic("no return value specified for SessionSetAuthenticated") - } - - var r0 error - if rf, ok := ret.Get(0).(func(context.Context, models.UID, bool) error); ok { - r0 = rf(ctx, uid, authenticated) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // SessionSetLastSeen provides a mock function with given fields: ctx, uid func (_m *Store) SessionSetLastSeen(ctx context.Context, uid models.UID) error { ret := _m.Called(ctx, uid) - if len(ret) == 0 { - panic("no return value specified for SessionSetLastSeen") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID) error); ok { r0 = rf(ctx, uid) @@ -1876,10 +1588,6 @@ func (_m *Store) SessionSetLastSeen(ctx context.Context, uid models.UID) error { func (_m *Store) SessionSetRecorded(ctx context.Context, uid models.UID, recorded bool) error { ret := _m.Called(ctx, uid, recorded) - if len(ret) == 0 { - panic("no return value specified for SessionSetRecorded") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, bool) error); ok { r0 = rf(ctx, uid, recorded) @@ -1890,14 +1598,24 @@ func (_m *Store) SessionSetRecorded(ctx context.Context, uid models.UID, recorde return r0 } +// SessionUpdate provides a mock function with given fields: ctx, uid, model +func (_m *Store) SessionUpdate(ctx context.Context, uid models.UID, model *models.Session) error { + ret := _m.Called(ctx, uid, model) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, models.UID, *models.Session) error); ok { + r0 = rf(ctx, uid, model) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // SessionUpdateDeviceUID provides a mock function with given fields: ctx, oldUID, newUID func (_m *Store) SessionUpdateDeviceUID(ctx context.Context, oldUID models.UID, newUID models.UID) error { ret := _m.Called(ctx, oldUID, newUID) - if len(ret) == 0 { - panic("no return value specified for SessionUpdateDeviceUID") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, models.UID, models.UID) error); ok { r0 = rf(ctx, oldUID, newUID) @@ -1912,10 +1630,6 @@ func (_m *Store) SessionUpdateDeviceUID(ctx context.Context, oldUID models.UID, func (_m *Store) TagsDelete(ctx context.Context, tenant string, tag string) (int64, error) { ret := _m.Called(ctx, tenant, tag) - if len(ret) == 0 { - panic("no return value specified for TagsDelete") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (int64, error)); ok { @@ -1940,10 +1654,6 @@ func (_m *Store) TagsDelete(ctx context.Context, tenant string, tag string) (int func (_m *Store) TagsGet(ctx context.Context, tenant string) ([]string, int, error) { ret := _m.Called(ctx, tenant) - if len(ret) == 0 { - panic("no return value specified for TagsGet") - } - var r0 []string var r1 int var r2 error @@ -1977,10 +1687,6 @@ func (_m *Store) TagsGet(ctx context.Context, tenant string) ([]string, int, err func (_m *Store) TagsRename(ctx context.Context, tenant string, oldTag string, newTag string) (int64, error) { ret := _m.Called(ctx, tenant, oldTag, newTag) - if len(ret) == 0 { - panic("no return value specified for TagsRename") - } - var r0 int64 var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string) (int64, error)); ok { @@ -2005,10 +1711,6 @@ func (_m *Store) TagsRename(ctx context.Context, tenant string, oldTag string, n func (_m *Store) UserConflicts(ctx context.Context, target *models.UserConflicts) ([]string, bool, error) { ret := _m.Called(ctx, target) - if len(ret) == 0 { - panic("no return value specified for UserConflicts") - } - var r0 []string var r1 bool var r2 error @@ -2042,10 +1744,6 @@ func (_m *Store) UserConflicts(ctx context.Context, target *models.UserConflicts func (_m *Store) UserCreate(ctx context.Context, user *models.User) error { ret := _m.Called(ctx, user) - if len(ret) == 0 { - panic("no return value specified for UserCreate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, *models.User) error); ok { r0 = rf(ctx, user) @@ -2060,10 +1758,6 @@ func (_m *Store) UserCreate(ctx context.Context, user *models.User) error { func (_m *Store) UserDelete(ctx context.Context, id string) error { ret := _m.Called(ctx, id) - if len(ret) == 0 { - panic("no return value specified for UserDelete") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, id) @@ -2078,10 +1772,6 @@ func (_m *Store) UserDelete(ctx context.Context, id string) error { func (_m *Store) UserDetachInfo(ctx context.Context, id string) (map[string][]*models.Namespace, error) { ret := _m.Called(ctx, id) - if len(ret) == 0 { - panic("no return value specified for UserDetachInfo") - } - var r0 map[string][]*models.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (map[string][]*models.Namespace, error)); ok { @@ -2108,10 +1798,6 @@ func (_m *Store) UserDetachInfo(ctx context.Context, id string) (map[string][]*m func (_m *Store) UserGetByEmail(ctx context.Context, email string) (*models.User, error) { ret := _m.Called(ctx, email) - if len(ret) == 0 { - panic("no return value specified for UserGetByEmail") - } - var r0 *models.User var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.User, error)); ok { @@ -2138,10 +1824,6 @@ func (_m *Store) UserGetByEmail(ctx context.Context, email string) (*models.User func (_m *Store) UserGetByID(ctx context.Context, id string, ns bool) (*models.User, int, error) { ret := _m.Called(ctx, id, ns) - if len(ret) == 0 { - panic("no return value specified for UserGetByID") - } - var r0 *models.User var r1 int var r2 error @@ -2175,10 +1857,6 @@ func (_m *Store) UserGetByID(ctx context.Context, id string, ns bool) (*models.U func (_m *Store) UserGetByUsername(ctx context.Context, username string) (*models.User, error) { ret := _m.Called(ctx, username) - if len(ret) == 0 { - panic("no return value specified for UserGetByUsername") - } - var r0 *models.User var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*models.User, error)); ok { @@ -2205,10 +1883,6 @@ func (_m *Store) UserGetByUsername(ctx context.Context, username string) (*model func (_m *Store) UserList(ctx context.Context, paginator query.Paginator, filters query.Filters) ([]models.User, int, error) { ret := _m.Called(ctx, paginator, filters) - if len(ret) == 0 { - panic("no return value specified for UserList") - } - var r0 []models.User var r1 int var r2 error @@ -2242,10 +1916,6 @@ func (_m *Store) UserList(ctx context.Context, paginator query.Paginator, filter func (_m *Store) UserUpdate(ctx context.Context, id string, changes *models.UserChanges) error { ret := _m.Called(ctx, id, changes) - if len(ret) == 0 { - panic("no return value specified for UserUpdate") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, *models.UserChanges) error); ok { r0 = rf(ctx, id, changes) @@ -2256,12 +1926,13 @@ func (_m *Store) UserUpdate(ctx context.Context, id string, changes *models.User return r0 } -// NewStore creates a new instance of Store. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewStore(t interface { +type mockConstructorTestingTNewStore interface { mock.TestingT Cleanup(func()) -}) *Store { +} + +// NewStore creates a new instance of Store. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewStore(t mockConstructorTestingTNewStore) *Store { mock := &Store{} mock.Mock.Test(t) diff --git a/api/store/mongo/session.go b/api/store/mongo/session.go index 702fad3c221..59cf5738a8a 100644 --- a/api/store/mongo/session.go +++ b/api/store/mongo/session.go @@ -144,23 +144,19 @@ func (s *Store) SessionGet(ctx context.Context, uid models.UID) (*models.Session return session, nil } -func (s *Store) SessionSetAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error { - session := new(models.Session) - if err := s.db.Collection("sessions").FindOne(ctx, bson.M{"uid": uid}).Decode(&session); err != nil { - return FromMongoError(err) - } +func (s *Store) SessionUpdate(ctx context.Context, uid models.UID, model *models.Session) error { + model.Device = nil - if _, err := s.db.Collection("sessions").UpdateOne(ctx, bson.M{"uid": uid}, bson.M{"$set": bson.M{"authenticated": authenticated}}); err != nil { + result, err := s.db.Collection("sessions").UpdateOne(ctx, bson.M{"uid": uid}, bson.M{"$set": model}) + if err != nil { return FromMongoError(err) } - _, err := s.db.Collection("active_sessions").InsertOne(ctx, &models.ActiveSession{ - UID: uid, - LastSeen: session.StartedAt, - TenantID: session.TenantID, - }) + if result.MatchedCount < 1 { + return store.ErrNoDocuments + } - return FromMongoError(err) + return nil } func (s *Store) SessionSetRecorded(ctx context.Context, uid models.UID, recorded bool) error { @@ -318,3 +314,16 @@ func (s *Store) SessionDeleteRecordFrameByDate(ctx context.Context, lte time.Tim return deletedCount, updatedCount, FromMongoError(err) } + +func (s *Store) SessionActiveCreate(ctx context.Context, uid models.UID, session *models.Session) error { + _, err := s.db.Collection("active_sessions").InsertOne(ctx, &models.ActiveSession{ + UID: uid, + LastSeen: session.StartedAt, + TenantID: session.TenantID, + }) + if err != nil { + return FromMongoError(err) + } + + return nil +} diff --git a/api/store/mongo/session_test.go b/api/store/mongo/session_test.go index 55872e41756..ee68bf136cf 100644 --- a/api/store/mongo/session_test.go +++ b/api/store/mongo/session_test.go @@ -386,7 +386,7 @@ func TestSessionUpdateDeviceUID(t *testing.T) { } } -func TestSessionSetAuthenticated(t *testing.T) { +func TestSessionUpdate(t *testing.T) { cases := []struct { description string UID models.UID @@ -419,7 +419,7 @@ func TestSessionSetAuthenticated(t *testing.T) { assert.NoError(t, srv.Reset()) }) - err := s.SessionSetAuthenticated(ctx, tc.UID, tc.authenticate) + err := s.SessionUpdate(ctx, tc.UID, &models.Session{}) assert.Equal(t, tc.expected, err) }) } @@ -427,38 +427,35 @@ func TestSessionSetAuthenticated(t *testing.T) { func TestSessionSetRecorded(t *testing.T) { cases := []struct { - description string - UID models.UID - authenticate bool - fixtures []string - expected error + description string + UID models.UID + recorded bool + fixtures []string + expected error }{ { - description: "fails when session is not found", - UID: models.UID("nonexistent"), - authenticate: false, - fixtures: []string{fixtureSessions}, - expected: store.ErrNoDocuments, + description: "fails when session is not found", + UID: models.UID("nonexistent"), + recorded: false, + fixtures: []string{fixtureSessions}, + expected: store.ErrNoDocuments, }, { - description: "succeeds when session is found", - UID: models.UID("a3b0431f5df6a7827945d2e34872a5c781452bc36de42f8b1297fd9ecb012f68"), - authenticate: false, - fixtures: []string{fixtureSessions}, - expected: nil, + description: "succeeds when session is found", + UID: models.UID("a3b0431f5df6a7827945d2e34872a5c781452bc36de42f8b1297fd9ecb012f68"), + recorded: false, + fixtures: []string{fixtureSessions}, + expected: nil, }, } - for _, tc := range cases { t.Run(tc.description, func(t *testing.T) { ctx := context.Background() - assert.NoError(t, srv.Apply(tc.fixtures...)) t.Cleanup(func() { assert.NoError(t, srv.Reset()) }) - - err := s.SessionSetAuthenticated(ctx, tc.UID, tc.authenticate) + err := s.SessionSetRecorded(ctx, tc.UID, tc.recorded) assert.Equal(t, tc.expected, err) }) } @@ -551,7 +548,7 @@ func TestSessionDeleteRecordFrameByDate(t *testing.T) { }{ { description: "succeeds when there are no sessions to update or delete", - lte: time.Date(2023, time.January, 30, 12, 00, 0, 0, time.UTC), + lte: time.Date(2023, time.January, 30, 12, 0o0, 0, 0, time.UTC), fixtures: []string{}, expected: Expected{ deletedCount: 0, diff --git a/api/store/session.go b/api/store/session.go index 89d9349b487..6ad61ad9508 100644 --- a/api/store/session.go +++ b/api/store/session.go @@ -12,10 +12,11 @@ type SessionStore interface { SessionList(ctx context.Context, paginator query.Paginator) ([]models.Session, int, error) SessionGet(ctx context.Context, uid models.UID) (*models.Session, error) SessionCreate(ctx context.Context, session models.Session) (*models.Session, error) - SessionSetAuthenticated(ctx context.Context, uid models.UID, authenticated bool) error + SessionUpdate(ctx context.Context, uid models.UID, model *models.Session) error SessionSetLastSeen(ctx context.Context, uid models.UID) error SessionDeleteActives(ctx context.Context, uid models.UID) error SessionUpdateDeviceUID(ctx context.Context, oldUID models.UID, newUID models.UID) error SessionDeleteRecordFrameByDate(ctx context.Context, lte time.Time) (deletedCount int64, updatedCount int64, err error) SessionSetRecorded(ctx context.Context, uid models.UID, recorded bool) error + SessionActiveCreate(ctx context.Context, uid models.UID, session *models.Session) error } diff --git a/pkg/api/internalclient/mocks/internalclient.go b/pkg/api/internalclient/mocks/internalclient.go index 59dd3ec280c..0094b640f4c 100644 --- a/pkg/api/internalclient/mocks/internalclient.go +++ b/pkg/api/internalclient/mocks/internalclient.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.42.1. DO NOT EDIT. +// Code generated by mockery v2.20.0. DO NOT EDIT. package mocks @@ -18,10 +18,6 @@ type Client struct { func (_m *Client) BillingEvaluate(tenantID string) (*models.BillingEvaluation, int, error) { ret := _m.Called(tenantID) - if len(ret) == 0 { - panic("no return value specified for BillingEvaluate") - } - var r0 *models.BillingEvaluation var r1 int var r2 error @@ -55,10 +51,6 @@ func (_m *Client) BillingEvaluate(tenantID string) (*models.BillingEvaluation, i func (_m *Client) BillingReport(tenant string, action string) (int, error) { ret := _m.Called(tenant, action) - if len(ret) == 0 { - panic("no return value specified for BillingReport") - } - var r0 int var r1 error if rf, ok := ret.Get(0).(func(string, string) (int, error)); ok { @@ -83,10 +75,6 @@ func (_m *Client) BillingReport(tenant string, action string) (int, error) { func (_m *Client) CreatePrivateKey() (*models.PrivateKey, error) { ret := _m.Called() - if len(ret) == 0 { - panic("no return value specified for CreatePrivateKey") - } - var r0 *models.PrivateKey var r1 error if rf, ok := ret.Get(0).(func() (*models.PrivateKey, error)); ok { @@ -113,10 +101,6 @@ func (_m *Client) CreatePrivateKey() (*models.PrivateKey, error) { func (_m *Client) DeviceLookup(lookup map[string]string) (*models.Device, []error) { ret := _m.Called(lookup) - if len(ret) == 0 { - panic("no return value specified for DeviceLookup") - } - var r0 *models.Device var r1 []error if rf, ok := ret.Get(0).(func(map[string]string) (*models.Device, []error)); ok { @@ -145,10 +129,6 @@ func (_m *Client) DeviceLookup(lookup map[string]string) (*models.Device, []erro func (_m *Client) DevicesHeartbeat(tenant string, uid string) error { ret := _m.Called(tenant, uid) - if len(ret) == 0 { - panic("no return value specified for DevicesHeartbeat") - } - var r0 error if rf, ok := ret.Get(0).(func(string, string) error); ok { r0 = rf(tenant, uid) @@ -163,10 +143,6 @@ func (_m *Client) DevicesHeartbeat(tenant string, uid string) error { func (_m *Client) DevicesOffline(uid string) error { ret := _m.Called(uid) - if len(ret) == 0 { - panic("no return value specified for DevicesOffline") - } - var r0 error if rf, ok := ret.Get(0).(func(string) error); ok { r0 = rf(uid) @@ -181,10 +157,6 @@ func (_m *Client) DevicesOffline(uid string) error { func (_m *Client) EvaluateKey(fingerprint string, dev *models.Device, username string) (bool, error) { ret := _m.Called(fingerprint, dev, username) - if len(ret) == 0 { - panic("no return value specified for EvaluateKey") - } - var r0 bool var r1 error if rf, ok := ret.Get(0).(func(string, *models.Device, string) (bool, error)); ok { @@ -209,10 +181,6 @@ func (_m *Client) EvaluateKey(fingerprint string, dev *models.Device, username s func (_m *Client) FinishSession(uid string) []error { ret := _m.Called(uid) - if len(ret) == 0 { - panic("no return value specified for FinishSession") - } - var r0 []error if rf, ok := ret.Get(0).(func(string) []error); ok { r0 = rf(uid) @@ -229,10 +197,6 @@ func (_m *Client) FinishSession(uid string) []error { func (_m *Client) FirewallEvaluate(lookup map[string]string) error { ret := _m.Called(lookup) - if len(ret) == 0 { - panic("no return value specified for FirewallEvaluate") - } - var r0 error if rf, ok := ret.Get(0).(func(map[string]string) error); ok { r0 = rf(lookup) @@ -247,10 +211,6 @@ func (_m *Client) FirewallEvaluate(lookup map[string]string) error { func (_m *Client) GetDevice(uid string) (*models.Device, error) { ret := _m.Called(uid) - if len(ret) == 0 { - panic("no return value specified for GetDevice") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(string) (*models.Device, error)); ok { @@ -277,10 +237,6 @@ func (_m *Client) GetDevice(uid string) (*models.Device, error) { func (_m *Client) GetDeviceByPublicURLAddress(address string) (*models.Device, error) { ret := _m.Called(address) - if len(ret) == 0 { - panic("no return value specified for GetDeviceByPublicURLAddress") - } - var r0 *models.Device var r1 error if rf, ok := ret.Get(0).(func(string) (*models.Device, error)); ok { @@ -307,10 +263,6 @@ func (_m *Client) GetDeviceByPublicURLAddress(address string) (*models.Device, e func (_m *Client) GetPublicKey(fingerprint string, tenant string) (*models.PublicKey, error) { ret := _m.Called(fingerprint, tenant) - if len(ret) == 0 { - panic("no return value specified for GetPublicKey") - } - var r0 *models.PublicKey var r1 error if rf, ok := ret.Get(0).(func(string, string) (*models.PublicKey, error)); ok { @@ -337,10 +289,6 @@ func (_m *Client) GetPublicKey(fingerprint string, tenant string) (*models.Publi func (_m *Client) KeepAliveSession(uid string) []error { ret := _m.Called(uid) - if len(ret) == 0 { - panic("no return value specified for KeepAliveSession") - } - var r0 []error if rf, ok := ret.Get(0).(func(string) []error); ok { r0 = rf(uid) @@ -357,10 +305,6 @@ func (_m *Client) KeepAliveSession(uid string) []error { func (_m *Client) ListDevices() ([]models.Device, error) { ret := _m.Called() - if len(ret) == 0 { - panic("no return value specified for ListDevices") - } - var r0 []models.Device var r1 error if rf, ok := ret.Get(0).(func() ([]models.Device, error)); ok { @@ -387,10 +331,6 @@ func (_m *Client) ListDevices() ([]models.Device, error) { func (_m *Client) Lookup(lookup map[string]string) (string, []error) { ret := _m.Called(lookup) - if len(ret) == 0 { - panic("no return value specified for Lookup") - } - var r0 string var r1 []error if rf, ok := ret.Get(0).(func(map[string]string) (string, []error)); ok { @@ -417,10 +357,6 @@ func (_m *Client) Lookup(lookup map[string]string) (string, []error) { func (_m *Client) NamespaceLookup(tenant string) (*models.Namespace, []error) { ret := _m.Called(tenant) - if len(ret) == 0 { - panic("no return value specified for NamespaceLookup") - } - var r0 *models.Namespace var r1 []error if rf, ok := ret.Get(0).(func(string) (*models.Namespace, []error)); ok { @@ -449,10 +385,6 @@ func (_m *Client) NamespaceLookup(tenant string) (*models.Namespace, []error) { func (_m *Client) RecordSession(session *models.SessionRecorded, recordURL string) error { ret := _m.Called(session, recordURL) - if len(ret) == 0 { - panic("no return value specified for RecordSession") - } - var r0 error if rf, ok := ret.Get(0).(func(*models.SessionRecorded, string) error); ok { r0 = rf(session, recordURL) @@ -467,10 +399,6 @@ func (_m *Client) RecordSession(session *models.SessionRecorded, recordURL strin func (_m *Client) SessionAsAuthenticated(uid string) []error { ret := _m.Called(uid) - if len(ret) == 0 { - panic("no return value specified for SessionAsAuthenticated") - } - var r0 []error if rf, ok := ret.Get(0).(func(string) []error); ok { r0 = rf(uid) @@ -487,10 +415,6 @@ func (_m *Client) SessionAsAuthenticated(uid string) []error { func (_m *Client) SessionCreate(session requests.SessionCreate) error { ret := _m.Called(session) - if len(ret) == 0 { - panic("no return value specified for SessionCreate") - } - var r0 error if rf, ok := ret.Get(0).(func(requests.SessionCreate) error); ok { r0 = rf(session) @@ -501,12 +425,27 @@ func (_m *Client) SessionCreate(session requests.SessionCreate) error { return r0 } -// NewClient creates a new instance of Client. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewClient(t interface { +// UpdateSession provides a mock function with given fields: uid, model +func (_m *Client) UpdateSession(uid string, model *models.SessionUpdate) error { + ret := _m.Called(uid, model) + + var r0 error + if rf, ok := ret.Get(0).(func(string, *models.SessionUpdate) error); ok { + r0 = rf(uid, model) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +type mockConstructorTestingTNewClient interface { mock.TestingT Cleanup(func()) -}) *Client { +} + +// NewClient creates a new instance of Client. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewClient(t mockConstructorTestingTNewClient) *Client { mock := &Client{} mock.Mock.Test(t) diff --git a/pkg/api/internalclient/session.go b/pkg/api/internalclient/session.go index 3d98550d14f..4a8d7aad8a5 100644 --- a/pkg/api/internalclient/session.go +++ b/pkg/api/internalclient/session.go @@ -1,6 +1,7 @@ package internalclient import ( + "errors" "fmt" "github.com/shellhub-io/shellhub/pkg/api/requests" @@ -27,6 +28,9 @@ type sessionAPI interface { // RecordSession records a session with the provided session information and record URL. RecordSession(session *models.SessionRecorded, recordURL string) error + + // UpdateSession updates some fields of [models.Session] using [models.SessionUpdate]. + UpdateSession(uid string, model *models.SessionUpdate) error } func (c *client) SessionCreate(session requests.SessionCreate) error { @@ -88,3 +92,22 @@ func (c *client) RecordSession(session *models.SessionRecorded, recordURL string return err } + +func (c *client) UpdateSession(uid string, model *models.SessionUpdate) error { + res, err := c.http. + R(). + SetPathParams(map[string]string{ + "tenant": uid, + }). + SetBody(model). + Patch("/internal/sessions/{tenant}") + if err != nil { + return errors.Join(errors.New("failed to update the session due error"), err) + } + + if res.StatusCode() != 200 { + return errors.New("failed to update the session") + } + + return nil +} diff --git a/pkg/api/requests/session.go b/pkg/api/requests/session.go index d74054ce35a..5c08211e1e6 100644 --- a/pkg/api/requests/session.go +++ b/pkg/api/requests/session.go @@ -36,3 +36,9 @@ type SessionFinish struct { type SessionKeepAlive struct { SessionIDParam } + +type SessionUpdate struct { + SessionIDParam + Authenticated *bool `json:"authenticated"` + Type *string `json:"type"` +} diff --git a/pkg/models/session.go b/pkg/models/session.go index b746a42a8f2..7f67daf0b92 100644 --- a/pkg/models/session.go +++ b/pkg/models/session.go @@ -57,3 +57,8 @@ type SessionRecorded struct { Width int `json:"width" bson:"width,omitempty"` Height int `json:"height" bson:"height,omitempty"` } + +type SessionUpdate struct { + Authenticated *bool `json:"authenticated"` + Type *string `json:"type"` +} diff --git a/ssh/server/channels/utils.go b/ssh/server/channels/utils.go index e62008004fc..ffbc8498460 100644 --- a/ssh/server/channels/utils.go +++ b/ssh/server/channels/utils.go @@ -30,6 +30,10 @@ func pipe(ctx gliderssh.Context, sess *session.Session, client gossh.Channel, ag WithFields(log.Fields{"session": sess.UID, "sshid": sess.SSHID}). Trace("data pipe between client and agent has done") + if err := sess.Type(req); err != nil { + log.WithError(err).Warn("failed to set the session type") + } + wg := new(sync.WaitGroup) wg.Add(2) diff --git a/ssh/session/session.go b/ssh/session/session.go index 82b02b81778..5c30cfe5ebc 100644 --- a/ssh/session/session.go +++ b/ssh/session/session.go @@ -217,11 +217,11 @@ func (s *Session) register() error { // // It returns an error if authentication fails. func (s *Session) authenticate() error { - if errs := s.api.SessionAsAuthenticated(s.UID); len(errs) > 0 { - return errs[0] - } + value := true - return nil + return s.api.UpdateSession(s.UID, &models.SessionUpdate{ + Authenticated: &value, + }) } // connect connects the session's client to the session's agent. @@ -467,3 +467,10 @@ func (s *Session) Finish() (err error) { return nil } + +// Type updates the session's type on the database. +func (s *Session) Type(kind string) error { + return s.api.UpdateSession(s.UID, &models.SessionUpdate{ + Type: &kind, + }) +}