Ejemplo n.º 1
0
        /// <summary>
        /// Creates a JSON Web Token.
        /// </summary>
        /// <param name="userDto">A <see cref="UserDto"/> object with username.</param>
        /// <returns>A <see cref="LoginPackage"/> with a JSON Web Token.</returns>
        private LoginPackage CreateToken(UserDto userDto)
        {
            var key    = _configuration.GetValue <string>("JwtAuthorization:key");
            var issuer = _configuration.GetValue <string>("JwtAuthorization:issuer");

            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

            var permClaims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("valid", "1"),
                new Claim("userid", userDto.Id.ToString()),
                new Claim("name", userDto.Username)
            };

            var token = new JwtSecurityToken(issuer,
                                             issuer,
                                             permClaims,
                                             expires: DateTime.Now.AddDays(7),
                                             signingCredentials: credentials);

            var loginPackage = new LoginPackage
            {
                Data = new JwtSecurityTokenHandler().WriteToken(token)
            };

            return(loginPackage);
        }
Ejemplo n.º 2
0
    // Use this for initialization
    void Start()
    {
        ByteBuffer bf = new ByteBuffer();

        LoginRequest pkt = new LoginRequest();

        pkt.username  = "******";
        pkt.passworld = "123";
        pkt.age       = 22;
        pkt.Write(bf);

        //toArray操作其实是read的操作,读取指针会往后移哦。前面的会被重用哦。太棒了!!
        byte[] _bb = bf.toArray();
        Debug.Log(_bb.Length);
        //然后就可以发出去了。


        //模拟一下接收
        ByteBuffer bf2 = new ByteBuffer();

        bf2.writeBytes(_bb);//可以无限写入哦!!!!

        LoginPackage _TTT = new LoginPackage();

        _TTT.Read(bf2);
        Debug.Log("username:"******"pwd:" + _TTT.passworld + "age:" + _TTT.age);



        ////可以无限写入哦!!!!
        //bf2.writeBytes(_bb);
        ////然后我就可以读取了吧
        ////Debug.Log("bf2:"+bf2.readInt());
        ////Debug.Log("bf2:"+bf2.readString());
        ////Debug.Log("bf2:"+bf2.readString());

        //Debug.Log(bf2.readableBytes());

        ////可用字节的长度
        //int packageSize = bf.readableBytes();
        //Debug.Log("packageSize:"+bf.readableBytes());

        //int i =bf.readInt();
        //Debug.Log(i);
        //string _s =bf.readString();
        //Debug.Log(_s);
        //string _s2 = bf.readString();
        //Debug.Log(_s2);

        ////可读取的字节数,=0的话,说明写入的已经被读取完了
        //Debug.Log(bf.readableBytes());

        ////整个buffer容器大小
        //Debug.Log("buffer contain:"+ bf.getCapacity());

        ////buffer容器的名字,用逗号隔开
        //bf.writeString("hello joe");
        //Debug.Log(bf.remainBufferString());
    }
Ejemplo n.º 3
0
 public LoginResult login(LoginPackage loginPackage)
 {
     return(new LoginResult
     {
         Status = 200,
         AuthToken = PrivateKeyGenerator.generatePrivateKey().ToString(),
         ElectionPuk = EncryptionVariables.ElectionPuk,
         Choices = getChoices()
     });
 }
        public void GetLoginPackageTest()
        {
            var package = new LoginPackage();
            var data    = package.ToByteArray();

            ClientPackage clientPackage = _factory.GetNextPackage(data);

            Assert.NotNull(clientPackage);
            Assert.AreEqual(data, clientPackage.ToByteArray());
            Assert.AreEqual(package.Type, clientPackage.Type);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 网络登录
        /// </summary>
        /// <param name="stream">连接网络流</param>
        static void Login(NetworkStream stream)
        {
            var formater = new BinaryFormatter();

            Console.Write("帐号:");
            var account = Console.ReadLine();

            Console.Write("密码:");
            var password = Console.ReadLine();
            //组织登录报文
            var loginPackage = new LoginPackage {
                Account = account, Password = password
            };

            //发送登录报文
            formater.Serialize(stream, loginPackage);
            //接收登录报文返回织
            var loginResultPackage = formater.Deserialize(stream) as LoginResultPackage;

            //判断登结结果
            if (loginResultPackage.Result)
            {
                Console.WriteLine("登录成功!");
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("*******我的好友******");
                foreach (var friend in loginResultPackage.Frinds)
                {
                    Console.WriteLine("帐户:" + friend);
                }
                Console.WriteLine("*******我的好友******");
                Console.ResetColor();
                //读的代码
                new Thread(ReadMessage).Start(stream);
                //开始写线程
                WriteMessage(stream, account);
            }
            else
            {
                //登录不成功可以再次登录
                Console.WriteLine(loginResultPackage.Message);
                Console.WriteLine("退出请按e,再次登录请按任意键!");
                if (Console.ReadKey().KeyChar != 'e')
                {
                    Login(stream);
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 验证登录
        /// </summary>
        /// <param name="obj"></param>
        static void HandleLoginPackage(NetworkStream stream, LoginPackage loginPackage)
        {
            var loginResultPackage = new LoginResultPackage();

            //验证用帐号和密码,组织正确或错误报文并返回
            if (users.Keys.Contains(loginPackage.Account) && users[loginPackage.Account] == loginPackage.Password)
            {
                loginResultPackage.Result = true;
                loginResultPackage.Frinds = userConnects.Keys.ToArray();
                userConnects.Add(loginPackage.Account, stream);
            }
            else
            {
                loginResultPackage.Result  = false;
                loginResultPackage.Message = "用户名或密码错误!";
            }
            var formater = new BinaryFormatter();

            formater.Serialize(stream, loginResultPackage);
        }
Ejemplo n.º 7
0
        public void LoginPackageDeserializationTest()
        {
            LoginPackage expected = new LoginPackage();

            var buffer = expected.ToByteArray();

            ClientPackageType packageType = ClientPackageType.None;
            LoginPackage      actual      = new LoginPackage();

            using (var stream = new MemoryStream(buffer))
            {
                using (var reader = new BinaryReader(stream))
                {
                    var len = reader.ReadInt32();
                    packageType = (ClientPackageType)reader.ReadByte();
                    actual.FromByteArray(reader.ReadBytes(len - 1));
                }
            }

            Assert.AreEqual(ClientPackageType.Login, packageType);
        }
Ejemplo n.º 8
0
        //stuff that controller shouldn't know
        // private bool verifyMessage(string message)
        // {
        //     JsonSerializerOptions serializerOptions = new JsonSerializerOptions();
        //     serializerOptions.Converters.Add(new BigIntegerConverter());
        //     Signature signature = JsonSerializer.Deserialize<Signature>(message, serializerOptions);
        //
        //     return Verifying.verifyMessage(signature, message, EncryptionVariables.PukForClients,
        //         EncryptionVariables.EllipticCurveForClient);
        // }

        // https://weblog.west-wind.com/posts/2017/sep/14/accepting-raw-request-body-content-in-aspnet-core-api-controllers
        // public static async Task<string> GetRawBodyStringAsync(this HttpRequest request, Encoding encoding = null)
        // {
        //     if (encoding == null)
        //         encoding = Encoding.UTF8;
        //
        //     using (StreamReader reader = new StreamReader(request.Body, encoding))
        //         return await reader.ReadToEndAsync();
        // }


        private string loginClientToLoginServer(string message)
        {
            JsonSerializerOptions serializerOptions = new JsonSerializerOptions();

            serializerOptions.Converters.Add(new BigIntegerConverter());

            LoginContainer     loginContainer = JsonSerializer.Deserialize <LoginContainer>(message, serializerOptions);
            EllipticCurvePoint sharedKey      = KeyGeneration.calculateMasterKey(EncryptionVariables.PrkcForClient,
                                                                                 loginContainer.clientPuk, EncryptionVariables.EllipticCurveForClient);
            ECIESUnprocessResult unprocessResult = ECIESProvider.unprocessMessage(sharedKey.x.ToString(),
                                                                                  loginContainer.loginPackage.Tag, loginContainer.loginPackage.EncryptedMessage);

            if (unprocessResult.Status != MyEnum.Successful)
            {
                return(JsonSerializer.Serialize(new LoginResultContainer()
                {
                    LoginResultECIESProcessed = ECIESProvider.processMessage(sharedKey.x.ToString(),
                                                                             JsonSerializer.Serialize(new LoginResult()
                    {
                        Status = 401
                    }))
                }));
            }
            else
            {
                LoginPackage loginPackage =
                    JsonSerializer.Deserialize <LoginPackage>(unprocessResult.DeprocessedMessage);
                LoginResult loginResult = _login.login(loginPackage);

                return(JsonSerializer.Serialize(new LoginResultContainer()
                {
                    LoginResultECIESProcessed = ECIESProvider.processMessage(sharedKey.x.ToString(),
                                                                             JsonSerializer.Serialize(loginResult))
                }));
            }
        }
        //登陆
        void Login(object parameter)
        {
            if (IsBusy)
            {
                return;
            }
            IsBusy = true;

            //重置提示栏
            this.Error = "";

            #region 记住密码

            if (this.RememberMe == true)
            {
                LoginPackage package = new LoginPackage(this.Username, this.Password);
                DataManager.SetValue(DataKey.IWorld_Backstage_RememberMe, package);
            }
            else
            {
                DataManager.RemoveValue(DataKey.IWorld_Backstage_RememberMe);
            }

            #endregion

            //登陆
            AdministratorServiceClient client = new AdministratorServiceClient();
            client.LoginCompleted += ShowLoginResult;
            LoginImport import = new LoginImport
            {
                Username = this.Username,
                Password = this.Password
            };
            client.LoginAsync(import);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 登陆
        /// </summary>
        /// <param name="parameter">可选参数</param>
        void Login(object parameter)
        {
            if (IsBusy)
            {
                return;
            }
            IsBusy = true;

            //重置提示栏
            this.Error = "";

            #region 记住密码

            string dataKeyOfRememberMe = DataKey.Client_RememberMe.ToString();
            if (this.RememberMe == true)
            {
                LoginPackage package = new LoginPackage
                {
                    Username = this.Username,
                    Password = this.Password
                };
                IsolatedStorageSettings.ApplicationSettings[dataKeyOfRememberMe] = package;
            }
            else
            {
                IsolatedStorageSettings.ApplicationSettings.Remove(dataKeyOfRememberMe);
            }
            IsolatedStorageSettings.ApplicationSettings.Save();

            #endregion

            tUsername = this.Username;
            //登陆
            UserClient.LoginAsync(this.Username, this.Password);
        }
Ejemplo n.º 11
0
        private void ReadCallback(IAsyncResult ar)
        {
            Socket handler  = (Socket)ar.AsyncState;
            int    received = handler.EndReceive(ar);

            if (received > 0)
            {
                sb.Append(Encoding.ASCII.GetString(buffer, 0, received));
                string content = sb.ToString();

                if (content.IndexOf(ServerConstants.EOF) > -1)
                {
                    content = content.Substring(0, content.Length - 5);
                    serverTB.AppendText("Read " + content.Length + " bytes from socket.\r\nData: " + content + "\r\n\r\n");

                    var deserialized = JsonConvert.DeserializeObject <PackageWrapper>(content);
                    if (deserialized.PackageType == typeof(LoginPackage))
                    {
                        LoginPackage lp = (LoginPackage)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType);

                        ClientsDetailsPackage client = Client.getClientsDetailsPackage(lp);

                        byte[] sendClient = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(client) + ServerConstants.EOF);
                        handler.BeginSend(sendClient, 0, sendClient.Length, 0, new AsyncCallback(SendCallback), handler);
                    }

                    else if (deserialized.PackageType == typeof(FileSearch))
                    {
                        FileSearch fs = (FileSearch)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType);

                        List <FileDetails> lfd        = new List <FileDetails>();
                        List <File>        listFile   = new List <File>();
                        List <ClientFile>  listClient = new List <ClientFile>();
                        Client             client     = new Client();
                        FilePackage        fp         = new FilePackage();

                        if (fs.FileName.CompareTo("*") == 0)
                        {
                            listFile = File.getAllFilesList();

                            foreach (var item in listFile)
                            {
                                listClient = ClientFile.getAllFilesById(item.Id);
                                foreach (var item2 in listClient)
                                {
                                    client.getClient(item2.Username);

                                    FileDetails f = new FileDetails
                                    {
                                        Username = item2.Username,
                                        FileName = item.Name,
                                        FileSize = item.Size,
                                        Ip       = client.Ip,
                                        Port     = client.Port
                                    };

                                    lfd.Add(f);
                                }
                            }

                            fp.Exist     = true;
                            fp.FilesList = lfd;
                        }

                        else if (!File.isFileExist(fs.FileName))
                        {
                            fp.Exist = false;
                        }

                        else
                        {
                            listFile = File.getAllFilesListByName(fs.FileName);

                            foreach (var item in listFile)
                            {
                                listClient = ClientFile.getAllFilesById(item.Id);
                                foreach (var item2 in listClient)
                                {
                                    client.getClient(item2.Username);
                                    int size = item.Size;

                                    FileDetails f = new FileDetails
                                    {
                                        Username = item2.Username,
                                        FileName = item.Name,
                                        FileSize = size,
                                        Ip       = client.Ip,
                                        Port     = client.Port
                                    };

                                    lfd.Add(f);
                                }
                            }

                            fp.Exist     = true;
                            fp.FilesList = lfd;
                        }

                        byte[] sendAnswer = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(fp) + ServerConstants.EOF);
                        handler.BeginSend(sendAnswer, 0, sendAnswer.Length, 0, new AsyncCallback(SendCallback), handler);
                    }

                    else
                    {
                        LogoutPackage lp = (LogoutPackage)JsonConvert.DeserializeObject(Convert.ToString(deserialized.Package), deserialized.PackageType);
                        Client.setLogOut(lp.Username);
                    }
                }

                else
                {
                    handler.BeginReceive(buffer, 0, ServerConstants.BufferSize, 0, new AsyncCallback(ReadCallback), handler);
                }

                sb.Clear();
                handler.BeginReceive(buffer, 0, ServerConstants.BufferSize, 0, new AsyncCallback(ReadCallback), handler);
            }
        }
Ejemplo n.º 12
0
        private byte[] PrepareSendData(StateObject state)
        {
            byte[] result = null;
            switch (state.Package.CID)
            {
            case FuncCode.Ensure:
                _logManager.Info($"{MessageType.Send} => 确认报文");
                var package = new EnsurePackage
                {
                    PID       = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID       = SocketHelper.HostToNetwork(FuncCode.Ensure),
                    ST        = 0,
                    UID       = 0,
                    VER       = SocketHelper.HostToNetwork((ushort)0x1000),
                    IPAddress = "".PadRight(20, '\0'),
                    Port      = SocketHelper.HostToNetwork((uint)0)
                };
                result = SocketHelper.StructToBytes(package);
                _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}");
                break;

            case FuncCode.Redirect:
                _logManager.Info($"{MessageType.Send} => 重定向报文");
                var package2 = new EnsurePackage
                {
                    PID       = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID       = SocketHelper.HostToNetwork(FuncCode.Redirect),
                    ST        = 0,
                    UID       = 0,
                    VER       = SocketHelper.HostToNetwork((ushort)0x1000),
                    IPAddress = "127.0.0.1".PadRight(20, '\0'),
                    Port      = SocketHelper.HostToNetwork((uint)11000)
                };
                result = SocketHelper.StructToBytes(package2);
                break;

            case FuncCode.Close:
                _logManager.Info($"{MessageType.Send} => 关闭报文");
                var package3 = new EnsurePackage
                {
                    PID       = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID       = SocketHelper.HostToNetwork(FuncCode.Close),
                    ST        = 0,
                    UID       = 0,
                    VER       = SocketHelper.HostToNetwork((ushort)0x1000),
                    IPAddress = "".PadRight(20, '\0'),
                    Port      = SocketHelper.HostToNetwork((uint)0)
                };
                result = SocketHelper.StructToBytes(package3);
                break;

            case FuncCode.Login:
                _logManager.Info($"{MessageType.Login}{state.Machine.MachineCode} => 登录报文");
                var package4 = new LoginPackage
                {
                    PID      = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID      = SocketHelper.HostToNetwork(FuncCode.Login),
                    ST       = 0,
                    UID      = Convert.ToByte(state.UserName),
                    VER      = SocketHelper.HostToNetwork((ushort)0x1000),
                    Password = state.Password.PadRight(8, '\0')
                };
                result = SocketHelper.StructToBytes(package4);
                _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}");
                break;

            case FuncCode.EnumAllData:
                _logManager.Info($"{MessageType.RequireDataItem}{state.Machine.MachineCode} => 枚举请求报文");
                var package5 = new BasicPackage
                {
                    PID = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID = SocketHelper.HostToNetwork(FuncCode.EnumAllData),
                    ST  = 0,
                    UID = Convert.ToByte(state.UserName),
                    VER = SocketHelper.HostToNetwork((ushort)0x1000)
                };
                result = SocketHelper.StructToBytes(package5);
                break;

            case FuncCode.RequestForPush:
                _logManager.Info($"{MessageType.RequireDataItem}{state.Machine.MachineCode} => 推送请求报文");
                var package6 = new RequestPushPackage
                {
                    PID = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID = SocketHelper.HostToNetwork(FuncCode.RequestForPush),
                    UID = state.UserName,
                    ST  = 0,
                    VER = SocketHelper.HostToNetwork((ushort)0x1000),
                    RV  = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }
                };
                result = SocketHelper.StructToBytes(package6);
                _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}");
                break;

            case FuncCode.NullCommandReply:
                _logManager.Info($"{MessageType.KeepAlive}{state.Machine.MachineCode} => 心跳包回复报文");
                var package7 = new BasicPackage
                {
                    PID = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID = SocketHelper.HostToNetwork(FuncCode.NullCommandReply),
                    ST  = 0,
                    UID = Convert.ToByte(state.UserName),
                    VER = SocketHelper.HostToNetwork((ushort)0x1000)
                };
                result = SocketHelper.StructToBytes(package7);
                _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}");
                break;

            case FuncCode.PushDataReply:
                _logManager.Info($"{MessageType.Send}{state.Machine.MachineCode} => 推送回复报文");
                var package8 = new BasicPackage
                {
                    PID = SocketHelper.HostToNetwork((ushort)0x0000),
                    CID = SocketHelper.HostToNetwork(FuncCode.PushDataReply),
                    ST  = 0,
                    UID = Convert.ToByte(state.UserName),
                    VER = SocketHelper.HostToNetwork((ushort)0x1000)
                };
                result = SocketHelper.StructToBytes(package8);
                _logManager.Info($"{MessageType.Send} => {PrintReceivebytes(result)}");
                break;
            }
            return(result);
        }