kreta/KretaWeb/Classes/LoginManager.cs
2024-03-13 00:33:46 +01:00

295 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Security.Claims;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Client.Eugyintezes;
using Kreta.Client.Eugyintezes.Configuration;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Framework;
using Kreta.Framework.Security;
using Kreta.Resources;
using Kreta.Web.Security;
namespace Kreta.Web.Classes
{
public class LoginManager : IDisposable
{
public static string OrganizationIdentifier => CommonUtils.GetOrganizationIdentifier();
private LoginInfo GetLoginInfo(string loginName, string password, string clientIp)
{
var loginInfo = new FelhasznaloBelepesHelper(new OrganizationConnectionType(0, 0, OrganizationIdentifier, 0)).AuthenticateUser(loginName, password);
loginInfo.ClientIP = clientIp;
return loginInfo;
}
public LoginInfo Login(LoginInfo loginInfo)
{
loginInfo.SessionID = Guid.NewGuid().ToString();
KretaServer.KretaServer.Instance.SessionManager.CreateSession(loginInfo);
if (ClaimManager.GetStatusClaimSigninEvent() == false)
{
ClaimManager.ClaimSignin += ClaimManager_ClaimSignin;
}
ClaimsIdentity claimIdentity = ClaimManager.SignIn(loginInfo);
if (claimIdentity.IsAuthenticated)
{
var connectionType = new SessionConnectionType(loginInfo.SessionID, loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId);
new FelhasznaloHelper(connectionType).UpdateLastLogin(loginInfo.BelepesiNev);
SDAServer.Instance.Logger.LoginSuccess(loginInfo);
}
return loginInfo;
}
public ClaimsIdentity LoginByIdp(string userName, string clientIP)
{
var loginInfo = new FelhasznaloBelepesHelper(new OrganizationConnectionType(0, 0, OrganizationIdentifier, 0)).GetLoginInfo(userName);
loginInfo.SessionID = Guid.NewGuid().ToString();
loginInfo.ClientIP = clientIP;
KretaServer.KretaServer.Instance.SessionManager.CreateSession(loginInfo);
if (ClaimManager.GetStatusClaimSigninEvent() == false)
{
ClaimManager.ClaimSignin += ClaimManager_ClaimSignin;
}
ClaimsIdentity claimIdentity = ClaimManager.SignIn(loginInfo, true);
if (claimIdentity.IsAuthenticated)
{
var connectionType = new SessionConnectionType(loginInfo.SessionID, loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId);
new FelhasznaloHelper(connectionType).UpdateLastLogin(loginInfo.BelepesiNev);
SDAServer.Instance.Logger.LoginSuccess(loginInfo);
}
return claimIdentity;
}
private void ClaimManager_ClaimSignin(object sender, ClaimSigninEventArgs e)
{
SetUserData(e.Claims, e.LoginInfo);
}
/// <summary>
/// ellenorzi, hogy jók e a bejelentkezési adatok
/// és a logininfo-t eltárolja későbbi felhasználásra
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="userHostAddress"></param>
/// <returns></returns>
public LoginInfo CheckLogin(string userName, string password, string userHostAddress)
{
LoginInfo loginInfo = null;
try
{
loginInfo = GetLoginInfo(userName.ToUpper(), password, userHostAddress);
}
catch
{
if (ApplicationData.KretaDebug)
{
throw;
}
}
return loginInfo;
}
public void LogOut()
{
ClaimManager.SignOut();
}
public IsSuccessResponseCo GondviseloJelszoIgenyles(GondviseloJelszoIgenyloCo co)
{
var connectionType = new OrganizationConnectionType(ClaimData.FelhasznaloId, CommonUtils.GetIntezmenyId(ClaimData.FelhasznaloId), OrganizationIdentifier, CommonUtils.GetAktualisTanevId(ClaimData.FelhasznaloId));
var intezmenyHelper = new IntezmenyHelper(connectionType);
var intezmenyCo = intezmenyHelper.GetAktivIntezmenyNevCim();
var ds = new TanuloHelper(connectionType).GetGondviselokAdataiByOktatasiAzonosito(co.OktatasiAzonosito);
if (ds.Tables[0].Rows.Count > 0)
{
var tanuloId = ds.Tables[0].Rows[0].Field<int>("TanuloId");
var tanevId = ds.Tables[0].Rows[0].Field<int>("TanevId");
var intezmenyId = ds.Tables[0].Rows[0].Field<int>("IntezmenyId");
connectionType = new OrganizationConnectionType(ClaimData.FelhasznaloId, intezmenyId, OrganizationIdentifier, tanevId);
var jelszoModositasLinkHelper = new JelszoModositasLinkHelper(connectionType);
foreach (DataRow row in ds.Tables[0].Rows)
{
var gondviseloNevDBben = row.Field<string>("C_NEV");
var gondviseloEmailDBben = row.Field<string>("C_EMAILCIM");
var gondviseloEmailGuidDBben = SDAConvert.ToNullableGuid(row["C_GUID"]);
var gondviseloId = row.Field<int?>("GondviseloId");
if (gondviseloId.IsEntityId() && gondviseloEmailDBben?.Trim().ToLower() == co.GondviseloEmail?.Trim().ToLower() && gondviseloNevDBben?.Trim().ToLower() == co.GondviseloNev?.Trim().ToLower())
{
//ha minden jó, sikerült beazonosítani a gondviselőt - link kiküldése
var message = string.Format(EmailResource.SikeresGondviseloAzonositasEmail, gondviseloNevDBben, intezmenyCo.Nev, intezmenyCo.IntezmenyCim, CommonUtils.GetIntezmenyUrl(intezmenyCo.IntezmenyAzonosito), "{0}");
jelszoModositasLinkHelper.BeazonositottGondvilseoLinkGeneralasEsKuldes(tanuloId, gondviseloId, gondviseloEmailDBben, message, gondviseloEmailGuidDBben);
return new IsSuccessResponseCo(true, string.Format(ErrorResource.SikeresGondviseloAzonositas, co.GondviseloNev));
}
}
//ha csak okt.azon jó - csökkentett gondviselő létrhezozása, felhasznalobelepes nélkül, link kiküldése
jelszoModositasLinkHelper.UjCsokkentettGondviseloLinkGeneralasEsKuldes(co, tanuloId, tanevId, intezmenyId, intezmenyCo);
intezmenyHelper.ErtesitesekCsokkentettLetrehozasarol(tanuloId, intezmenyCo);
return new IsSuccessResponseCo(true, string.Format(AdminisztracioResource.CsokkentettGondviseloLetrehozasFeedback, co.GondviseloNev, intezmenyCo.Nev, intezmenyCo.IntezmenyCim));
}
//ha semmi nem jó - "keresse fel az intézményt"
return new IsSuccessResponseCo(false, string.Format(ErrorResource.GondviseloAzonositasNemSikerultKeresseFelAzIntezmenyt, co.GondviseloNev, intezmenyCo.Nev, intezmenyCo.IntezmenyCim));
}
private void ErtesitesekCsokkentettLetrehozasarol(int tanuloId, IntezmenyNevCimCo intezmenyCo)
{
}
private void CsokkentettGondviseloLetrehozasaEsLinkKuldes(JelszoModositasLinkHelper helper, GondviseloJelszoIgenyloCo co, int tanuloId, int tanevId, int intezmenyId, IntezmenyNevCimCo intezmenyCo)
{
helper.UjCsokkentettGondviseloLinkGeneralasEsKuldes(co, tanuloId, tanevId, intezmenyId, intezmenyCo);
}
private static void SetUserData(List<Claim> claims, LoginInfo loginInfo)
{
var connectionType = new SessionConnectionType(loginInfo.SessionID, loginInfo.FelhasznaloId, 0, loginInfo.IntezmenyAzonosito, 0);
claims.Add(new Claim(KretaClaimTypes.SessionId, loginInfo.SessionID));
claims.Add(new Claim(KretaClaimTypes.BelepesiNev, loginInfo.BelepesiNev));
claims.Add(new Claim(KretaClaimTypes.FelhasznaloId, loginInfo.FelhasznaloId.ToString()));
claims.Add(new Claim(KretaClaimTypes.FelhasznaloGuid, loginInfo.FelhasznaloEgyediAzonosito.ToString()));
claims.Add(new Claim(KretaClaimTypes.FelhasznaloIdpEgyediAzonosito, loginInfo.FelhasznaloIdpEgyediAzonosito.ToString()));
claims.Add(new Claim(KretaClaimTypes.JelszotKotelezoValtoztatni, loginInfo.JelszotKotelezoValtoztatni.ToString()));
claims.Add(new Claim(KretaClaimTypes.Utonev, loginInfo.Utonev));
claims.Add(new Claim(KretaClaimTypes.VezetekNev, loginInfo.Vezeteknev));
claims.Add(new Claim(KretaClaimTypes.FelhasznaloNev, loginInfo.NyomtatasiNev));
claims.Add(new Claim(KretaClaimTypes.IntezmenyAzonosito, loginInfo.IntezmenyAzonosito));
if (loginInfo.GondviseloId.HasValue)
{
claims.Add(new Claim(KretaClaimTypes.GondviseloId, loginInfo.GondviseloId.ToString()));
claims.Add(new Claim(KretaClaimTypes.GondviseloNeve, loginInfo.GondviseloNeve));
claims.Add(new Claim(KretaClaimTypes.GondviseloIdpEgyediAzonosito, loginInfo.GondviseloIdpEgyediAzonosito.ToString()));
}
//Egyéb adatok (általános nyomtatáshoz kell)
claims.Add(new Claim(KretaClaimTypes.SzuletesiDatum, loginInfo.SzuletesiDatum.ToShortDateString()));
claims.Add(new Claim(KretaClaimTypes.SzuletesiHely, loginInfo.SzuletesiHely));
claims.Add(new Claim(KretaClaimTypes.AnyjaNeve, loginInfo.AnyjaNeve));
IntezmenyHelper intezmenyHelper = new IntezmenyHelper(connectionType);
int intezmenyId = intezmenyHelper.GetIntezmenyId();
claims.Add(new Claim(KretaClaimTypes.IntezmenyId, intezmenyId.ToString()));
TanevHelper tanevHelper = new TanevHelper(connectionType);
var aktivTanev = tanevHelper.GetTanevInfo();
claims.Add(new Claim(KretaClaimTypes.AktivTanevID, aktivTanev.Id.ToString()));
claims.Add(new Claim(KretaClaimTypes.SelectedTanevID, aktivTanev.Id.ToString()));
claims.Add(new Claim(KretaClaimTypes.AktivTanevNev, aktivTanev.Nev));
KeyValuePair<int, string> kovTanevek = tanevHelper.GetKovetkezoTanev();
if (kovTanevek.Value != null)
{
claims.Add(new Claim(KretaClaimTypes.KovTanevID, kovTanevek.Key.ToString()));
}
var prevTanevId = tanevHelper.GetPrevTanevId();
if (prevTanevId.IsEntityId())
{
claims.Add(new Claim(KretaClaimTypes.PrevTanevID, prevTanevId.ToString()));
}
connectionType = new SessionConnectionType(loginInfo.SessionID, loginInfo.FelhasznaloId, intezmenyId, loginInfo.IntezmenyAzonosito, aktivTanev.Id);
intezmenyHelper = new IntezmenyHelper(connectionType);
IntezmenyCO adatok = intezmenyHelper.GetIntezmenyiAdatok();
claims.Add(new Claim(KretaClaimTypes.OrganizationName, adatok.Nev));
claims.Add(new Claim(KretaClaimTypes.OrganizationShortName, adatok.RovidNev ?? string.Empty));
claims.Add(new Claim(KretaClaimTypes.OrganizationCode, adatok.OMKod));
claims.Add(new Claim(KretaClaimTypes.OrganizationFullAddress, adatok.Varos + " " + adatok.Kozterulet + " " + adatok.KozteruletJellegNev + " " + adatok.Hazszam));
claims.Add(new Claim(KretaClaimTypes.IsBeiratkozasVeglegesitve, adatok.IsBeiratkozasVeglegesitve.ToString()));
claims.Add(new Claim(KretaClaimTypes.LicenceDatum, adatok.LicenceDatum));
claims.Add(new Claim(KretaClaimTypes.JustLEPOrganization, adatok.IsCsakLepKezelo.ToString()));
claims.Add(new Claim(KretaClaimTypes.IsSzirIntezmeny, adatok.IsSzirIntezmeny.ToString()));
claims.Add(new Claim(KretaClaimTypes.IsArchivIntezmeny, adatok.IsArchivIntezmeny.ToString()));
claims.Add(new Claim(KretaClaimTypes.IsSzakkepzoIntezmeny, adatok.IsSzakkepzo.ToString()));
claims.Add(new Claim(KretaClaimTypes.IsNszfhIntezmeny, intezmenyHelper.IsNszfhIntezmeny().ToString()));
claims.Add(new Claim(KretaClaimTypes.IntezmenyiDictionaryEnvironmentName, intezmenyHelper.GetIntezmenyiDictionaryEnvironmentName()));
claims.Add(new Claim(KretaClaimTypes.IntezmenyGuid, adatok.IntezmenyGuid.ToString()));
var intezmenyConfigHelper = new IntezmenyConfigHelper(connectionType);
bool isKlebelsberg = intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.IsKlebelsberg, IntezmenyConfigTipusEnum.IsEnabled);
claims.Add(new Claim(KretaClaimTypes.IsKlebelsberg, isKlebelsberg.ToString()));
bool eszkozKezelesEnabled = intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.EszkozKezeles, IntezmenyConfigTipusEnum.IsEnabled);
claims.Add(new Claim(KretaClaimTypes.EszkozKezelesEnabled, eszkozKezelesEnabled.ToString()));
bool feltarGondviseloEnabled = intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.FeltarGondviselo, IntezmenyConfigTipusEnum.IsEnabled);
claims.Add(new Claim(KretaClaimTypes.FeltarGondviseloEnabled, feltarGondviseloEnabled.ToString()));
bool feltarAlkalmazottEnabled = intezmenyConfigHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.FeltarAlkalmazott, IntezmenyConfigTipusEnum.IsEnabled);
claims.Add(new Claim(KretaClaimTypes.FeltarAlkalmazottEnabled, feltarAlkalmazottEnabled.ToString()));
KretaTipusEnum verzio = new AdminHelper(connectionType).GetKretaTipus();
claims.Add(verzio == KretaTipusEnum.Teljes_KRETA ? new Claim(KretaClaimTypes.IsFullKretaVerzio, "true") : new Claim(KretaClaimTypes.IsFullKretaVerzio, "false"));
var selectedTanevId = ClaimData.SelectedTanevID ?? aktivTanev.Id;
if (UserContext.Instance != null)
{
UserContext.Instance.SetIntezmenyEsTanev(intezmenyId, aktivTanev.Id, selectedTanevId);
}
var alkalmazottHelper = new AlkalmazottHelper(connectionType);
claims.Add(new Claim(KretaClaimTypes.IsAlkalmazottPedagogus, alkalmazottHelper.IsAlkalmazottPedagogus().ToString()));
claims.Add(new Claim(KretaClaimTypes.IsPortas, alkalmazottHelper.IsPortasMunkakor().ToString()));
//EÜgy kell-e üzenetküldés bekapcsolni
var eugyintezesClientConfiguration = (EugyintezesClientConfiguration)ConfigurationManager.GetSection("EugyintezesClientConfiguration");
if (eugyintezesClientConfiguration.IsUzenetekEnable)
{
EugyintezesClient eUgyClient = new EugyintezesClient(eugyintezesClientConfiguration);
var uzenetekMenuElerheto = eUgyClient.GetUzenetkezelesElerheto(adatok.IntezmenyAzonosito);
claims.Add(new Claim(KretaClaimTypes.IsAktivUzenetekMenu, uzenetekMenuElerheto.ToString()));
}
var isSelectedTanev20_21OrLater = CommonUtils.IsSelectedTanev20_21OrLater(aktivTanev);
claims.Add(new Claim(KretaClaimTypes.IsSelectedTanev20_21OrLater, isSelectedTanev20_21OrLater.ToString()));
var isSelectedTanev21_22OrLater = CommonUtils.IsSelectedTanev21_22OrLater(aktivTanev);
claims.Add(new Claim(KretaClaimTypes.IsSelectedTanev21_22OrLater, isSelectedTanev21_22OrLater.ToString()));
}
public void Dispose()
{
}
}
}