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