1
0
mirror of https://git.teknik.io/Teknikode/Teknik.git synced 2023-08-02 14:16:22 +02:00

Added client side cache for static files.

Fixed upload error not showing during processing.
Renamed default cookie names.
Updated privacy policy to note no Piwik tracking, and new cookie names.
This commit is contained in:
Uncled1023 2018-06-20 23:18:37 -07:00
parent 364898c8c5
commit 175eaa4762
5 changed files with 77 additions and 63 deletions

View File

@ -46,13 +46,8 @@
<ul>
<li><var>TeknikAuth</var> - Stores the authentication ticket for a login session.</li>
<li><var>TeknikTrustedDevice_&lt;username&gt;</var> - Used for determining if the browser has been trusted by the 2-Factor Auth system.</li>
<li><var>__RequestVerificationToken</var> - Validation Token sent with every request to the server for Anti-Forgery purposes.</li>
<li><var>TeknikAntiForgery</var> - Validation Token sent with every request to the server for Anti-Forgery purposes.</li>
</ul>
<h2>Analytics</h2>
<p>
We use <a href="http://piwik.org/">Piwik</a> to track user interaction with the site. We keep it hosted on the server locally, so no analytic data is leaving the server. This will store the first 2 bytes of your IP Address (e.g. 192.168.xxx.xxx) as an identifier. If you do not want to be tracked, enable Do Not Track in your browser (Recommended), or by unchecking below.
</p>
<iframe style="border: 0; height: 200px; width: 600px;" src="@(Config.PiwikConfig.API)index.php?module=CoreAdminHome&action=optOut&language=en"></iframe>
</div>
</div>
<div class="row">
@ -67,7 +62,7 @@
gitFullUrl = gitUrl.ToString();
}
}
<p><i>Last Modified February 15, 2017 - <a href="@gitFullUrl">View History</a></i></p>
<p><i>Last Modified June 20th, 2018 - <a href="@gitFullUrl">View History</a></i></p>
</div>
</div>
</div>

View File

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
using System;
using System.IO;
using System.Threading.Tasks;
@ -55,7 +56,7 @@ namespace Teknik.Controllers
// Get the Favicon
[HttpGet]
[AllowAnonymous]
[ResponseCache(Duration = 31536000, Location = ResponseCacheLocation.Any)]
[ResponseCache(Duration = 60 * 60 * 24, Location = ResponseCacheLocation.Any)]
public IActionResult Favicon([FromServices] IHostingEnvironment env)
{
string imageFile = FileHelper.MapPath(env, Constants.FAVICON_PATH);
@ -66,7 +67,7 @@ namespace Teknik.Controllers
// Get the Logo
[HttpGet]
[AllowAnonymous]
[ResponseCache(Duration = 31536000, Location = ResponseCacheLocation.Any)]
[ResponseCache(Duration = 60 * 60 * 24, Location = ResponseCacheLocation.Any)]
public IActionResult Logo([FromServices] IHostingEnvironment env)
{
string imageFile = FileHelper.MapPath(env, Constants.LOGO_PATH);

View File

@ -49,7 +49,7 @@ namespace Teknik
name: "Default.Logo",
domains: new List<string>() { config.Host, config.ShortenerConfig.ShortenerHost },
subDomains: new List<string>() { "*" },
template: "Logo",
template: "logo.svg",
defaults: new { area = "Default", controller = "Default", action = "Logo" }
);
routes.MapSubdomainRoute(
@ -64,7 +64,7 @@ namespace Teknik
domains: new List<string>() { config.Host, config.ShortenerConfig.ShortenerHost },
subDomains: new List<string>() { "*" },
template: "{url}",
defaults: new { area = "Default", controller = "Default", action = "NotFound" },
defaults: new { area = "Error", controller = "Error", action = "Http404" },
constraints: new { url = "{*url}" }
);
}

View File

@ -384,53 +384,57 @@ function uploadComplete(fileID, key, encrypt, token, evt) {
// Cancel out cancel token
token.callback = null;
var obj = JSON.parse(evt.target.responseText);
if (obj.result != null) {
var itemDiv = $('#upload-panel-' + fileID);
if (itemDiv) {
var name = obj.result.name;
var fullName = obj.result.url;
if (encrypt) {
fullName = fullName + '#' + key;
try {
var obj = JSON.parse(evt.target.responseText);
if (obj.result != null) {
var itemDiv = $('#upload-panel-' + fileID);
if (itemDiv) {
var name = obj.result.name;
var fullName = obj.result.url;
if (encrypt) {
fullName = fullName + '#' + key;
}
var contentType = obj.result.contentType;
var contentLength = obj.result.contentLength;
var deleteUrl = obj.result.deleteUrl;
// Set progress bar
setProgress(fileID, 100, 'progress-bar-success', '', 'Complete');
// Set the panel to success
itemDiv.find('.panel').addClass('panel-success');
// Add the upload details
itemDiv.find('#upload-url').val(name);
itemDiv.find('#upload-link').attr('href', fullName);
itemDiv.find('#upload-link').text(fullName);
itemDiv.find('#upload-contentType').html(contentType);
itemDiv.find('#upload-contentLength').html(contentLength);
// Setup the buttons
linkUploadDelete(itemDiv.find('#delete-link'), deleteUrl);
linkShortenUrl(itemDiv.find('#shortenUrl'), fileID, fullName);
// Hide the progress bar
itemDiv.find('#upload-progress-panel').hide();
// Show the details
itemDiv.find('#upload-link-panel').show();
// Allow actions for all uploads
$('#upload-action-buttons').show();
}
var contentType = obj.result.contentType;
var contentLength = obj.result.contentLength;
var deleteUrl = obj.result.deleteUrl;
// Set progress bar
setProgress(fileID, 100, 'progress-bar-success', '', 'Complete');
// Set the panel to success
itemDiv.find('.panel').addClass('panel-success');
// Add the upload details
itemDiv.find('#upload-url').val(name);
itemDiv.find('#upload-link').attr('href', fullName);
itemDiv.find('#upload-link').text(fullName);
itemDiv.find('#upload-contentType').html(contentType);
itemDiv.find('#upload-contentLength').html(contentLength);
// Setup the buttons
linkUploadDelete(itemDiv.find('#delete-link'), deleteUrl);
linkShortenUrl(itemDiv.find('#shortenUrl'), fileID, fullName);
// Hide the progress bar
itemDiv.find('#upload-progress-panel').hide();
// Show the details
itemDiv.find('#upload-link-panel').show();
// Allow actions for all uploads
$('#upload-action-buttons').show();
}
else {
var errorMessage = 'Unable to Upload File';
if (obj.error != null) {
errorMessage = obj.error.message;
}
setProgress(fileID, 100, 'progress-bar-danger', '', errorMessage);
}
}
else
{
var errorMessage = 'Unable to Upload File';
if (obj.error != null) {
errorMessage = obj.error.message;
}
setProgress(fileID, 100, 'progress-bar-danger', '', errorMessage);
catch {
setProgress(fileID, 100, 'progress-bar-danger', '', 'Unable to Upload File');
}
}

View File

@ -28,6 +28,7 @@ using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Teknik.Security;
using Teknik.Attributes;
using Teknik.Filters;
using Microsoft.Net.Http.Headers;
namespace Teknik
{
@ -77,7 +78,7 @@ namespace Teknik
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
});
// Setup Authentication Service
@ -85,7 +86,7 @@ namespace Teknik
.AddCookie(options =>
{
options.Cookie.Domain = null;
options.Cookie.Name = "TeknikAuthCore";
options.Cookie.Name = "TeknikAuth";
options.LoginPath = "/User/User/Login";
options.LogoutPath = "/User/User/Logout";
options.EventsType = typeof(TeknikCookieAuthenticationEvents);
@ -100,7 +101,7 @@ namespace Teknik
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
options.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
});
// Sessions
@ -108,6 +109,9 @@ namespace Teknik
services.AddMemoryCache();
services.AddSession();
// Set the anti-forgery cookie name
services.AddAntiforgery(options => options.Cookie.Name = "TeknikAntiForgery");
// Core MVC
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
@ -147,10 +151,6 @@ namespace Teknik
//app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
//app.UseHsts();
}
// Performance Monitor the entire request
app.UsePerformanceMonitor();
@ -164,12 +164,26 @@ namespace Teknik
// Cache Responses
app.UseResponseCaching();
// Force a HTTPS redirection (301)
app.UseHttpsRedirection();
app.UseStaticFiles();
// Setup static files anc cache them client side
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
const int durationInSeconds = 60 * 60 * 24;
ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public,max-age=" + durationInSeconds;
}
});
// Enable Cookie Policy
app.UseCookiePolicy();
// Authorize all the things!
app.UseAuthentication();
// And finally, let's use MVC
app.UseMvc(routes =>
{
routes.BuildRoutes(config);