示例#1
0
        public async Task <ChadderError> Login(string username, string password)
        {
            if (await DeviceExists() == false)
            {
                var temp = await CreateDevice();

                if (temp != ChadderError.OK)
                {
                    return(temp);
                }
            }
            password = await SharedUtil.GetPasswordHash(password);

            var devicePair = await KeyFactory.RefreshBook(db.LocalDevice.PrivateKeyBook);

            var devicePublic = await devicePair.GetPublicBook();

            var request = new LoginParameter()
            {
                Username     = username,
                Password     = password,
                DeviceId     = db.LocalDevice.DeviceId,
                PublicKey    = devicePublic.Serialize(),
                RefreshToken = await CryptoHelper.CreateRandomData(32)
            };
            await request.Sign(db.LocalDevice.PrivateKeyBook.GetMaster());

            var response = await Session.PostRequestAPI <BasicResponse <string> >(Urls.Login, request);

            if (response.Error == ChadderError.OK)
            {
                var key = await CryptoHelper.CreateRandomData(32);

                sqlDB = await ChadderSQLUserDB.GetNewUserDatabase(response.Extra, key, InstanceId);

                db.LocalUser = new ChadderLocalUserInfo()
                {
                    UserId       = response.Extra,
                    Name         = username,
                    RefreshToken = request.RefreshToken
                };
                await sqlDB.InsertAsync(db.LocalUser);

                var keyPackage = new PlainBinary(key);

                var record = new ChadderLocalUserRecord()
                {
                    UserId      = response.Extra,
                    Name        = username,
                    DatabaseKey = keyPackage.Serialize()
                };
                var mainDB = await ChadderSQLMainDB.GetDatabase(InstanceId);

                await mainDB.InsertAsync(record);

                IsOnline = true;
                await FinishLoading();
            }
            return(response.Error);
        }
示例#2
0
        public async Task <ChadderError> LoadUser(ChadderLocalUserRecord record)
        {
            try
            {
                var keyPackage = Chadder.Data.Base.Content.Deserialize <PlainBinary>(record.DatabaseKey);
                sqlDB = await ChadderSQLUserDB.GetUserDatabase(record.UserId, keyPackage.BinData, InstanceId);
            }
            catch (Exception ex)
            {
                Insight.Report(ex);
                return(ChadderError.DB_FAILED_OPEN);
            }
            await db.Load();

            IsOnline = true;

            await FinishLoading();

            return(ChadderError.OK);
        }
示例#3
0
        public async Task MainSqlDatabase()
        {
            var factory    = new Chadder.Data.Keys.ECDSASimpleFactory();
            var deviceInfo = new ChadderLocalDeviceInfo()
            {
                DeviceId           = Guid.NewGuid().ToString(),
                NotificationHandle = Guid.NewGuid().ToString(),
                PrivateKeyBookData = (await factory.GenerateBook()).Serialize()
            };
            var user = new ChadderLocalUserRecord()
            {
                Name        = "Test name",
                UserId      = Guid.NewGuid().ToString(),
                DatabaseKey = await CryptoHelper.CreateRandomData(32)
            };

            using (var mainSql = await ChadderSQLMainDB.GetDatabase(0))
            {
                await mainSql.InsertAsync(deviceInfo);

                await mainSql.InsertAsync(user);
            }
            using (var mainSql = await ChadderSQLMainDB.GetDatabase(0))
            {
                var device2 = await mainSql.GetDevice();

                Assert.AreEqual(deviceInfo.DeviceId, device2.DeviceId);
                Assert.AreEqual(deviceInfo.NotificationHandle, device2.NotificationHandle);
                Assert.IsTrue(deviceInfo.PrivateKeyBookData.SequenceEqual(device2.PrivateKeyBookData));

                var user2 = await mainSql.Table <ChadderLocalUserRecord>().FirstOrDefaultAsync();

                Assert.AreEqual(user.Name, user2.Name);
                Assert.AreEqual(user.UserId, user2.UserId);
                Assert.IsTrue(user.DatabaseKey.SequenceEqual(user2.DatabaseKey));
            }
            await ChadderSQLMainDB.clearData(0);

            System.IO.File.Delete(ChadderSQLMainDB.GetFilePath(0));
            Assert.IsFalse(System.IO.File.Exists(ChadderSQLMainDB.GetFilePath(0)));
        }
        public async Task DeleteUser(ChadderLocalUserRecord user)
        {
            await DeleteAsync(user);

            await DeleteFile(ChadderSQLUserDB.GetFilePath(user.UserId, InstaceId));
        }