omg
This commit is contained in:
@@ -7,32 +7,27 @@ import (
|
||||
|
||||
var (
|
||||
mu sync.RWMutex
|
||||
clients = make(map[uint32]Client)
|
||||
ChatGroups = make(map[uint32]ChatGroup)
|
||||
ClientsMap = make(map[uint32]map[uint32]*Client)
|
||||
clients = make(map[uint32]*Client)
|
||||
chatGroups = make(map[uint32]ChatGroup)
|
||||
)
|
||||
|
||||
func AddGroupToCache(chatGroup *ChatGroup) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
ChatGroups[chatGroup.Id] = *chatGroup
|
||||
ClientsMap[chatGroup.Id] = make(map[uint32]*Client)
|
||||
chatGroups[chatGroup.Id] = *chatGroup
|
||||
}
|
||||
|
||||
func RemoveGroupFromCache(chatGroup *ChatGroup) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
delete(ChatGroups, chatGroup.Id)
|
||||
delete(ClientsMap, chatGroup.Id)
|
||||
delete(chatGroups, chatGroup.Id)
|
||||
}
|
||||
|
||||
func AddClientConnectionsToCache(client *Client) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
for _, groupIn := range client.Groups {
|
||||
if clients, ok := ClientsMap[groupIn.Id]; ok {
|
||||
clients[client.Id] = client
|
||||
}
|
||||
chatGroups[groupIn.Id].Members[client.Id] = client
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,16 +35,14 @@ func RemoveClientConnectionsToCache(client *Client) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
for _, groupIn := range client.Groups {
|
||||
if clients, ok := ClientsMap[groupIn.Id]; ok {
|
||||
delete(clients, client.Id)
|
||||
}
|
||||
delete(chatGroups[groupIn.Id].Members, client.Id)
|
||||
}
|
||||
}
|
||||
|
||||
func GetClientFromId(id uint32) (*Client, error) {
|
||||
client, ok := &clients[id]
|
||||
client, ok := clients[id]
|
||||
if !ok {
|
||||
return nil, errors.New("No such user")
|
||||
return nil, errors.New("no such user")
|
||||
}
|
||||
return client, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package main
|
||||
|
||||
import "net/http"
|
||||
|
||||
func isMethodAllowed(response *http.ResponseWriter, request *http.Request) bool {
|
||||
if request.Method != http.MethodPost {
|
||||
http.Error(*response, "POST only", http.StatusMethodNotAllowed)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func RegisterHandler(response http.ResponseWriter, request *http.Request) {
|
||||
if !isMethodAllowed(&response, request) {
|
||||
return
|
||||
}
|
||||
|
||||
ctx := request.Context()
|
||||
}
|
||||
@@ -15,7 +15,7 @@ type Client struct {
|
||||
|
||||
type ChatGroup struct {
|
||||
Name string
|
||||
Members [32]*Client
|
||||
Id uint32
|
||||
Members map[uint32]*Client
|
||||
Color [3]byte
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ func GetToken(client *Client) (string, error) {
|
||||
return token.SignedString(secretKey)
|
||||
}
|
||||
|
||||
func GetClientIdFromToken(token *string) (uint32, error) {
|
||||
parsed, err := jwt.ParseWithClaims(*token, &jwt.RegisteredClaims{}, func(t *jwt.Token) (any, error) {
|
||||
func GetClientIdFromToken(token string) (uint32, error) {
|
||||
parsed, err := jwt.ParseWithClaims(token, &jwt.RegisteredClaims{}, func(t *jwt.Token) (any, error) {
|
||||
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||
return nil, jwt.ErrSignatureInvalid
|
||||
}
|
||||
|
||||
+12
-1
@@ -68,7 +68,7 @@ func handleUnauthenticatedMessage(conn *websocket.Conn, client *Client, message
|
||||
return false
|
||||
}
|
||||
|
||||
err := SetClientFromToken(client, token)
|
||||
clientId, err := GetClientIdFromToken(token)
|
||||
if err != nil {
|
||||
var errmsg = map[string]any{
|
||||
"type": WSServerResponse(InvalidCredentials),
|
||||
@@ -77,6 +77,17 @@ func handleUnauthenticatedMessage(conn *websocket.Conn, client *Client, message
|
||||
sendMessageCloseIfTimeout(conn, &errmsg)
|
||||
return false
|
||||
}
|
||||
|
||||
client, err = GetClientFromId(clientId)
|
||||
if err != nil {
|
||||
var errmsg = map[string]any{
|
||||
"type": WSServerResponse(InvalidCredentials),
|
||||
"message": "bad token",
|
||||
}
|
||||
sendMessageCloseIfTimeout(conn, &errmsg)
|
||||
return false
|
||||
}
|
||||
|
||||
client.IsAuthenticated = true
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user