287 lines
12 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|