Created an individual user api endpoint so we can make the user management pages better #865

This commit is contained in:
TidusJar 2017-07-06 21:53:13 +01:00
commit bad109c862
7 changed files with 59 additions and 9 deletions

View file

@ -11,6 +11,7 @@ namespace Ombi.Core.IdentityResolver
Task<bool> CredentialsValid(string username, string password); Task<bool> CredentialsValid(string username, string password);
Task<UserDto> GetUser(string username); Task<UserDto> GetUser(string username);
Task<UserDto> GetUser(int userId);
Task<IEnumerable<UserDto>> GetUsers(); Task<IEnumerable<UserDto>> GetUsers();

View file

@ -36,6 +36,10 @@ namespace Ombi.Core.IdentityResolver
{ {
return Mapper.Map<UserDto>(await UserRepository.GetUser(username)); 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() public async Task<IEnumerable<UserDto>> GetUsers()
{ {

View file

@ -11,5 +11,6 @@ namespace Ombi.Store.Repository
Task<IEnumerable<User>> GetUsers(); Task<IEnumerable<User>> GetUsers();
Task DeleteUser(User user); Task DeleteUser(User user);
Task<User> UpdateUser(User user); Task<User> UpdateUser(User user);
Task<User> GetUser(int userId);
} }
} }

View file

@ -50,6 +50,13 @@ namespace Ombi.Store.Repository
return user; 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) public async Task CreateUser(User user)
{ {
Db.Users.Add(user); Db.Users.Add(user);

View file

@ -6,7 +6,8 @@ include the remember me checkbox
<div class="container" id="login"> <div class="container" id="login">
<div class="card card-container"> <div class="card card-container">
<!-- <img class="profile-img-card" src="//lh3.googleusercontent.com/-6V8xOA6M7BA/AAAAAAAAAAI/AAAAAAAAAAA/rzlHcD0KYwo/photo.jpg?sz=120" alt="" /> --> <!-- <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> <p id="profile-name" class="profile-name-card"></p>
<form class="form-signin" novalidate [formGroup]="form" (ngSubmit)="onSubmit(form)"> <form class="form-signin" novalidate [formGroup]="form" (ngSubmit)="onSubmit(form)">

View file

@ -5,6 +5,8 @@ import { FormGroup, Validators, FormBuilder } from '@angular/forms';
import { AuthService } from '../auth/auth.service'; import { AuthService } from '../auth/auth.service';
import { StatusService } from '../services/status.service'; import { StatusService } from '../services/status.service';
import { NotificationService } from '../services/notification.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 { 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({ this.form = this.fb.group({
username: ["", [Validators.required]], username: ["", [Validators.required]],
password: ["", [Validators.required]] password: ["", [Validators.required]]
@ -29,9 +32,10 @@ export class LoginComponent implements OnInit {
} }
form: FormGroup; form: FormGroup;
customizationSettings : ICustomizationSettings;
ngOnInit(): void { ngOnInit(): void {
this.settingsService.getCustomization().subscribe(x => this.customizationSettings = x);
} }

View file

@ -108,6 +108,38 @@ namespace Ombi.Controllers
return users; 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> /// <summary>
/// Creates the user. /// Creates the user.
/// </summary> /// </summary>