public async Task AuthenticateOffline(UserDto user, string password, bool rememberLogin) { var credentials = await _credentialProvider.GetServerCredentials().ConfigureAwait(false); var server = credentials.Servers.FirstOrDefault(i => string.Equals(i.Id, user.ServerId, StringComparison.Ordinal)); if (server == null) { throw new UnauthorizedAccessException("Server info not found."); } var bytes = Encoding.UTF8.GetBytes(password ?? string.Empty); var hash = BitConverter.ToString(_cryptographyProvider.CreateSha1(bytes)).Replace("-", string.Empty); hash += Device.DeviceId; bytes = Encoding.UTF8.GetBytes(hash); hash = BitConverter.ToString(_cryptographyProvider.CreateSha1(bytes)).Replace("-", string.Empty); if (!string.Equals(hash, user.OfflinePassword, StringComparison.Ordinal)) { throw new UnauthorizedAccessException("Invalid username or password."); } server.AddOrUpdate(new ServerUserInfo { Id = user.Id, IsSignedInOffline = rememberLogin }); await _credentialProvider.SaveServerCredentials(credentials).ConfigureAwait(false); }
private string GetSha1(string value) { var bytes = Encoding.UTF8.GetBytes(value ?? string.Empty); return(BitConverter.ToString(_cryptographyProvider.CreateSha1(bytes)).Replace("-", string.Empty)); }