示例#1
0
        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);
        }
示例#2
0
        private string GetSha1(string value)
        {
            var bytes = Encoding.UTF8.GetBytes(value ?? string.Empty);

            return(BitConverter.ToString(_cryptographyProvider.CreateSha1(bytes)).Replace("-", string.Empty));
        }