kreta/Kreta.BusinessLogic/Helpers/FelhasznaloBelepesHelper.cs
2024-03-13 00:33:46 +01:00

287 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
using Kreta.Framework;
using Kreta.Framework.Security;
using Kreta.Framework.Security.PasswordCrypting;
using Kreta.Resources;
using SDA.Kreta.Entities;
namespace Kreta.BusinessLogic.Helpers
{
public class FelhasznaloBelepesHelper : LogicBase
{
public FelhasznaloBelepesHelper(IConnectionType connectionType) : base(connectionType) { }
public LoginInfo AuthenticateUser(string bejelentkezesiNev, string plainPassword)
{
return Dal.CustomConnection.Run(ConnectionType, h =>
{
var loginInfo = GetLoginInfo(h, bejelentkezesiNev);
if (loginInfo.FelhasznaloId <= 0)
{
throw new UserNotFoundException(bejelentkezesiNev);
}
loginInfo.PasswordState = !loginInfo.JelszotKotelezoValtoztatni ? PasswordState.VALID : PasswordState.EXPIRED_BY_DATABASE;
#if !DEBUG
bool isInvalidPassword = string.IsNullOrWhiteSpace(plainPassword);
if (!isInvalidPassword)
{
if (!string.IsNullOrWhiteSpace(loginInfo.NeptunNaploJelszo))
{
isInvalidPassword = loginInfo.NeptunNaploJelszo != BasePasswordCrypter.EncodePasswordMD5(plainPassword);
}
else
{
isInvalidPassword = loginInfo.KodoltJelszo != BasePasswordCrypter.EncodePasswordSHA1(plainPassword, loginInfo.So);
}
}
if (isInvalidPassword)
{
// Első lépés, a jelszó rossz.
// Egyik algoritmus sem volt sikeres.
loginInfo.MeghiusultBelepes += 1;
h.FelhasznaloBelepes().UpdateMeghiusultBelepesek(loginInfo.BelepesId, loginInfo.MeghiusultBelepes);
loginInfo.PasswordState = PasswordState.INVALID;
}
else
{
// Első lépes, a jelszó jó, beengedjük.
h.FelhasznaloBelepes().UpdateMeghiusultBelepesek(loginInfo.BelepesId, 0);
loginInfo.PasswordState = PasswordState.VALID;
}
#endif
return loginInfo;
});
}
public void GrantLogin(int felhasznaloId, string bejelentkezesiNev, string plainPassword, int? gondviseloId = null, bool storedplain = false, bool kotelezoValtoztatni = false)
{
Dal.CustomConnection.Run(ConnectionType, h =>
{
h.FelhasznaloBelepes().GrantLogin(felhasznaloId, bejelentkezesiNev, plainPassword, TanevId, gondviseloId, storedplain, IntezmenyId, kotelezoValtoztatni);
});
}
public LoginInfo GetLoginInfo(string bejelentkezesiNev, Guid? idpUniqueId = null)
{
return Dal.CustomConnection.Run(ConnectionType, h =>
{
return GetLoginInfo(h, bejelentkezesiNev, idpUniqueId);
});
}
private LoginInfo GetLoginInfo(IDalHandler h, string bejelentkezesiNev, Guid? idpUniqueId = null)
{
if (idpUniqueId.HasValue)
{
bejelentkezesiNev = h.Felhasznalo().GetBejelentkezesiNev(idpUniqueId.Value);
}
var belepes = GetBelepes(h, bejelentkezesiNev);
if (string.IsNullOrEmpty(belepes.Jelszo) && string.IsNullOrEmpty(belepes.NeptunNaploJelszo))
{
throw new DataIntegrityException(ErrorResource.NemLetezikAFelhasznalohozJelszo);
}
var elsodlegesEmailCim = belepes.GondviseloId > 0 ?
belepes.Gondviselo.Email.FirstOrDefault(x => !x.Torolt)?.EmailCim :
belepes.Felhasznalo.Email.FirstOrDefault(x => x.Alapertelmezett && !x.Torolt)?.EmailCim;
var loginInfo = new LoginInfo
{
UniqueIdentifier = belepes.FelhasznaloId,
FelhasznaloId = belepes.FelhasznaloId,
BelepesiNev = belepes.BejelentkezesiNev,
KodoltJelszo = belepes.Jelszo,
So = belepes.So,
NeptunNaploJelszo = belepes.NeptunNaploJelszo,
Vezeteknev = belepes.Felhasznalo.Vezeteknev,
Utonev = belepes.Felhasznalo.Utonev,
NyomtatasiNev = belepes.Felhasznalo.NyomtatasiNev,
AnyjaNeve = belepes.Felhasznalo.AnyjaNeve,
SzuletesiDatum = belepes.Felhasznalo.SzuletesiDatum,
SzuletesiHely = belepes.Felhasznalo.SzuletesiHely ?? string.Empty,
GondviseloId = belepes.GondviseloId > 0 ? belepes.GondviseloId : new int?(),
GondviseloNeve = belepes.GondviseloId > 0 ? belepes.Gondviselo.Nev : string.Empty,
FelhasznaloEgyediAzonosito = belepes.Felhasznalo.EgyediAzonosito,
FelhasznaloIdpEgyediAzonosito = belepes.Felhasznalo.IdpEgyediAzonosito,
GondviseloIdpEgyediAzonosito = belepes.GondviseloId > 0 ? (Guid?)belepes.Gondviselo.IdpEgyediAzonosito : null,
GondviseloEgyediAzonosito = belepes.GondviseloId > 0 ? belepes.Gondviselo.EgyediAzonosito : null,
IntezmenyId = belepes.IntezmenyId,
AktivTanevId = belepes.TanevId,
SelectedTanevId = belepes.TanevId,
IntezmenyAzonosito = belepes.Intezmeny.Azonosito,
AktivTanevEgyediAzonosito = belepes.Tanev.Sorszam,
IsDeniedSzirIntezmenyUser = IsDeniedSzirIntezmenyUser(belepes),
IsDeniedArchivIntezmenyUser = IsDeniedArchivIntezmenyUser(h, belepes.FelhasznaloId, belepes.IntezmenyId, belepes.TanevId),
ElsodlegesEmailCim = elsodlegesEmailCim,
BelepesId = belepes.ID,
MeghiusultBelepes = belepes.MeghiusultBelepesek.HasValue && belepes.MeghiusultBelepesek.Value != -1 ? belepes.MeghiusultBelepesek.Value : 0
};
if (belepes.UtolsoBelepes.HasValue)
{
loginInfo.UtolsoBelepesIdeje = belepes.UtolsoBelepes.Value;
}
if (belepes.KotelezoValtoztatni.HasValue)
{
loginInfo.JelszotKotelezoValtoztatni = belepes.KotelezoValtoztatni.Value;
}
if (belepes.MeghiusultBelepesek.HasValue)
{
loginInfo.MeghiusultBelepes = belepes.MeghiusultBelepesek.Value;
}
return loginInfo;
}
private static bool IsDeniedSzirIntezmenyUser(FelhasznaloBelepes belepes)
{
return !string.Equals(belepes.BejelentkezesiNev, "admin", StringComparison.OrdinalIgnoreCase) && !string.Equals(belepes.BejelentkezesiNev, "KRETA_TECHNICAL_FORI", StringComparison.OrdinalIgnoreCase) && belepes.Intezmeny.IntezmenyAdatok.First(x => x.TanevId == belepes.TanevId && !x.Torolt).IsSzirIntezmeny;
}
private static bool IsDeniedArchivIntezmenyUser(IDalHandler h, int userId, int intezmenyId, int tanevId)
{
return h.Felhasznalo().IsTanuloOrGondviselo(userId, intezmenyId, tanevId);
}
public void ChangeUserPassword(string bejelentkezesiNev, string newPassword, bool kotelezoValtoztatni = false)
{
Dal.CustomConnection.Run(ConnectionType, h =>
{
var felhasznaloBelepes = GetBelepes(h, bejelentkezesiNev);
var salt = SaltGenerator.GenerateSalt();
var encodedPassword = BasePasswordCrypter.EncodePasswordSHA1(newPassword, salt);
felhasznaloBelepes.Jelszo = encodedPassword;
felhasznaloBelepes.So = salt;
felhasznaloBelepes.JelszoValtoztatasIdeje = DateTime.Now;
felhasznaloBelepes.KotelezoValtoztatni = kotelezoValtoztatni;
felhasznaloBelepes.NeptunNaploJelszo = null;
h.FelhasznaloBelepes().Update(felhasznaloBelepes);
});
}
private FelhasznaloBelepes GetBelepes(IDalHandler h, string bejelentkezesiNev)
{
var felhasznaloDal = h.Felhasznalo();
var belepesId = felhasznaloDal.GetAktualisFelhasznaloBelepesID(bejelentkezesiNev);
FelhasznaloBelepes belepes = null;
if (belepesId.IsEntityId())
{
belepes = h.FelhasznaloBelepes().Get(belepesId.Value) as FelhasznaloBelepes;
}
if (belepes != null && !belepesId.IsEntityId())
{
var kovBelepesId = felhasznaloDal.GetKovFelhasznaloBelepesID(bejelentkezesiNev);
if (kovBelepesId.IsEntityId())
{
throw new NextTanevBelepesException(bejelentkezesiNev);
}
throw new UserNotFoundException(bejelentkezesiNev);
}
if (belepes == null)
{
throw new UserNotFoundException(bejelentkezesiNev);
}
return belepes;
}
public FelhasznaloBelepesCo Get(string felhasznaloNev)
{
return Dal.CustomConnection.Run(ConnectionType, h =>
{
var ds = h.FelhasznaloBelepes().Get(felhasznaloNev);
if (ds?.Tables[0]?.Rows?.Count > 0)
{
var row = ds.Tables[0].Rows[0];
var co = new FelhasznaloBelepesCo();
co.Id = row.Field<int>("ID");
co.FelhasznaloId = row.Field<int>("C_FELHASZNALOID");
co.GondviseloId = row.Field<int?>("C_GONDVISELOID");
co.KotelezoValtoztatni = SDAConvert.ToBooleanFromTF(row.Field<string>("C_KOTELEZOVALTOZTATNI"));
co.MeghiusultBelepesek = SDAConvert.ToInt32(row.Field<int?>("C_MEGHIUSULTBELEPESEK"));
co.UtolsoBelepes = row.Field<DateTime?>("C_UTOLSOBELEPES");
co.JelszovaltoztatasIdeje = row.Field<DateTime?>("C_JELSZOVALTOZTATASIDEJE");
co.ElfogadottGdprNyilatkozat = SDAConvert.ToBooleanFromTF(row.Field<string>("C_ELFOGADOTTGDPRNYILATKOZAT"));
co.GdprElfogadasDatuma = row.Field<DateTime?>("C_GDPRELFOGADASDATUMA");
return co;
}
return null;
});
}
public List<FelhasznaloBelepesItemCo> GetFelhasznaloBelepesCoList(int? tanevId = null)
{
DataSet dataSet = Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.FelhasznaloBelepes().GetFehasznaloBelepesDataSet(tanevId ?? TanevId));
var result = new List<FelhasznaloBelepesItemCo>();
foreach (DataRow dataRow in dataSet.Tables[0].Rows)
{
var item = new FelhasznaloBelepesItemCo(dataRow);
result.Add(item);
}
return result;
}
public bool IsUserNameExistsInTanev(string userName)
{
return Dal.CustomConnection.Run(ConnectionType, h => IsUserNameExistsInTanev(h, userName));
}
public bool IsUserNameExistsInTanev(string userName, int felhasznaloId, bool isgondviselo)
{
return Dal.CustomConnection.Run(ConnectionType, h => IsUserNameExistsInTanev(h, userName, felhasznaloId, isgondviselo));
}
private bool IsUserNameExistsInTanev(IDalHandler h, string userName, int? felhasznaloId = null, bool isgondviselo = false)
{
var dal = h.FelhasznaloBelepes();
return dal.IsUserNameExistsInTanev(userName, TanevId, felhasznaloId, isgondviselo);
}
}
}