This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,228 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Linq;
using System.Web;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core.ConnectionType;
using Kreta.Core.Logic;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.Util;
using Kreta.Enums;
using Kreta.Framework;
using Kreta.Framework.Security;
using Newtonsoft.Json;
namespace Kreta.BusinessLogic.Security
{
public class AuthenticationHelper : LogicBase
{
public AuthenticationHelper(IConnectionType connectionType) : base(connectionType) { }
private const string TokenParameterName = "token";
public AuthenticationInfo GetAuthenticationInfo(LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
{
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
{
return GetAuthenticationInfo(dalHandler, loginInfo, intezmenyiDictionaryEnvironmentName);
});
}
private AuthenticationInfo GetAuthenticationInfo(IDalHandler dalHandler, LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
{
List<string> szerepkorok = GetSzerepkorok(dalHandler, loginInfo, intezmenyiDictionaryEnvironmentName);
return new AuthenticationInfo
{
InstituteCode = loginInfo.IntezmenyAzonosito.Replace("-eugyintezes", string.Empty),
InstituteUserId = loginInfo.FelhasznaloId,
InstituteUserUniqueId = loginInfo.FelhasznaloEgyediAzonosito,
InstituteUserIdpUniqueId = loginInfo.FelhasznaloIdpEgyediAzonosito,
TutelaryIdpUniqueId = loginInfo.GondviseloIdpEgyediAzonosito,
TutelaryId = loginInfo.GondviseloId,
TutelaryUniqueId = loginInfo.GondviseloEgyediAzonosito,
SchoolYearId = loginInfo.AktivTanevId,
SchoolYearUniqueId = loginInfo.AktivTanevEgyediAzonosito.HasValue ? loginInfo.AktivTanevEgyediAzonosito.ToString() : null,
UserName = loginInfo.BelepesiNev,
Name = loginInfo.GondviseloId.HasValue ? loginInfo.GondviseloNeve : loginInfo.NyomtatasiNev,
Roles = NormalizeRoles(szerepkorok).ToArray(),
EmailAddress = loginInfo.ElsodlegesEmailCim
};
}
public string CreateUrl(string baseUrl, string key, string intezmenyiDictionaryEnvironmentName)
{
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
{
AuthenticationInfo authenticationInfo = GetAuthenticationInfo(dalHandler, UserContext.Instance.LoginInfo, intezmenyiDictionaryEnvironmentName);
return CreateUrl(baseUrl, authenticationInfo, key);
});
}
private List<string> GetSzerepkorok(IDalHandler dalHandler, LoginInfo loginInfo, string intezmenyiDictionaryEnvironmentName)
{
List<string> szerepkorok = new List<string>();
var helper = new FelhasznaloHelper(new DalHandlerConnectionType(ConnectionType, dalHandler));
Dictionary<SzerepkorTipusEnum, string> felhasznaloiSzerepkorok = helper.GetFelhasznaloiSzerepkorok(intezmenyiDictionaryEnvironmentName);
foreach (SzerepkorTipusEnum szerepkorTipus in felhasznaloiSzerepkorok.Keys)
{
szerepkorok.AddRange(helper.GetFelhasznaloiJogosultsagok(FelhasznaloId, (int)szerepkorTipus));
}
if (loginInfo.GondviseloId.HasValue)
{
var isCsokkentettGondviselo = dalHandler.Felhasznalo().IsCsokkentettGondviselo(loginInfo.GondviseloId.Value, IntezmenyId, TanevId);
if (isCsokkentettGondviselo)
{
// ha csökkentett gondviselő, akkor nem lehet semmilyen más joga!
szerepkorok = new List<string> { KretaClaimPackages.CsokkentettGondviselo.ClaimValue };
}
else
{
szerepkorok.Add(KretaClaimPackages.Gondviselo.ClaimValue);
DataSet SZMKOsztalyok = dalHandler.EugyintezesDal().GetSZMKOsztalyok(loginInfo.GondviseloId.Value);
if (SZMKOsztalyok.Tables[0].Rows.Count != 0)
{
szerepkorok.Add(KretaClaimPackages.SZMKKepviselo.ClaimValue);
}
}
}
else
{
var ds = dalHandler.Alkalmazott().GetInfoForLoginAlkalmazott(loginInfo.FelhasznaloId, loginInfo.SelectedTanevId);
if (ds.Tables[0].Rows.Count > 0)
{
szerepkorok.Add(KretaClaimPackages.Alkalmazott.ClaimValue);
var fokuszEnabled = new List<int> { (int)VezetoiOraszamokTipusEnum.Intezmenyvezeto, (int)VezetoiOraszamokTipusEnum.IntezmenyvezetoHelyettes };
if (fokuszEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_VEZETOIORASZAMOK"])))
{
szerepkorok.Add(KretaClaimPackages.FokuszMonitoring.ClaimValue);
}
var iskolaorEnabled = new List<int> { (int)MunkakorTipusEnum.iskolaor };
if (iskolaorEnabled.Contains(SDAConvert.ToInt32(ds.Tables[0].Rows[0]["C_MUNKAKORTIPUSA"])))
{
szerepkorok.Add(KretaClaimPackages.IskolaOr.ClaimValue);
}
}
}
if (loginInfo.BelepesiNev.Equals(Core.Constants.SpecialUserName.KretaAdminisztratorUserName, StringComparison.OrdinalIgnoreCase))
{
szerepkorok.Add(KretaClaimPackages.Alkalmazott.ClaimValue);
}
return szerepkorok;
}
private static string[] s_allowedRoles = new string[]
{
KretaClaimPackages.Adminisztrator.ClaimValue,
KretaClaimPackages.eUgyintezo.ClaimValue,
KretaClaimPackages.Alairo.ClaimValue,
KretaClaimPackages.Penztaros.ClaimValue,
KretaClaimPackages.PenzugyiAdmin.ClaimValue,
KretaClaimPackages.BelepokartyaAdmin.ClaimValue,
KretaClaimPackages.LeltarConcerned.ClaimValue,
KretaClaimPackages.Tanar.ClaimValue,
KretaClaimPackages.Osztalyfonok.ClaimValue,
KretaClaimPackages.Tanulo.ClaimValue,
KretaClaimPackages.Gondviselo.ClaimValue,
KretaClaimPackages.CsokkentettGondviselo.ClaimValue,
KretaClaimPackages.SZMKKepviselo.ClaimValue,
KretaClaimPackages.EtkezesiAdmin.ClaimValue,
KretaClaimPackages.EtkezesiEllenorzo.ClaimValue,
KretaClaimPackages.TeremberletJelenletEllenorzo.ClaimValue,
KretaClaimPackages.Alkalmazott.ClaimValue,
KretaClaimPackages.IskolaEgeszsegugyiKoordinator.ClaimValue,
KretaClaimPackages.Vedono.ClaimValue,
KretaClaimPackages.Iskolaorvos.ClaimValue,
KretaClaimPackages.IskolaEgeszsegugyiAsszisztens.ClaimValue,
KretaClaimPackages.IskolaEgeszsegugyiLekerdezo.ClaimValue,
KretaClaimPackages.GazdasagiUgyintezo.ClaimValue,
KretaClaimPackages.FokuszMonitoring.ClaimValue,
KretaClaimPackages.IskolaOr.ClaimValue,
KretaClaimPackages.Konyvtaros.ClaimValue,
KretaClaimPackages.FELTAR_EsetKezelo.ClaimValue,
KretaClaimPackages.FELTAR_EszkozMenedzser.ClaimValue,
KretaClaimPackages.KerdoivKitolto_KerdoivKezelo.ClaimValue,
KretaClaimPackages.Dualis_Admin.ClaimValue,
KretaClaimPackages.FELTAR_EsetJovahagyo.ClaimValue,
KretaClaimPackages.FELTAR_EsetKozremukodo.ClaimValue,
KretaClaimPackages.FELTAR_Munkavegzo.ClaimValue,
KretaClaimPackages.FELTAR_SzerzodesMenedzser.ClaimValue,
};
private static List<string> NormalizeRoles(List<string> roles)
{
var normalizedRoles = new List<string>(roles);
//sajnos a Gondviselo megkapja a Tanulo-t is, ezt itt kivesszük (a rendes megoldás az lesz, hogy a Gondviselo nem kapja meg belépéskor a Tanulo-t)
if (normalizedRoles.Contains(KretaClaimPackages.Gondviselo.ClaimValue))
{
normalizedRoles.Remove(KretaClaimPackages.Tanulo.ClaimValue);
}
normalizedRoles = normalizedRoles.Where(role => s_allowedRoles.Contains(role)).Distinct().ToList();
return normalizedRoles;
}
private static string CreateUrl(string baseUrl, AuthenticationInfo authenticationInfo, string key)
{
if (string.IsNullOrWhiteSpace(baseUrl))
{
throw new ArgumentException(nameof(baseUrl));
}
if (authenticationInfo == null)
{
throw new ArgumentNullException(nameof(authenticationInfo));
}
if (string.IsNullOrWhiteSpace(key))
{
throw new ArgumentException(nameof(key));
}
string token = JsonConvert.SerializeObject(authenticationInfo);
string encryptedToken = UrlLogic.Encrypt(token, key);
var builder = new UriBuilder(baseUrl);
if (string.IsNullOrWhiteSpace(builder.Query))
{
builder.Query = $"{TokenParameterName}={encryptedToken}";
}
else
{
NameValueCollection query = HttpUtility.ParseQueryString(builder.Query);
query.Add(TokenParameterName, encryptedToken);
builder.Query = query.ToString();
}
return builder.ToString();
}
}
}

View file

@ -0,0 +1,35 @@
using System;
namespace Kreta.BusinessLogic.Security
{
public class AuthenticationInfo
{
public string InstituteCode { get; set; }
public int InstituteUserId { get; set; }
public string InstituteUserUniqueId { get; set; }
public Guid InstituteUserIdpUniqueId { get; set; }
public Guid? TutelaryIdpUniqueId { get; set; }
public int? TutelaryId { get; set; }
public string TutelaryUniqueId { get; set; }
public int? SchoolYearId { get; set; }
public string SchoolYearUniqueId { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string Name { get; set; }
public string[] Roles { get; set; }
public DateTime IssuedAt { get; } = DateTime.Now;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,107 @@
namespace Kreta.BusinessLogic.Security
{
public static class KretaClaimTypes
{
public const string FelhasznaloId = "https://kreta.hu/felhasznaloid";
public const string FelhasznaloGuid = "https://kreta.hu/felhasznaloguid";
public const string FelhasznaloIdpEgyediAzonosito = "https://kreta.hu/felhasznaloidpegyediazonosito";
public const string GondviseloIdpEgyediAzonosito = "https://kreta.hu/gondviseloidpegyediazonosito";
public const string SessionId = "https://kreta.hu/sessionid";
public const string FelhasznaloNev = "https://kreta.hu/felhasznalonev";
public const string VezetekNev = "https://kreta.hu/VezetekNev";
public const string Utonev = "https://kreta.hu/Utonev";
public const string SzuletesiDatum = "https://kreta.hu/SzuletesiDatum";
public const string SzuletesiHely = "https://kreta.hu/SzuletesiHely";
public const string AnyjaNeve = "https://kreta.hu/AnyjaNeve";
public const string FelhelySzuro = "https://kreta.hu/FelhelySzuro";
public const string IsBlindMode = "https://kreta.hu/IsBlindMode";
public const string OrganizationName = "https://kreta.hu/OrganizationName";
public const string OrganizationShortName = "https://kreta.hu/OrganizationShortName";
public const string OrganizationCode = "https://kreta.hu/OrganizationCode";
public const string OrganizationFullAddress = "https://kreta.hu/OrganizationFullAddress";
public const string JustLEPOrganization = "https://kreta.hu/justleporganization";
public const string BelepesiNev = "https://kreta.hu/BelepesiNev";
//public const string NeedNewMessageCountRefresh = "https://kreta.hu/NeedNewMessageCountRefresh";
//public const string NewMessageCount = "https://kreta.hu/NewMessageCount";
public const string JelszotKotelezoValtoztatni = "https://kreta.hu/JelszotKotelezoValtoztatni";
public const string FelhasznaloSzerepkorok = "https://kreta.hu/UserRoles";
public const string KretaFelhasznaloSzerepkor = "https://kreta.hu/KretaUserRole";
public const string FelhasznaloJogok = "https://kreta.hu/FelhasznaloJogok";
public const string LCID = "https://kreta.hu/LCID";
public const string LanguageCode = "https://kreta.hu/LanguageCode";
public const string LanguageIndex = "https://kreta.hu/LanguageIndex";
public const string GondviseloId = "https://kreta.hu/gondviseloid";
public const string GondviseloNeve = "https://kreta.hu/GondviseloNeve";
public const string Package = "https://kreta.hu/kretapackages";
public const string PackageCacheHash = "https://kreta.hu/kretaPackageCacheHash";
public const string Resource = "https://kreta.hu/kretaresources";
public const string FeladatKategoriakAktiv = "https://kreta.hu/FeladatKategoriakAktiv";
public const string FeladatKategoriakKovetkezo = "https://kreta.hu/FeladatKategoriakKovetkezo";
public const string AktivTanevID = "https://kreta.hu/AktivTanevID";
public const string AktivTanevNev = "https://kreta.hu/AktivTanevNev";
public const string IntezmenyId = "https://kreta.hu/intezmenyid";
public const string IntezmenyAzonosito = "https://kreta.hu/intezmenyazonosito";
public const string IntezmenyGuid = "https://kreta.hu/intezmenyguid";
public const string IntezmenytValasztott = "https://kreta.hu/intezmenyvalasztott";
public const string IsKlebelsberg = "https://kreta.hu/IsKlebelsberg";
public const string EszkozKezelesEnabled = "https://kreta.hu/EszkozKezelesEnabled";
public const string FeltarAlkalmazottEnabled = "https://kreta.hu/FeltarAlkalmazottEnabled";
public const string FeltarGondviseloEnabled = "https://kreta.hu/FeltarGondviseloEnabled";
public const string LicenceDatum = "https://kreta.hu/LicenceDatum";
public const string KliensTipus = "https://kreta.hu/KliensTipus";
public const string IsFullKretaVerzio = "https://kreta.hu/IsFullKretaVerzio";
public const string IsBeiratkozasVeglegesitve = "https://kreta.hu/IsBeiratkozasVeglegesitve";
public const string IsAlkalmazottPedagogus = "https://kreta.hu/IsAlkalmazottPedagogus";
public const string KovTanevID = "https://kreta.hu/KovTanevID";
public const string PrevTanevID = "https://kreta.hu/PrevTanevID";
public const string AntiForgeryToken = "https://kreta.hu/AntiForgeryToken";
public const string SelectedTanevID = "https://kreta.hu/SelectedTanevID";
public const string NemNaplozottTanorakCount = "https://kreta.hu/NemNaplozottTanorakCount";
public const string IsAktivUzenetekMenu = "https://kreta.hu/isAktivUzenetekMenu";
public const string CsokkentettTanuloLEP = "https://kreta.hu/CsokkentettTanuloLEP";
public const string IsSzirIntezmeny = "https://kreta.hu/IsSzirIntezmeny";
public const string IsSelectedTanev20_21OrLater = "https://kreta.hu/IsSelectedTanev20_21OrLater";
public const string IsSelectedTanev21_22OrLater = "https://kreta.hu/IsSelectedTanev21_22OrLater";
public const string IsSelectedTanevIsElozo = "https://kreta.hu/IsSelectedTanevIsElozo";
public const string IsArchivIntezmeny = "https://kreta.hu/IsArchivIntezmeny";
public const string IsArchivAdminUser = "https://kreta.hu/IsArchivAdminUser";
public const string IsSzakkepzoIntezmeny = "https://kreta.hu/IsSzakkepzoIntezmeny";
public const string IsNszfhIntezmeny = "https://kreta.hu/IsNszfhIntezmeny";
public const string IsPortas = "https://kreta.hu/IsPortas";
public const string IntezmenyiDictionaryEnvironmentName = "https://kreta.hu/IntezmenyiDictionaryEnvironmentName";
}
public static class KretaClaimActions
{
public const string FullAccess = "fullaccess";
}
public enum KretaSecurityActions
{
Demand,
Deny
}
}