mirror of
https://github.com/cbeuw/Cloak.git
synced 2024-11-09 19:10:44 +00:00
127 lines
3.1 KiB
Go
127 lines
3.1 KiB
Go
package server
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
mux "github.com/cbeuw/Cloak/internal/multiplex"
|
|
"github.com/cbeuw/Cloak/internal/server/usermanager"
|
|
"github.com/cbeuw/Cloak/internal/util"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func getSeshConfig(unordered bool) *mux.SessionConfig {
|
|
sessionKey := make([]byte, 32)
|
|
rand.Read(sessionKey)
|
|
obfuscator, _ := mux.GenerateObfs(0x00, sessionKey, true)
|
|
|
|
seshConfig := &mux.SessionConfig{
|
|
Obfuscator: obfuscator,
|
|
Valve: nil,
|
|
UnitRead: util.ReadTLS,
|
|
Unordered: unordered,
|
|
}
|
|
return seshConfig
|
|
}
|
|
|
|
func TestActiveUser_Bypass(t *testing.T) {
|
|
manager, err := usermanager.MakeLocalManager(MOCK_DB_NAME)
|
|
if err != nil {
|
|
t.Error("failed to make local manager", err)
|
|
}
|
|
panel := MakeUserPanel(manager)
|
|
UID, _ := base64.StdEncoding.DecodeString("u97xvcc5YoQA8obCyt9q/w==")
|
|
user, _ := panel.GetBypassUser(UID)
|
|
var sesh0 *mux.Session
|
|
var existing bool
|
|
var sesh1 *mux.Session
|
|
t.Run("get first session", func(t *testing.T) {
|
|
sesh0, existing, err = user.GetSession(0, getSeshConfig(false))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if existing {
|
|
t.Error("first session returned as existing")
|
|
}
|
|
if sesh0 == nil {
|
|
t.Error("no session returned")
|
|
}
|
|
})
|
|
t.Run("get first session again", func(t *testing.T) {
|
|
seshx, existing, err := user.GetSession(0, &mux.SessionConfig{})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !existing {
|
|
t.Error("first session get again returned as not existing")
|
|
}
|
|
if seshx == nil {
|
|
t.Error("no session returned")
|
|
}
|
|
if seshx != sesh0 {
|
|
t.Error("returned a different instance")
|
|
}
|
|
})
|
|
t.Run("get second session", func(t *testing.T) {
|
|
sesh1, existing, err = user.GetSession(1, getSeshConfig(false))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if existing {
|
|
t.Error("second session returned as existing")
|
|
}
|
|
if sesh0 == nil {
|
|
t.Error("no session returned")
|
|
}
|
|
})
|
|
t.Run("number of sessions", func(t *testing.T) {
|
|
if user.NumSession() != 2 {
|
|
t.Error("number of session is not 2")
|
|
}
|
|
})
|
|
t.Run("delete a session", func(t *testing.T) {
|
|
user.CloseSession(0, "")
|
|
if user.NumSession() != 1 {
|
|
t.Error("number of session is not 1 after deleting one")
|
|
}
|
|
if !sesh0.IsClosed() {
|
|
t.Error("session not closed after deletion")
|
|
}
|
|
})
|
|
t.Run("close all sessions", func(t *testing.T) {
|
|
user.closeAllSessions("")
|
|
if !sesh1.IsClosed() {
|
|
t.Error("session not closed after user termination")
|
|
}
|
|
})
|
|
t.Run("get session again after termination", func(t *testing.T) {
|
|
seshx, existing, err := user.GetSession(0, getSeshConfig(false))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if existing {
|
|
t.Error("session returned as existing")
|
|
}
|
|
if seshx == nil {
|
|
t.Error("no session returned")
|
|
}
|
|
if seshx == sesh0 || seshx == sesh1 {
|
|
t.Error("get session after termination returned the same instance")
|
|
}
|
|
})
|
|
t.Run("delete last session", func(t *testing.T) {
|
|
user.CloseSession(0, "")
|
|
if panel.isActive(user.arrUID[:]) {
|
|
t.Error("user still active after last session deleted")
|
|
}
|
|
})
|
|
err = manager.Close()
|
|
if err != nil {
|
|
t.Error("failed to close localmanager", err)
|
|
}
|
|
err = os.Remove(MOCK_DB_NAME)
|
|
if err != nil {
|
|
t.Error("failed to delete mockdb", err)
|
|
}
|
|
}
|