Encode/decode password.
Added Length options to protocol.
This commit is contained in:
@@ -16,5 +16,17 @@ namespace ErgometerLibrary
|
||||
string timestr = time.AddMilliseconds(millis) + "";
|
||||
return timestr;
|
||||
}
|
||||
|
||||
public static string Base64Encode(string plainText)
|
||||
{
|
||||
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
|
||||
return System.Convert.ToBase64String(plainTextBytes);
|
||||
}
|
||||
|
||||
public static string Base64Decode(string base64EncodedData)
|
||||
{
|
||||
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
|
||||
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,11 @@ namespace ErgometerLibrary
|
||||
{
|
||||
public class NetCommand
|
||||
{
|
||||
public enum CommandType { LOGIN, DATA, CHAT, LOGOUT, SESSION, VALUESET, USER, RESPONSE, REQUEST }
|
||||
public enum CommandType { LOGIN, DATA, CHAT, LOGOUT, SESSION, VALUESET, USER, RESPONSE, REQUEST, LENGTH, SESSIONDATA }
|
||||
public enum RequestType { USERS, ALLSESSIONS, CURRENTSESSIONS, OLDDATA, SESSIONDATA }
|
||||
public enum ResponseType { LOGINOK, LOGINWRONG, ERROR, NOTLOGGEDIN }
|
||||
public enum ValueType { TIME, POWER, ENERGY, DISTANCE }
|
||||
public enum LengthType { USERS, SESSIONS, SESSIONDATA, DATA, CURRENTSESSIONS}
|
||||
|
||||
public double Timestamp { get; set; }
|
||||
public int Session { get; set; }
|
||||
@@ -19,13 +20,14 @@ namespace ErgometerLibrary
|
||||
public ResponseType Response { get; set; }
|
||||
public ValueType Value { get; set; }
|
||||
public RequestType Request { get; set; }
|
||||
public LengthType Length { get; set; }
|
||||
public double SetValue { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public bool IsDoctor { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string ChatMessage { get; set; }
|
||||
public Meting Meting { get; set; }
|
||||
public Dictionary<string, string> users;
|
||||
public int LengthValue { get; set; }
|
||||
|
||||
//SESSION
|
||||
public NetCommand(int session)
|
||||
@@ -35,6 +37,15 @@ namespace ErgometerLibrary
|
||||
Timestamp = Helper.Now;
|
||||
}
|
||||
|
||||
//SESSIONDATA
|
||||
public NetCommand(string name, bool foo, int session)
|
||||
{
|
||||
Type = CommandType.SESSIONDATA;
|
||||
Session = session;
|
||||
Timestamp = Helper.Now;
|
||||
DisplayName = name;
|
||||
}
|
||||
|
||||
//RESPONSE
|
||||
public NetCommand(ResponseType response, int session)
|
||||
{
|
||||
@@ -44,6 +55,16 @@ namespace ErgometerLibrary
|
||||
Response = response;
|
||||
}
|
||||
|
||||
//Length
|
||||
public NetCommand(LengthType lengthtype, int length, int session)
|
||||
{
|
||||
Type = CommandType.LENGTH;
|
||||
Length = lengthtype;
|
||||
Session = session;
|
||||
Timestamp = Helper.Now;
|
||||
LengthValue = length;
|
||||
}
|
||||
|
||||
//REQUEST
|
||||
public NetCommand(RequestType request, int session)
|
||||
{
|
||||
@@ -90,12 +111,12 @@ namespace ErgometerLibrary
|
||||
SetValue = val;
|
||||
}
|
||||
|
||||
//USERS
|
||||
public NetCommand(Dictionary<string, string> users, int session)
|
||||
//USER
|
||||
public NetCommand(string username, string password, int session)
|
||||
{
|
||||
Type = CommandType.USER;
|
||||
Session = session;
|
||||
this.users = users;
|
||||
DisplayName = username;
|
||||
}
|
||||
|
||||
//LOGIN
|
||||
@@ -146,14 +167,50 @@ namespace ErgometerLibrary
|
||||
case 7:
|
||||
return ParseValue(session, args);
|
||||
case 8:
|
||||
return ParseUsers(session, args);
|
||||
return ParseUser(session, args);
|
||||
case 9:
|
||||
return ParseRequest(session, args);
|
||||
case 10:
|
||||
return ParseLength(session, args);
|
||||
case 11:
|
||||
return ParseSessionData(session, args);
|
||||
default:
|
||||
throw new FormatException("Error in NetCommand: " + comType + " is not a valid command type.");
|
||||
}
|
||||
}
|
||||
|
||||
private static NetCommand ParseSessionData(int session, string[] args)
|
||||
{
|
||||
if (args.Length != 1)
|
||||
throw new MissingFieldException("Error in NetCommand: Session Data is missing arguments");
|
||||
|
||||
NetCommand temp = new NetCommand(args[0], false, session);
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
private static NetCommand ParseLength(int session, string[] args)
|
||||
{
|
||||
if (args.Length != 2)
|
||||
throw new MissingFieldException("Error in NetCommand: Length is missing arguments");
|
||||
|
||||
switch (args[0])
|
||||
{
|
||||
case "users":
|
||||
return new NetCommand(LengthType.USERS, int.Parse(args[1]), session);
|
||||
case "sessiondata":
|
||||
return new NetCommand(LengthType.SESSIONDATA, int.Parse(args[1]), session);
|
||||
case "sessions":
|
||||
return new NetCommand(LengthType.SESSIONS, int.Parse(args[1]), session);
|
||||
case "data":
|
||||
return new NetCommand(LengthType.DATA, int.Parse(args[1]), session);
|
||||
case "currentsessions":
|
||||
return new NetCommand(LengthType.CURRENTSESSIONS, int.Parse(args[1]), session);
|
||||
default:
|
||||
throw new FormatException("Error in NetCommand: Length type not recognised");
|
||||
}
|
||||
}
|
||||
|
||||
private static NetCommand ParseRequest(int session, string[] args)
|
||||
{
|
||||
if (args.Length != 1)
|
||||
@@ -176,22 +233,14 @@ namespace ErgometerLibrary
|
||||
}
|
||||
}
|
||||
|
||||
private static NetCommand ParseUsers(int session, string[] args)
|
||||
private static NetCommand ParseUser(int session, string[] args)
|
||||
{
|
||||
if (args.Length < 2)
|
||||
throw new MissingFieldException("Error in NetCommand: Users is missing arguments");
|
||||
if (args.Length != 2)
|
||||
throw new MissingFieldException("Error in NetCommand: User is missing arguments");
|
||||
|
||||
Dictionary<string, string> users = new Dictionary<string, string>();
|
||||
NetCommand temp = new NetCommand(args[0], Helper.Base64Decode(args[1]), session);
|
||||
|
||||
foreach(string str in args)
|
||||
{
|
||||
string[] temp = str.Split('|');
|
||||
string name = temp[0];
|
||||
string password = temp[1];
|
||||
users.Add(name, password);
|
||||
}
|
||||
|
||||
return new NetCommand(users, session);
|
||||
return temp;
|
||||
}
|
||||
|
||||
private static NetCommand ParseValue(int session, string[] args)
|
||||
@@ -227,6 +276,8 @@ namespace ErgometerLibrary
|
||||
return new NetCommand(ResponseType.LOGINWRONG, session);
|
||||
case "notloggedin":
|
||||
return new NetCommand(ResponseType.NOTLOGGEDIN, session);
|
||||
case "error":
|
||||
return new NetCommand(ResponseType.ERROR, session);
|
||||
default:
|
||||
throw new FormatException("Error in NetCommand: Response type not recognised");
|
||||
}
|
||||
@@ -281,7 +332,7 @@ namespace ErgometerLibrary
|
||||
NetCommand temp = new NetCommand(CommandType.LOGIN, session);
|
||||
temp.IsDoctor = doctor;
|
||||
temp.DisplayName = args[0];
|
||||
temp.Password = args[1];
|
||||
temp.Password = Helper.Base64Decode(args[1]);
|
||||
|
||||
return temp;
|
||||
}
|
||||
@@ -293,7 +344,7 @@ namespace ErgometerLibrary
|
||||
switch (Type)
|
||||
{
|
||||
case CommandType.LOGIN:
|
||||
command += "1»ses" + Session + "»" + DisplayName + "»" + Password + "»" + IsDoctor;
|
||||
command += "1»ses" + Session + "»" + DisplayName + "»" + Helper.Base64Encode(Password) + "»" + IsDoctor;
|
||||
break;
|
||||
case CommandType.DATA:
|
||||
command += "2»ses" + Session + "»" + Meting.ToCommand();
|
||||
@@ -314,15 +365,17 @@ namespace ErgometerLibrary
|
||||
command += "7»ses" + Session + "»" + Value.ToString().ToLower() + "»" + SetValue;
|
||||
break;
|
||||
case CommandType.USER:
|
||||
command += "8»ses" + Session;
|
||||
foreach(KeyValuePair<string, string> keys in users)
|
||||
{
|
||||
command += "»" + keys.Key + "|" + keys.Value;
|
||||
}
|
||||
command += "8»ses" + Session + "»" + DisplayName + "»" + Helper.Base64Encode(Password);
|
||||
break;
|
||||
case CommandType.REQUEST:
|
||||
command += "9»ses" + Session + "»" + Request.ToString().ToLower();
|
||||
break;
|
||||
case CommandType.LENGTH:
|
||||
command += "10»ses" + Session + "»" + Length.ToString().ToLower() + "»" + LengthValue;
|
||||
break;
|
||||
case CommandType.SESSIONDATA:
|
||||
command += "11»ses" + Session + "»" + DisplayName;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new FormatException("Error in NetCommand: Cannot find type of command");
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.2.8")]
|
||||
[assembly: AssemblyFileVersion("1.0.2.8")]
|
||||
[assembly: AssemblyVersion("1.0.3.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.3.0")]
|
||||
|
||||
Reference in New Issue
Block a user