You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel.SqLite/AuthRepository.cs

94 lines
3.1 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using ZeroLevel.Models;
namespace ZeroLevel.SqLite
{
public class AuthRepository
{
private static byte[] DEFAULT_ADMIN_PWD_HASH = null;
private readonly SqLiteUserRepository _userRepository = new SqLiteUserRepository();
public UserInfo GetUserInfo(string username, string password)
{
if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
{
return UserInfo.GetAnonimus();
}
// Check built-in admin
if (DEFAULT_ADMIN_PWD_HASH != null && DEFAULT_ADMIN_PWD_HASH.Length > 0 && (username.Equals("root", System.StringComparison.Ordinal) || username.Equals("admin", System.StringComparison.Ordinal))
&& DEFAULT_ADMIN_PWD_HASH.SequenceEqual(ComputeHash(password)))
{
return new UserInfo
{
Role = UserRole.SysAdmin,
UserId = -1,
UserName = "sysadmin",
DisplayName = "System Administrator",
Created = DateTime.Now
};
}
else
{
var user = _userRepository.Get(username, ComputeHash(password));
if (user != null)
{
return new UserInfo
{
Created = new DateTime(user.Timestamp, DateTimeKind.Utc),
DisplayName = user.DisplayName,
Role = user.Role,
UserId = user.Id,
UserName = user.UserName
};
}
}
return null;
}
public InvokeResult<long> CreateUser(string username, string pwd, string displayName, UserRole role, long currentUserId)
{
return _userRepository.SaveUser(new User
{
Creator = currentUserId,
DisplayName = displayName,
PasswordHash = ComputeHash(pwd),
Role = role,
Timestamp = DateTime.UtcNow.Ticks,
UserName = username
});
}
public InvokeResult<IEnumerable<User>> GetUsers()
{
try
{
return InvokeResult<IEnumerable<User>>.Succeeding(_userRepository.GetAll());
}
catch (Exception ex)
{
return InvokeResult<IEnumerable<User>>.Fault<IEnumerable<User>>(ex.Message);
}
}
public InvokeResult RemoveUser(string login)
{
return _userRepository.RemoveUser(login);
}
public void SetAdminPassword(string rootPwd) => DEFAULT_ADMIN_PWD_HASH = ComputeHash(rootPwd);
private byte[] ComputeHash(string pwd)
{
using (SHA256 shaM = new SHA256Managed())
{
return shaM.ComputeHash(Encoding.UTF8.GetBytes(pwd));
}
}
}
}

Powered by TurnKey Linux.