mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-21 05:43:19 -07:00
Created an individual user api endpoint so we can make the user management pages better #865
This commit is contained in:
parent
357d760068
commit
bad109c862
7 changed files with 59 additions and 9 deletions
|
@ -11,6 +11,7 @@ namespace Ombi.Core.IdentityResolver
|
|||
Task<bool> CredentialsValid(string username, string password);
|
||||
|
||||
Task<UserDto> GetUser(string username);
|
||||
Task<UserDto> GetUser(int userId);
|
||||
|
||||
Task<IEnumerable<UserDto>> GetUsers();
|
||||
|
||||
|
|
|
@ -36,6 +36,10 @@ namespace Ombi.Core.IdentityResolver
|
|||
{
|
||||
return Mapper.Map<UserDto>(await UserRepository.GetUser(username));
|
||||
}
|
||||
public async Task<UserDto> GetUser(int userId)
|
||||
{
|
||||
return Mapper.Map<UserDto>(await UserRepository.GetUser(userId));
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<UserDto>> GetUsers()
|
||||
{
|
||||
|
|
|
@ -11,5 +11,6 @@ namespace Ombi.Store.Repository
|
|||
Task<IEnumerable<User>> GetUsers();
|
||||
Task DeleteUser(User user);
|
||||
Task<User> UpdateUser(User user);
|
||||
Task<User> GetUser(int userId);
|
||||
}
|
||||
}
|
|
@ -50,6 +50,13 @@ namespace Ombi.Store.Repository
|
|||
return user;
|
||||
}
|
||||
|
||||
public async Task<User> GetUser(int userId)
|
||||
{
|
||||
var user = await Db.Users.FirstOrDefaultAsync(x => x.Id == userId);
|
||||
Db.Entry(user).Reload();
|
||||
return user;
|
||||
}
|
||||
|
||||
public async Task CreateUser(User user)
|
||||
{
|
||||
Db.Users.Add(user);
|
||||
|
|
|
@ -6,7 +6,8 @@ include the remember me checkbox
|
|||
<div class="container" id="login">
|
||||
<div class="card card-container">
|
||||
<!-- <img class="profile-img-card" src="//lh3.googleusercontent.com/-6V8xOA6M7BA/AAAAAAAAAAI/AAAAAAAAAAA/rzlHcD0KYwo/photo.jpg?sz=120" alt="" /> -->
|
||||
<img id="profile-img" class="profile-img-card" src="/images/logo.png" />
|
||||
<div *ngIf="!customizationSettings.logo"><img id="profile-img" class="profile-img-card" src="/images/logo.png" /></div>
|
||||
<div *ngIf="customizationSettings.logo"><img id="profile-img" class="profile-img-card" [src]="customizationSettings.logo" /></div>
|
||||
<p id="profile-name" class="profile-name-card"></p>
|
||||
|
||||
<form class="form-signin" novalidate [formGroup]="form" (ngSubmit)="onSubmit(form)">
|
||||
|
|
|
@ -5,6 +5,8 @@ import { FormGroup, Validators, FormBuilder } from '@angular/forms';
|
|||
import { AuthService } from '../auth/auth.service';
|
||||
import { StatusService } from '../services/status.service';
|
||||
import { NotificationService } from '../services/notification.service';
|
||||
import { SettingsService } from '../services/settings.service';
|
||||
import { ICustomizationSettings } from '../interfaces/ISettings';
|
||||
|
||||
|
||||
|
||||
|
@ -15,7 +17,8 @@ import { NotificationService } from '../services/notification.service';
|
|||
export class LoginComponent implements OnInit {
|
||||
|
||||
|
||||
constructor(private authService: AuthService, private router: Router, private notify: NotificationService, private status: StatusService, private fb: FormBuilder) {
|
||||
constructor(private authService: AuthService, private router: Router, private notify: NotificationService, private status: StatusService,
|
||||
private fb: FormBuilder, private settingsService : SettingsService) {
|
||||
this.form = this.fb.group({
|
||||
username: ["", [Validators.required]],
|
||||
password: ["", [Validators.required]]
|
||||
|
@ -29,9 +32,10 @@ export class LoginComponent implements OnInit {
|
|||
}
|
||||
|
||||
form: FormGroup;
|
||||
customizationSettings : ICustomizationSettings;
|
||||
|
||||
ngOnInit(): void {
|
||||
|
||||
this.settingsService.getCustomization().subscribe(x => this.customizationSettings = x);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace Ombi.Controllers
|
|||
[HttpGet]
|
||||
public async Task<UserViewModel> GetUser()
|
||||
{
|
||||
return Mapper.Map<UserViewModel>(await IdentityManager.GetUser(this.HttpContext.User.Identity.Name));
|
||||
return Mapper.Map<UserViewModel>(await IdentityManager.GetUser(this.HttpContext.User.Identity.Name));
|
||||
}
|
||||
|
||||
|
||||
|
@ -68,7 +68,7 @@ namespace Ombi.Controllers
|
|||
{
|
||||
Username = user.Username,
|
||||
UserType = UserType.LocalUser,
|
||||
Claims = new List<Claim>() {new Claim(ClaimTypes.Role, OmbiClaims.Admin)},
|
||||
Claims = new List<Claim>() { new Claim(ClaimTypes.Role, OmbiClaims.Admin) },
|
||||
Password = user.Password,
|
||||
});
|
||||
|
||||
|
@ -108,6 +108,38 @@ namespace Ombi.Controllers
|
|||
return users;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user by the user id.
|
||||
/// </summary>
|
||||
/// <returns>Information about the user</returns>
|
||||
[HttpGet("Users/{id}")]
|
||||
public async Task<UserViewModel> GetUser(int id)
|
||||
{
|
||||
var type = typeof(OmbiClaims);
|
||||
FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public |
|
||||
BindingFlags.Static | BindingFlags.FlattenHierarchy);
|
||||
|
||||
var fields = fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
|
||||
var allClaims = fields.Select(x => x.Name).ToList();
|
||||
var user = Mapper.Map<UserViewModel>(await IdentityManager.GetUser(id)).ToList();
|
||||
|
||||
|
||||
var userClaims = user.Claims.Select(x => x.Value);
|
||||
IEnumerable<string> left = allClaims.Except(userClaims);
|
||||
|
||||
foreach (var c in left)
|
||||
{
|
||||
user.Claims.Add(new ClaimCheckboxes
|
||||
{
|
||||
Enabled = false,
|
||||
Value = c
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the user.
|
||||
/// </summary>
|
||||
|
@ -159,7 +191,7 @@ namespace Ombi.Controllers
|
|||
var fields = fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();
|
||||
var allClaims = fields.Select(x => x.Name).ToList();
|
||||
|
||||
return allClaims.Select(x => new ClaimCheckboxes() {Value = x});
|
||||
return allClaims.Select(x => new ClaimCheckboxes() { Value = x });
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue