Beispiel #1
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);
        }
Beispiel #2
0
        public async Task <ChadderError> CreateUser(string Name, string Username = null, string password = null)
        {
            if (await DeviceExists() == false)
            {
                var temp = await CreateDevice();

                if (temp != ChadderError.OK)
                {
                    return(temp);
                }
            }
            if (password != null)
            {
                password = await SharedUtil.GetPasswordHash(password);
            }
            var keypair = await KeyFactory.GenerateBook();

            var pbk = await keypair.GetPublicBook();

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

            var devicePublic = await devicePair.GetPublicBook();

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

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

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

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

                db.LocalUser = new ChadderLocalUserInfo()
                {
                    PrivateKeyBookData = keypair.Serialize(),
                    UserId             = response.Extra,
                    Name         = Name,
                    Picture      = db.GetPicture(null),
                    RefreshToken = request.RefreshToken
                };
                await sqlDB.InsertAsync(db.LocalUser);

                var keyPackage = new PlainBinary(key);

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

                await mainDB.InsertAsync(record);

                IsOnline = true;
                await FinishLoading();
            }
            return(response.Error);
        }