Refactor new session authorisation

pull/71/head
Andy Wang 5 years ago
parent eabe113547
commit dd4a1769d0

@ -1,6 +1,7 @@
package server package server
import ( import (
"github.com/cbeuw/Cloak/internal/server/usermanager"
"sync" "sync"
mux "github.com/cbeuw/Cloak/internal/multiplex" mux "github.com/cbeuw/Cloak/internal/multiplex"
@ -40,7 +41,8 @@ func (u *ActiveUser) GetSession(sessionID uint32, config *mux.SessionConfig) (se
return sesh, true, nil return sesh, true, nil
} else { } else {
if !u.bypass { if !u.bypass {
err := u.panel.Manager.AuthoriseNewSession(u.arrUID[:], len(u.sessions)) ainfo := usermanager.AuthorisationInfo{NumExistingSessions: len(u.sessions)}
err := u.panel.Manager.AuthoriseNewSession(u.arrUID[:], ainfo)
if err != nil { if err != nil {
return nil, false, err return nil, false, err
} }

@ -93,7 +93,7 @@ func (manager *localManager) AuthenticateUser(UID []byte) (int64, int64, error)
return upRate, downRate, nil return upRate, downRate, nil
} }
func (manager *localManager) AuthoriseNewSession(UID []byte, numExistingSessions int) error { func (manager *localManager) AuthoriseNewSession(UID []byte, ainfo AuthorisationInfo) error {
var arrUID [16]byte var arrUID [16]byte
copy(arrUID[:], UID) copy(arrUID[:], UID)
var sessionsCap int var sessionsCap int
@ -121,12 +121,10 @@ func (manager *localManager) AuthoriseNewSession(UID []byte, numExistingSessions
if expiryTime < time.Now().Unix() { if expiryTime < time.Now().Unix() {
return ErrUserExpired return ErrUserExpired
} }
//user.sessionsM.RLock()
if numExistingSessions >= sessionsCap { if ainfo.NumExistingSessions >= sessionsCap {
//user.sessionsM.RUnlock()
return ErrSessionsCapReached return ErrSessionsCapReached
} }
//user.sessionsM.RUnlock()
return nil return nil
} }

@ -20,6 +20,10 @@ type StatusResponse struct {
Message string Message string
} }
type AuthorisationInfo struct {
NumExistingSessions int
}
const ( const (
TERMINATE = iota + 1 TERMINATE = iota + 1
) )
@ -33,6 +37,6 @@ var ErrUserExpired = errors.New("User has expired")
type UserManager interface { type UserManager interface {
AuthenticateUser([]byte) (int64, int64, error) AuthenticateUser([]byte) (int64, int64, error)
AuthoriseNewSession([]byte, int) error AuthoriseNewSession([]byte, AuthorisationInfo) error
UploadStatus([]StatusUpdate) ([]StatusResponse, error) UploadStatus([]StatusUpdate) ([]StatusResponse, error)
} }

Loading…
Cancel
Save