Пример #1
0
        public async void Sync()
        {
            List <InputInfo> syncDataList = new List <InputInfo>();

            (privateKey, publicKey) = CryptoUtils.GenerateRSAKeys();

            using (var db = new RaidaContext())
            {
                OneTableHash actualInfo = new OneTableHash()
                {
                    PublicKey = publicKey
                };

                await db.Members.Include(it => it.MemberInGroup).ForEachAsync(it => {
                    actualInfo.ActualMembers.Add(GetHash(it));
                });

                await db.Groups.ForEachAsync(it => {
                    actualInfo.ActualGroups.Add(GetHash(it));
                });

                await db.MemberInGroup.ForEachAsync(it => {
                    actualInfo.ActualMinG.Add(GetHash(it));
                });

                try
                {
                    foreach (string serverUrl in MainConfig.TrustedServers)
                    {
                        InputSyncData responseMember = await $"{serverUrl}/api/sync".PostJsonAsync(actualInfo).ReceiveJson <InputSyncData>();
                        InputInfo     tmpInfo        = DecryptResponse <InputInfo>(responseMember);
                        tmpInfo.ServerURL = serverUrl;
                        syncDataList.Add(tmpInfo);
                    }
                }
                catch (Exception ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    //Console.WriteLine(ex.Message);
                    Console.WriteLine("Error of synchronize data from trust server");
                    Console.ResetColor();
                    Console.ReadLine();
                }

                if (syncDataList.Count > 0)
                {
                    InputInfo correctData = IntersectData(syncDataList);
                    SyncronizeBase(correctData, db);
                    DetectIncorrectServer(correctData, syncDataList);
                }
            }
        }
Пример #2
0
        public IActionResult Start([FromBody] OneTableHash data)
        {
            if (ModelState.IsValid)
            {
                using (var db = new RaidaContext())
                {
                    List <SyncMemberInfo> syncData = db.Members.Select(it => new SyncMemberInfo()
                    {
                        Descript = it.description_fragment,
                        LastUse  = it.last_use,
                        Login    = it.login,
                        NickName = it.nick_name,
                        Password = it.pass,
                        Online   = it.online,
                        Photo    = it.photo_fragment,
                        Hash     = SyncData.GetHash(it)
                    }).ToList();
                    var memberInfo = CollectionData(data.ActualMembers, syncData);

                    List <SyncGroupInfo> syncDataGroup = db.Groups.Select(it => new SyncGroupInfo()
                    {
                        Id         = it.group_id,
                        Name       = it.group_name_part,
                        PeerToPeer = it.one_to_one,
                        Photo      = it.photo_fragment,
                        Privated   = it.privated,
                        Owner      = it.owner.login,
                        Hash       = SyncData.GetHash(it)
                    }).ToList();
                    var groupInfo = CollectionData(data.ActualGroups, syncDataGroup);


                    List <SyncMembInGroupInfo> syncDataMiG = db.MemberInGroup.Include(m => m.member).ToList().Select(
                        it =>
                        new SyncMembInGroupInfo()
                    {
                        GroupId = it.groupId,
                        Login   = it.member.login,
                        Hash    = SyncData.GetHash(it)
                    }).ToList();
                    var mingInfo = CollectionData(data.ActualMinG, syncDataMiG);

                    var objRez = CryptoUtils.EncryptDataAES(new { memberInfo, groupInfo, mingInfo });
                    objRez.key = CryptoUtils.EncryptKeyRSA(data.PublicKey, objRez.key);

                    return(new ObjectResult(new { objRez.key, objRez.code }));
                }
            }

            return(NotFound());
        }