[Se]   En

Uppgraderat bloggskript till "Blog System 2.2"

  Annice      2020-11-28      Uppdateringar, C#, ASP.NET Core

Jag har nu uppgraderat C#-skriptet "Blog System 2.0" till version 2.2. Det nya skriptet "Blog System 2.2" finns nu också tillgängligt för nedladdning inne på skriptsidan.

Den ändring som gjorts är att säkerställa att ingen anonym besökare kan direktnavigera till ett inläggs-ID som skulle ha statusen "utkast", d.v.s. ett icke-publicerat blogginlägg.

Autentiseringen i detta skript hanteras huvudsakligen via en middleware som känner av namn på controllers som efterfrågas i varje HTTP-begäran av olika admin-sidor. Med andra ord säkerställer den s.k. auth-servern genom denna middleware att controllers som renderar olika adminsidor inte visar dessa sidor för obehöriga besökare. Nedanstående kodavsnitt som hanterar denna kontroll hittas i skriptfilen "AuthServer.cs" i mappen "Middleware":

public async Task InvokeAsync(HttpContext context, [FromServices] IAuthHandler handler)
{
  string[] paths = { "/Entry", "/Comment", "/Category", "/User" };

  foreach(string path in paths)
  {
    if (!handler.IsLoggedIn() && context.Request.Path.ToString().StartsWith(path))
    {
      context.Response.StatusCode = 401; // Unauthorized.
      context.Response.Redirect(context.Request.Scheme + "://" + context.Request.Host + "/Home/AccessDenied");
      return;
    }
  }

  await _next.Invoke(context);
}


För att säkerställa att dessa controllers dock alltid nås av en inloggad admin anropas samtidigt en s.k. auth-handler-tjänst. Auth-handler-tjänsten kontrollerar i nästa tur om en sessionsvariabel är satt som tillfälligt sparat en admins användar-ID vid en giltig inloggning. Kontrollmetoden som anropas via auth-servern ovan och som alltså kontrollerar om detta sessionsvärde existerar kan vidare hittas i skriptfilen "AuthHandler.cs" i mappen "Services":

public bool IsLoggedIn()
{
  var scope = _scope.CreateScope();
  var context = scope.ServiceProvider.GetService <IHttpContextAccessor>();

  // If user session is set, it means we have a valid login:
  if (context.HttpContext.Session.GetString("UserID") != null)
      return true;
  else
     return false;
}


Den controller som vidare hanterar de publika sidorna i detta bloggsystem heter i nästa tur "HomeController". Det är också den controllern som hanterar varje blogginläggs detaljsida, d.v.s. där man kan läsa ett inlägg i sin helhet samt där besökare kan lämna kommentarer. Då denna controller hanterar dessa detaljsidor oavsett om de är utkast eller publicerade - samt att controllernamnet "Home" inte kontrolleras av auth-servern - behövde alltså en check läggas till i denna controller för att säkerställa att endast adminanvändare kan navigera och se utkastsinlägg. Det gjordes vidare genom att lägga till ett villkor i action-metoden "EntryComments" som renderar detaljsidor enligt kodavsnittet nedan:

[HttpGet]
public IActionResult EntryComments(int? id)
{
  // Catch posted feedback:
  ViewBag.Success = TempData["Success"];
 
  // Check valid admin login if draft entry:
  if (HttpContext.Session.GetString("UserID") == null &&
      _db.BsEntries.Where(e =>e.Id == id && e.IsPublished == false).Any())
  {
    return RedirectToAction(nameof(Index));
  }

(...)


Villkoret i if-satsen ovan kontrollerar nu alltså om admin-sessionen är okänd samtidigt som inläggs-ID:t som efterfrågas är ett utkast. I detta fall kommer i så fall besökaren tolkas som anonym och bara skick (...)

Läs mer »

  Kommentera

Annice.se baseras nu på PHP med Symfony

  Annice      2020-11-22      Uppdateringar, PHP, Symfony, MySQL

Annice.se är nu helt ombyggd så att den i skrivandes stund baseras på webbapplikationsspråket PHP 7.4 utifrån Symfony 5.1.8. Det innebär att all serverlogik har flyttats från min tidigare OutSystems cloud-server till mitt nuvarande webbhotell på One.com som istället för C# alltså kör PHP som serverspråk. Arbetet har vidare medfört en total databasmigrering från en tidigare SQL Server-baserad DBMS till en nuvarande MySQL-baserad med MariaDB.

Anledningen till att jag har valt att bygga om sidan är dels för att hålla serverlogiken så centraliserad som möjligt, dels för att jag vill ha större kontroll över all applikations- samt serverkod. Då OutSystems baseras på Low-Code-utveckling - samt att jag också bara hade en gratisinstans på deras server - innebär det också begränsade utvecklingsmöjligheter. Sedan ska jag inte sticka under stol med att jag i ärlighetens namn tycker det är roligare att utveckla i ren kod. :)

Varför jag nu valt PHP som applikationskod istället för t.ex. C# har dock ingenting att göra med att jag skulle tycka C# är sämre på något sätt. Anledningen är istället att webbhotellet jag hostar sidan på inte har stöd för C#. Vidare har jag hostat hela eller delar av min hemsida på webbhotellet One.com i snart 15 år och alltid varit nöjd med deras tjänster, service samt priser. Följaktligen ser jag helt enkelt ingen anledning till att byta, så cred till One.com!

Liksom C# är PHP ett utvecklingsspråk jag också alltid haft gott intryck av. Faktum är att PHP även är det första programmeringsspråket jag kom i kontakt med när jag började intressera mig för webbutveckling på riktigt i tidig 20-årsålder. Det är också ett språk jag intermittent utvecklat i sedan dess.

När jag började plugga på systemvetarprogrammet på Linköpings universitet, 2013, var dock Java det första programmeringsspråket vi läste där. Det var också då jag för första gången kom i kontakt med objektorienterad programmering, vilket var en typ av kodstruktur jag fick väldigt gott intryck av, strukturerad som jag är. :-] När jag senare upptäckte det objektorienterade språket C# - som enligt mitt tycke känns som en mer clean version av Java - blev väl det i nästa tur lite av ett nytt favoritspråk för mig.

PHP som däremot inte är ett objektorienterat språk från början har dock hållit sig kvar stadigt som ett rent webbutvecklingsspråk genom åren. Med tiden har dock PHP vidareutvecklats till att idag även ha ett fantastiskt bra stöd för ren objektorientering. Och det är väl lite där jag också kommer in på valet av ramverket Symfony.

När jag började göra lite research på ett tänkbart nytt kodupplägg för Annice.se stod det tillslut mellan PHP Symfony och PHP Laravel. Det verkar dock som att mångas omdömen gällande de två ramverken i jämförelse är att Symfony ändå ger bäst detaljkontroll i slutänden. Vidare slog det mig att Symfony-upplägget i grundprincip är slående likt sättet att a (...)

Läs mer »

  Kommentera

Uppgraderat PHP-skriptet "REST API JWT Auth" till version 1.2

  Annice      2020-10-20      Uppdateringar, PHP, REST API

En uppgraderad version av PHP-skriptet "REST API JWT Auth" finns tillgängligt för gratis nedladdning inne på skriptsidan som version 1.2.

Skriptet i fråga är ett litet integrationssystem byggt i HTML5, CSS3, PHP, samt MySQL. Systemintegrationen baseras vidare på REST API:er med JSON web tokens för autentisering av uppdateringsförfrågningar.

För övrigt tillhandahåller skriptet en inloggningsfunktion där en adminanvändare kan logga in och uppdatera sina adminuppgifter, samt en responsiv design med formulärsvalidering.

Till version 1.2 har en endpoint lagts till för att trigga en radering av användarens sparade email i "server 2"-appen när användaren loggar ut från "server 1"-appen.

Mer information och illustrationer såsom sekvensdiagram och dylikt finns vidare via skriptets relaterade README-länk inne på skriptsidan.

  Kommentera

Uppgraderat C#-skript vid namn "Blog System 2.0" tillgängligt

  Annice      2020-10-18      Uppdateringar, C#, ASP.NET Core, Entity Framework Core, T-SQL

Jag har nu uppgraderat och laddat upp en plattformsoberoende version av det tidigare C#-skriptet "Blog System 1.0", vilket nu är tillgängligt för gratis nedladdning som "Blog System 2.0" inne på skriptsidan.

Skriptet är ett databasdrivet bloggsystem baserat på ASP.NET Core och Entity Framework Core och tillhandahåller full CRUD-funktionaliet för en adminanvändare för att kunna skapa och redigera bloggens inlägg, kategorier och kommentarer.

Övriga funktioner som ingår är responsiv design med Bootstrap, sök- och filtreringsfunktion, paginering, klient- och servervalidering, lösenordsåterställning via en tokenlänk, WYSIWYG HTML-editor, etc. Mer information finns via skriptets  relaterade README-länk inne på skriptsidan.

  Kommentera

Nytt C#-skript är uppladdat

  Annice      2020-09-22      Uppdateringar, C#, ASP.NET Core, Entity Framework Core

Ett nytt C#-skript vid namn "Visitor Statistics 1.0" finns nu tillgängligt inne på skriptsidan.

Skriptet kan användas för att registrera besöksstatistik för en applikation för att kunna visa information såsom besökares IP- och värdadresser, samt besökstider, referens-URL:er, etc. Skriptet är vidare byggt i C# ASP.NET Core MVC med Entity Framework Core - databas först med T-SQL.

Övriga kodspråk som använts är HTML5, CSS samt JavaScript med jQuery. Ytterligare använder sig skriptet av Ajax för förbättrade laddnignstider av postad formlärsdata. Mer information såsom setup-guide och diverse illustrationer finns via README-länken inne på skriptsidan.

  Kommentera

Fixad mejlbugg

  Annice      2020-08-14      Uppdateringar

Jag har nu fixat en bugg som gjorde kontaktsidans mejlformulär opålitligt då jag inte alltid mottog mejl p.g.a. av en icke-fungerande SMTP-server. SMTP-servern är hur som helst nu utbytt så att mejl alltid ska nå inkorgen i fortsättningen!

  Kommentera

Nytt inloggningssystem i C#

  Annice      2020-06-23      Uppdateringar, C#, ASP.NET Core, Entity Framework Core

Ett nytt inloggningssystem i C# med stöd för flera adminnivåer baserat på ASP.NET Core Identity och Entity Framework Core finns nu tillgängligt inne på skriptsidan vid namn "IdentityLoginSystem 1.0".

  Kommentera

Nytt integrationsskript i C#

  Annice      2020-04-25      Uppdateringar, C#, ASP.NET Core, REST API

Ett nytt C# ASP.NET Core-integrationsskript vid namn "REST API JWT Auth 1.0" finns nu tillgängligt för nedladdning inne på skriptsidan.

  Kommentera

Nya foton

  Annice      2019-08-27      Uppdateringar, Foto

Jag har nu laddat upp ett par nya foton som finns tillgängliga inna på sidan: Digital fotografering.

  Kommentera

Nytt C#-skript

  Annice      2019-08-25      Uppdateringar, C#

Ett nytt C#-skript finns nu tillgängligt inne på skriptsidan vid namn "MvcNews 1.0".

  Kommentera