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); } /// /// ellenorzi, hogy jók e a bejelentkezési adatok /// és a logininfo-t eltárolja későbbi felhasználásra /// /// /// /// /// 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("TanuloId"); var tanevId = ds.Tables[0].Rows[0].Field("TanevId"); var intezmenyId = ds.Tables[0].Rows[0].Field("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("C_NEV"); var gondviseloEmailDBben = row.Field("C_EMAILCIM"); var gondviseloEmailGuidDBben = SDAConvert.ToNullableGuid(row["C_GUID"]); var gondviseloId = row.Field("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 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 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(IntezmenyConfigModulEnum.IsKlebelsberg, IntezmenyConfigTipusEnum.IsEnabled); claims.Add(new Claim(KretaClaimTypes.IsKlebelsberg, isKlebelsberg.ToString())); bool eszkozKezelesEnabled = intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.EszkozKezeles, IntezmenyConfigTipusEnum.IsEnabled); claims.Add(new Claim(KretaClaimTypes.EszkozKezelesEnabled, eszkozKezelesEnabled.ToString())); bool feltarGondviseloEnabled = intezmenyConfigHelper.GetIntezmenyConfig(IntezmenyConfigModulEnum.FeltarGondviselo, IntezmenyConfigTipusEnum.IsEnabled); claims.Add(new Claim(KretaClaimTypes.FeltarGondviseloEnabled, feltarGondviseloEnabled.ToString())); bool feltarAlkalmazottEnabled = intezmenyConfigHelper.GetIntezmenyConfig(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() { } } }