mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-20 21:33:15 -07:00
Updated the claims so we can support more users.
Added a user management section (not yet complete) Added the api to the solution and a api key in the settings (currently only gets the requests).
This commit is contained in:
parent
741a4ae75c
commit
98eadc9cc6
12 changed files with 217 additions and 1 deletions
|
@ -172,6 +172,8 @@ namespace PlexRequests.UI.Modules
|
|||
|
||||
Get["/headphones"] = _ => Headphones();
|
||||
Post["/headphones"] = _ => SaveHeadphones();
|
||||
|
||||
Post ["/createapikey"] = x => CreateApiKey ();
|
||||
}
|
||||
|
||||
private Negotiator Authentication()
|
||||
|
@ -705,5 +707,20 @@ namespace PlexRequests.UI.Modules
|
|||
? new JsonResponseModel { Result = true, Message = "Successfully Updated the Settings for Headphones!" }
|
||||
: new JsonResponseModel { Result = false, Message = "Could not update the settings, take a look at the logs." });
|
||||
}
|
||||
|
||||
private Response CreateApiKey()
|
||||
{
|
||||
this.RequiresClaims (UserClaims.Admin);
|
||||
|
||||
var apiKey = Guid.NewGuid ().ToString ("N");
|
||||
|
||||
var settings = PrService.GetSettings ();
|
||||
|
||||
settings.ApiKey = apiKey;
|
||||
|
||||
PrService.SaveSettings (settings);
|
||||
|
||||
return Response.AsJson (apiKey);
|
||||
}
|
||||
}
|
||||
}
|
71
PlexRequests.UI/Modules/ApiModule.cs
Normal file
71
PlexRequests.UI/Modules/ApiModule.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using System;
|
||||
using PlexRequests.UI.Modules;
|
||||
using Nancy;
|
||||
using Nancy.Extensions;
|
||||
using Nancy.ModelBinding;
|
||||
using Nancy.Responses.Negotiation;
|
||||
using Nancy.Validation;
|
||||
using PlexRequests.Core;
|
||||
using System.Collections.Generic;
|
||||
using PlexRequests.Store;
|
||||
using PlexRequests.Core.SettingModels;
|
||||
|
||||
namespace PlexRequests.UI.Modules
|
||||
{
|
||||
public class ApiModule : BaseModule
|
||||
{
|
||||
public ApiModule (IRequestService service, ISettingsService<PlexRequestSettings> settings) : base("api")
|
||||
{
|
||||
Get ["/requests"] = x => GetRequests ();
|
||||
|
||||
RequestService = service;
|
||||
Settings = settings;
|
||||
}
|
||||
|
||||
private IRequestService RequestService{ get; }
|
||||
private ISettingsService<PlexRequestSettings> Settings{get;}
|
||||
|
||||
public Response GetRequests()
|
||||
{
|
||||
var apiModel = new ApiModel<List<RequestedModel>>{Data = new List<RequestedModel>()};
|
||||
if (!Authenticated ()) {
|
||||
apiModel.Error = true;
|
||||
apiModel.ErrorMessage = "ApiKey is invalid or not present, Please use 'apikey' in the querystring.";
|
||||
return ReturnReponse (apiModel);
|
||||
}
|
||||
var requests = RequestService.GetAll ();
|
||||
apiModel.Data.AddRange (requests);
|
||||
|
||||
return ReturnReponse (apiModel);
|
||||
}
|
||||
|
||||
private Response ReturnReponse(object result)
|
||||
{
|
||||
var queryString = (DynamicDictionary)Context.Request.Query;
|
||||
dynamic value;
|
||||
if (queryString.TryGetValue("xml", out value)) {
|
||||
if ((bool)value) {
|
||||
return Response.AsXml (result);
|
||||
}
|
||||
}
|
||||
return Response.AsJson (result);
|
||||
}
|
||||
|
||||
private bool Authenticated(){
|
||||
|
||||
var query = (DynamicDictionary)Context.Request.Query;
|
||||
dynamic key;
|
||||
if (!query.TryGetValue ("apikey", out key)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var settings = Settings.GetSettings ();
|
||||
if ((string)key == settings.ApiKey) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -77,7 +77,9 @@ namespace PlexRequests.UI.Modules
|
|||
}
|
||||
Session[SessionKeys.UsernameKey] = username;
|
||||
Session[SessionKeys.ClientDateTimeOffsetKey] = dtOffset;
|
||||
|
||||
if(redirect.Contains("userlogin")){
|
||||
redirect = !string.IsNullOrEmpty(BaseUrl) ? $"/{BaseUrl}/search" : "/search";
|
||||
}
|
||||
return this.LoginAndRedirect(userId.Value, expiry, redirect);
|
||||
};
|
||||
|
||||
|
|
39
PlexRequests.UI/Modules/UserManagementModule.cs
Normal file
39
PlexRequests.UI/Modules/UserManagementModule.cs
Normal file
|
@ -0,0 +1,39 @@
|
|||
using System;
|
||||
|
||||
using Nancy;
|
||||
using Nancy.Authentication.Forms;
|
||||
using Nancy.Extensions;
|
||||
using Nancy.Responses.Negotiation;
|
||||
using Nancy.Security;
|
||||
|
||||
using PlexRequests.Core;
|
||||
using PlexRequests.UI.Models;
|
||||
using PlexRequests.UI.Modules;
|
||||
using PlexRequests.Helpers;
|
||||
|
||||
|
||||
namespace PlexRequests.UI
|
||||
{
|
||||
public class UserManagementModule : BaseModule
|
||||
{
|
||||
public UserManagementModule () : base("usermanagement")
|
||||
{
|
||||
this.RequiresClaims (UserClaims.Admin);
|
||||
Get["/"] = x => Load();
|
||||
|
||||
Get ["/users"] = x => LoadUsers ();
|
||||
}
|
||||
|
||||
public Negotiator Load()
|
||||
{
|
||||
return View ["Index"];
|
||||
}
|
||||
|
||||
public Response LoadUsers()
|
||||
{
|
||||
var users = UserMapper.GetUsers ();
|
||||
return Response.AsJson (users);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue