mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-14 02:26:55 -07:00
stuff around tokens and also builds
This commit is contained in:
parent
366b0d575a
commit
66cc7f6f1a
13 changed files with 59 additions and 22 deletions
20
BuildTask.ps1
Normal file
20
BuildTask.ps1
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
param([String]$env='local',
|
||||
[String]$ver='3.0.0',
|
||||
[String]$basePath='')
|
||||
|
||||
"Environment: " + $env | Write-Output;
|
||||
"Build Version: " + $ver | Write-Output;
|
||||
"Base Path: " + $basePath | Write-Output;
|
||||
|
||||
$appSettingsPath = $basePath + '\src\Ombi\appsettings.json'
|
||||
$appSettings = Get-Content $appSettingsPath -raw
|
||||
$appSettings = $appSettings.Replace("{{VERSIONNUMBER}}",$ver);
|
||||
Set-Content -Path $appSettingsPath -Value $appSettings
|
||||
|
||||
$configPath = $basePath + '\src\Ombi\wwwroot\app\config.ts';
|
||||
$config = Get-Content $configPath -raw
|
||||
|
||||
$config = $config.Replace("{{ENVIRONMENT}}",$env);
|
||||
$config | Write-Output
|
||||
#Set-Content -Path $configPath -Value $config
|
|
@ -10,6 +10,7 @@ before_build:
|
|||
- appveyor-retry npm install -g gulp
|
||||
- appveyor-retry npm install
|
||||
- appveyor-retry bower install
|
||||
- ps: %APPVEYOR_BUILD_FOLDER%\BuildTask.ps1 -env "live" -ver "%APPVEYOR_BUILD_VERSION%" -basePath "%APPVEYOR_BUILD_FOLDER%"
|
||||
- gulp publish
|
||||
build_script:
|
||||
- dotnet build
|
||||
|
|
|
@ -57,7 +57,7 @@ namespace Ombi.DependencyInjection
|
|||
{
|
||||
services.AddEntityFrameworkSqlite().AddDbContext<OmbiContext>();
|
||||
|
||||
services.AddTransient<IOmbiContext, OmbiContext>();
|
||||
services.AddScoped<IOmbiContext, OmbiContext>();
|
||||
services.AddTransient<IRequestRepository, RequestJsonRepository>();
|
||||
services.AddTransient<ISettingsRepository, SettingsJsonRepository>();
|
||||
services.AddTransient<IUserRepository, UserRepository>();
|
||||
|
|
|
@ -17,5 +17,6 @@ namespace Ombi.Store.Context
|
|||
DbSet<User> Users { get; set; }
|
||||
EntityEntry<T> Entry<T>(T entry) where T : class;
|
||||
EntityEntry<TEntity> Attach<TEntity>(TEntity entity) where TEntity : class;
|
||||
DbSet<TEntity> Set<TEntity>() where TEntity : class;
|
||||
}
|
||||
}
|
|
@ -41,11 +41,13 @@ namespace Ombi.Store.Repository
|
|||
Db = ctx;
|
||||
}
|
||||
|
||||
private IOmbiContext Db { get; }
|
||||
private IOmbiContext Db { get; }
|
||||
|
||||
public async Task<User> GetUser(string username)
|
||||
{
|
||||
return await Db.Users.FirstOrDefaultAsync(x => x.Username.ToLower() == username.ToLower());
|
||||
var user = await Db.Users.FirstOrDefaultAsync(x => x.Username.ToLower() == username.ToLower());
|
||||
Db.Entry(user).Reload();
|
||||
return user;
|
||||
}
|
||||
|
||||
public async Task CreateUser(User user)
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26403.7
|
||||
VisualStudioVersion = 15.0.26430.6
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ombi", "Ombi\Ombi.csproj", "{C987AA67-AFE1-468F-ACD3-EAD5A48E1F6A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9D30CCF8-A115-4EB7-A34D-07780D752789}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\appveyor.yml = ..\appveyor.yml
|
||||
..\BuildTask.ps1 = ..\BuildTask.ps1
|
||||
Build\publish windows.bat = Build\publish windows.bat
|
||||
Build\publish.bat = Build\publish.bat
|
||||
EndProjectSection
|
||||
|
|
11
src/Ombi/Auth/TokenAuthenticationOptions.cs
Normal file
11
src/Ombi/Auth/TokenAuthenticationOptions.cs
Normal file
|
@ -0,0 +1,11 @@
|
|||
namespace Ombi.Auth
|
||||
{
|
||||
public class TokenAuthenticationOptions
|
||||
{
|
||||
public string SecretKey { get; set; }
|
||||
public string Issuer { get; set; }
|
||||
public string Audience { get; set; }
|
||||
public string TokenPath { get; set; }
|
||||
public string CookieName { get; set; }
|
||||
}
|
||||
}
|
|
@ -30,7 +30,7 @@ namespace Ombi.Auth
|
|||
/// <summary>
|
||||
/// The expiration time for the generated tokens.
|
||||
/// </summary>
|
||||
/// <remarks>The default is 7 Days.</remarks>
|
||||
/// <remarks>The default is 1 Days.</remarks>
|
||||
public TimeSpan Expiration { get; set; } = TimeSpan.FromDays(1);
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Claims;
|
||||
using System.Security.Principal;
|
||||
using System.Text;
|
||||
|
@ -9,24 +8,23 @@ using Microsoft.Extensions.Options;
|
|||
using Microsoft.IdentityModel.Tokens;
|
||||
using Ombi.Auth;
|
||||
using Ombi.Core.IdentityResolver;
|
||||
using Ombi.Core.Models;
|
||||
|
||||
namespace Ombi
|
||||
{
|
||||
public partial class Startup
|
||||
{
|
||||
|
||||
public SymmetricSecurityKey signingKey;
|
||||
private void ConfigureAuth(IApplicationBuilder app)
|
||||
public SymmetricSecurityKey SigningKey;
|
||||
private void ConfigureAuth(IApplicationBuilder app, IOptions<TokenAuthenticationOptions> options)
|
||||
{
|
||||
|
||||
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("secretkey_secretkey123!"));
|
||||
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(options.Value.SecretKey));
|
||||
|
||||
var tokenProviderOptions = new TokenProviderOptions
|
||||
{
|
||||
Path = "/api/v1/token/",
|
||||
Audience = "DemoAudience",
|
||||
Issuer = "DemoIssuer",
|
||||
Path = options.Value.TokenPath,
|
||||
Audience = options.Value.Audience,
|
||||
Issuer = options.Value.Issuer,
|
||||
SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
|
||||
IdentityResolver = GetIdentity
|
||||
};
|
||||
|
@ -38,10 +36,10 @@ namespace Ombi
|
|||
IssuerSigningKey = signingKey,
|
||||
// Validate the JWT Issuer (iss) claim
|
||||
ValidateIssuer = true,
|
||||
ValidIssuer = "DemoIssuer",
|
||||
ValidIssuer = options.Value.Issuer,
|
||||
// Validate the JWT Audience (aud) claim
|
||||
ValidateAudience = true,
|
||||
ValidAudience = "DemoAudience",
|
||||
ValidAudience = options.Value.Audience,
|
||||
// Validate the token expiry
|
||||
ValidateLifetime = true,
|
||||
// If you want to allow a certain amount of clock drift, set that here:
|
||||
|
|
|
@ -13,6 +13,8 @@ using Microsoft.AspNetCore.StaticFiles;
|
|||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Ombi.Auth;
|
||||
using Ombi.DependencyInjection;
|
||||
using Ombi.Mapping;
|
||||
using Ombi.Schedule;
|
||||
|
@ -69,6 +71,7 @@ namespace Ombi
|
|||
services.AddScoped<IPrincipal>(sp => sp.GetService<IHttpContextAccessor>().HttpContext.User);
|
||||
|
||||
|
||||
services.Configure<TokenAuthenticationOptions>(Configuration.GetSection("TokenAuthentication"));
|
||||
|
||||
services.AddHangfire(x =>
|
||||
{
|
||||
|
@ -99,7 +102,7 @@ namespace Ombi
|
|||
var jobSetup = (IJobSetup)app.ApplicationServices.GetService(typeof(IJobSetup));
|
||||
jobSetup.Setup();
|
||||
|
||||
ConfigureAuth(app);
|
||||
ConfigureAuth(app, (IOptions<TokenAuthenticationOptions>)app.ApplicationServices.GetService(typeof(IOptions<TokenAuthenticationOptions>)));
|
||||
|
||||
var provider = new FileExtensionContentTypeProvider();
|
||||
provider.Mappings[".map"] = "application/octet-stream";
|
||||
|
|
|
@ -5,10 +5,11 @@
|
|||
"Default": "Warning"
|
||||
}
|
||||
},
|
||||
"Version": "{{VERSIONNUMBER}}",
|
||||
"TokenAuthentication": {
|
||||
"SecretKey": "secretkey_secretkey123!",
|
||||
"Issuer": "DemoIssuer",
|
||||
"Audience": "DemoAudience",
|
||||
"SecretKey": "OmbiKey",
|
||||
"Issuer": "OmbiIssuer",
|
||||
"Audience": "OmbiAudience",
|
||||
"TokenPath": "/api/v1/token/",
|
||||
"CookieName": "access_token"
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ enum envs {
|
|||
live = 2
|
||||
}
|
||||
|
||||
var envVar = '{something}';
|
||||
var envVar = '{{ENVIRONMENT}}';
|
||||
var env = envs.local;
|
||||
if (envs[envVar]) {
|
||||
env = envs[envVar];
|
||||
|
|
|
@ -3,7 +3,6 @@ import { Router } from '@angular/router';
|
|||
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { StatusService } from '../services/status.service';
|
||||
import { IdentityService } from '../services/identity.service';
|
||||
import { NotificationService } from '../services/notification.service';
|
||||
|
||||
@Component({
|
||||
|
@ -12,7 +11,7 @@ import { NotificationService } from '../services/notification.service';
|
|||
templateUrl: './login.component.html',
|
||||
})
|
||||
export class LoginComponent {
|
||||
constructor(private authService: AuthService, private router: Router, private notify: NotificationService, private status: StatusService, private identityService: IdentityService) {
|
||||
constructor(private authService: AuthService, private router: Router, private notify: NotificationService, private status: StatusService) {
|
||||
this.status.getWizardStatus().subscribe(x => {
|
||||
if (!x.result) {
|
||||
this.router.navigate(['Wizard']);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue