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); }
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)); }
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); }