Skip to content
This repository was archived by the owner on May 1, 2018. It is now read-only.

Commit ddb75b5

Browse files
committed
Merge branch 'auth'
2 parents ef267e7 + 3b81d45 commit ddb75b5

11 files changed

Lines changed: 92 additions & 258 deletions

File tree

WebSocketServer.Tests/ServerTest.cs

Lines changed: 0 additions & 176 deletions
This file was deleted.

WebSocketServer/IServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public interface IServer
1919
/// <summary>
2020
/// Gets or sets the connected sockets.
2121
/// </summary>
22-
System.Collections.Generic.Dictionary<IWebSocketConnection, string> ConnectedSockets { get; set; }
22+
System.Collections.Generic.Dictionary<IWebSocketConnection, Models.UserModel> ConnectedSockets { get; set; }
2323

2424
/// <summary>
2525
/// The listen messages.

WebSocketServer/Messages/Handlers/AuthHandler.cs

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
namespace WebSocketServer.Messages.Handlers
1111
{
12+
using System.Linq;
13+
14+
using WebSocketServer.Models;
15+
1216
using IWebSocketConnection = Fleck2.Interfaces.IWebSocketConnection;
1317

1418
/// <inheritdoc />
@@ -47,13 +51,32 @@ private void Authorize(IWebSocketConnection socket, string webSocketMessage, ISe
4751
{
4852
var data =
4953
Newtonsoft.Json.JsonConvert.DeserializeObject<WebSocketMessage<Payloads.Client.AuthMessage>>(webSocketMessage);
50-
if (server.ConnectedSockets.ContainsValue(data.Payload.UserName))
54+
55+
var tokenData = AppContext.Instance.UsersTokens.FirstOrDefault(userToken => data.Payload.AuthToken == userToken.Token);
56+
57+
if (tokenData != null)
5158
{
52-
DisconnectSocket(socket, data, server);
59+
var userData = AppContext.Instance.Users.FirstOrDefault(user => user.Id == tokenData.UserId);
60+
if (userData != null && !server.ConnectedSockets.ContainsValue(userData))
61+
{
62+
ConnectSocket(socket, userData, server);
63+
}
64+
else
65+
{
66+
var authMessage = new Payloads.Server.AuthMessage()
67+
{
68+
Message =
69+
"Error: you already connected to server!",
70+
Status = Payloads.Server.AuthMessage
71+
.StatusCode.Error
72+
};
73+
socket.Send(Helper.BuildMessage(authMessage));
74+
DisconnectSocket(socket, server);
75+
}
5376
}
5477
else
5578
{
56-
ConnectSocket(socket, data, server);
79+
DisconnectSocket(socket, server);
5780
}
5881
}
5982
catch (System.Exception e)
@@ -68,26 +91,25 @@ private void Authorize(IWebSocketConnection socket, string webSocketMessage, ISe
6891
/// <param name="socket">
6992
/// The socket.
7093
/// </param>
71-
/// <param name="data">
72-
/// The data.
94+
/// <param name="userData">
95+
/// The userData.
7396
/// </param>
7497
/// <param name="server">
7598
/// The server.
7699
/// </param>
77-
private void ConnectSocket(IWebSocketConnection socket, WebSocketMessage<Payloads.Client.AuthMessage> data, IServer server)
100+
private void ConnectSocket(IWebSocketConnection socket, UserModel userData, IServer server)
78101
{
79-
server.ConnectedSockets.Add(socket, data.Payload.UserName);
102+
server.ConnectedSockets.Add(socket, userData);
80103

81104
var authMessage = new Payloads.Server.AuthMessage()
82105
{
83-
UserName = data.Payload.UserName,
84106
Status = Payloads.Server.AuthMessage.StatusCode.Success
85107
};
86108
socket.Send(Helper.BuildMessage(authMessage));
87109

88110
var chatMessage = new Payloads.Server.ChatMessage()
89111
{
90-
UserName = data.Payload.UserName,
112+
UserName = server.ConnectedSockets[socket].Login,
91113
Message = "has joined the chat!"
92114
};
93115
Successor.ChatHandler.SendToAll(chatMessage, server);
@@ -99,22 +121,11 @@ private void ConnectSocket(IWebSocketConnection socket, WebSocketMessage<Payload
99121
/// <param name="socket">
100122
/// The socket.
101123
/// </param>
102-
/// <param name="data">
103-
/// The data.
104-
/// </param>
105124
/// <param name="server">
106125
/// The server.
107126
/// </param>
108-
private void DisconnectSocket(IWebSocketConnection socket, WebSocketMessage<Payloads.Client.AuthMessage> data, IServer server)
127+
private void DisconnectSocket(IWebSocketConnection socket, IServer server)
109128
{
110-
var authMessage = new Payloads.Server.AuthMessage()
111-
{
112-
UserName = data.Payload.UserName,
113-
Message = "Error: the user name <" + data.Payload.UserName + "> is already in use!",
114-
Status = Payloads.Server.AuthMessage.StatusCode.Error
115-
};
116-
socket.Send(Helper.BuildMessage(authMessage));
117-
118129
socket.Close();
119130
if (server.ConnectedSockets.ContainsKey(socket))
120131
{

WebSocketServer/Messages/Handlers/ChatHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public override void Handle(IWebSocketConnection socket, string webSocketMessage
2626
Newtonsoft.Json.JsonConvert.DeserializeObject<WebSocketMessage<Payloads.Client.ChatMessage>>(webSocketMessage);
2727
var chatMessage = new Payloads.Server.ChatMessage()
2828
{
29-
UserName = server.ConnectedSockets[socket],
29+
UserName = server.ConnectedSockets[socket].Login,
3030
Message = data.Payload.Message
3131
};
3232
SendToAll(chatMessage, server);

WebSocketServer/Messages/Handlers/UsersListHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public override void Handle(IWebSocketConnection socket, string webSocketMessage
2323
{
2424
var usersListMessage = new Payloads.Server.UsersListMessage()
2525
{
26-
UsersList = server.ConnectedSockets.Values.ToArray()
26+
UsersList = server.ConnectedSockets.Values.Select(user => user.Login).ToArray()
2727
};
2828
socket.Send(Helper.BuildMessage(usersListMessage));
2929
}

WebSocketServer/Messages/Payloads/Client/AuthMessage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ namespace WebSocketServer.Messages.Payloads.Client
1313
public class AuthMessage : BaseMessage
1414
{
1515
/// <summary>
16-
/// Gets or sets the user name.
16+
/// Gets or sets the auth token.
1717
/// </summary>
18-
public string UserName { get; set; }
18+
public string AuthToken { get; set; }
1919

2020
/// <inheritdoc />
2121
protected override string MessageType => Types.AuthMessage;

WebSocketServer/Messages/Payloads/Server/AuthMessage.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ public partial class AuthMessage : BaseMessage
2222
/// </summary>
2323
public StatusCode Status { get; set; }
2424

25-
/// <summary>
26-
/// Gets or sets the user name.
27-
/// </summary>
28-
public string UserName { get; set; }
29-
3025
/// <inheritdoc />
3126
protected override string MessageType => Types.AuthMessage;
3227
}

WebSocketServer/Models/AppContext.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public static AppContext Instance
5757
/// </summary>
5858
public DbSet<UserModel> Users { get; set; }
5959

60+
/// <summary>
61+
/// Gets or sets the users tokens.
62+
/// </summary>
63+
public DbSet<UserTokenModel> UsersTokens { get; set; }
64+
6065
/// <inheritdoc />
6166
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
6267
{

0 commit comments

Comments
 (0)