Esempio n. 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);
        }
Esempio n. 2
0
        public async Task UserSqlDatabase()
        {
            var key = await CryptoHelper.CreateRandomData(32);

            var key2 = await CryptoHelper.CreateRandomData(32);

            var userId = Guid.NewGuid().ToString();

            using (var db = await ChadderSQLUserDB.GetNewUserDatabase(userId, key, 0));
            try
            {
                //using (var db = await ChadderSQLUserDB.GetUserDatabase(userId, key2, 0)) ;
                Assert.Fail("Opened db with wrong dbkey");
            }
            catch { }

            File.Delete(ChadderSQLUserDB.GetFilePath(userId, 0));
        }
Esempio n. 3
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);
        }