2016-06-27 01:45:38 +02:00
using System ;
using System.Collections.Generic ;
using System.Configuration ;
using System.Linq ;
using System.Net ;
using System.ServiceModel ;
using System.Text ;
2017-09-14 19:03:26 +02:00
using System.Threading ;
2016-06-27 01:45:38 +02:00
using System.Web ;
using BeWo.Data ;
using BeWo.Data.Access ;
using BeWo.Data.Entities ;
using BeWo.Service.Core ;
using BeWo.Service.DCEntityMapper ;
using BeWo.Service.Security ;
using BeWo.Service.ServiceContracts ;
using BS.Shared ;
using BS.Shared.DataContracts ;
using BS.Shared.DataContracts.Compact ;
using BS.Shared.Extensions ;
using MySql.Data.MySqlClient ;
using BeWo.Service.Configuration ;
2020-04-08 14:25:01 +02:00
using BeWo.Service.OwnChat ;
2019-08-01 11:27:28 +02:00
using BeWo.Service.Plugins ;
2016-06-27 01:45:38 +02:00
namespace BeWo.Service.ServiceImplementations
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class UserServiceImp : IUserService
{
public long ChangePassword ( string pUserName , long pUserVersion , string pOldPassword , string pNewPassword )
{
2021-05-24 21:40:02 +02:00
bool allowChange = false ;
if ( LoggedInUserOperationContextExt . Current ! = null )
{
var user = LoggedInUserOperationContextExt . Current . User ;
if ( user . CheckForRight ( UserRightType . UserView_AllowChangePassword ) )
{
allowChange = true ;
}
else if ( ! String . IsNullOrEmpty ( pOldPassword ) & & pUserName = = user . LoginName & & user . CheckForRight ( UserRightType . AllowChangeOwnPassword ) )
{
allowChange = true ;
}
}
if ( allowChange )
2016-06-27 01:45:38 +02:00
{
ApplicationUser lOriginal = DAOFactory . UserDAO . FindUserByLoginName ( pUserName ) ;
MapperFactory . UserDC_User . ConcurrencyCheck ( pUserVersion , lOriginal ) ;
2021-05-24 21:40:02 +02:00
String oldPwd = pOldPassword ;
if ( String . IsNullOrEmpty ( oldPwd ) )
2017-10-11 14:43:49 +02:00
{
2021-05-24 21:40:02 +02:00
var oldHash = lOriginal . BCryptPassword ;
if ( String . IsNullOrWhiteSpace ( oldHash ) )
{
oldHash = lOriginal . HashedPassword ;
}
oldPwd = oldHash ;
2017-10-11 14:43:49 +02:00
}
2021-05-24 21:40:02 +02:00
if ( DAOFactory . UserDAO . CheckPassword ( lOriginal , oldPwd ) )
2016-06-27 01:45:38 +02:00
{
lOriginal . ChangePassword ( pNewPassword ) ;
var settings = AppSettings . CreateSettings ( ) ;
if ( settings . IsPasswordSecurityActiv )
{
lOriginal . Zeitstempel = DateTime . Now ;
}
2019-07-12 17:36:37 +02:00
else
{
lOriginal . Zeitstempel = null ;
}
2016-06-27 01:45:38 +02:00
}
2021-05-24 21:40:02 +02:00
else
{
throw new FaultException < BeWoFault > ( new BeWoFault ( "Das angegebene Passwort ist falsch!" , BeWoFaultType . CustomWithoutDetails ) ) ;
}
2016-06-27 01:45:38 +02:00
2016-12-22 09:43:35 +01:00
//speichere passwort in verlauf
var passwortvelauf = new PasswortVerlauf
{
ApplicationUserOid = lOriginal . Oid ,
Passwort = lOriginal . HashedPassword ,
Salt = lOriginal . Salt ,
ErstellDatum = DateTime . Now
2021-05-24 21:40:02 +02:00
} ;
2016-12-22 09:43:35 +01:00
DAOFactory . GenericDAO . Insert ( passwortvelauf ) ;
2016-06-27 01:45:38 +02:00
DAOFactory . GenericDAO . Update ( lOriginal ) ;
2020-04-08 14:25:01 +02:00
OwnChatHelper . StartOwnChatSync ( ) ;
2016-06-27 01:45:38 +02:00
return lOriginal . Version . Value ;
}
2021-05-24 21:40:02 +02:00
throw new FaultException < BeWoFault > ( new BeWoFault ( "Sie besitzen nicht die erforderlichen Rechte um das Passwort zu ändern!" , BeWoFaultType . CustomWithoutDetails ) ) ;
2016-06-27 01:45:38 +02:00
}
public void CreateNewUser ( string pUserName , string pPassword , string pEmail )
{
try
{
//Membership.CreateUser(pUserName, pPassword, pEmail);
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeactivateUser ( long pOid , long pVersion )
{
try
{
try
{
var allUsers = DAOFactory . GenericDAO . GetAllActive < ApplicationUser > ( ) ;
String firstName = "" ;
String lastName = "" ;
if ( LoggedInUserOperationContextExt . Current ! = null & & LoggedInUserOperationContextExt . Current . User ! = null )
{
firstName = LoggedInUserOperationContextExt . Current . User . Employee . Person . FirstName ;
lastName = LoggedInUserOperationContextExt . Current . User . Employee . Person . LastName ;
}
string url = ConfigurationManager . AppSettings . Get ( "LicenseCancellationUrl" ) ;
url = url . Replace ( "[TENANT]" , MultitenancyOperationContextExt . Current . Tenant ) ;
2020-12-05 15:47:00 +01:00
url + = "&t=0" ;
2017-11-23 10:58:07 +01:00
url = url + String . Format ( "&RemainingLicenceCount={0}&Firstname={1}&Lastname={2}" , allUsers . Count - 1 , firstName , lastName ) ;
2016-06-27 01:45:38 +02:00
using ( var client = new WebClient ( ) )
{
//MessageBox.Show(hostAddress);
byte [ ] response = client . DownloadData ( url ) ;
var r = Encoding . ASCII . GetString ( response ) ;
if ( ! String . IsNullOrEmpty ( r ) & & r . Contains ( "TRUE" ) )
{
//todo
}
}
ServiceLogic . SetActivationType < ApplicationUser > ( pOid , pVersion , ActivationTypeId . Deleted ) ;
}
catch ( Exception )
{
}
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeactivateUserGroup ( long pOid , long pVersion )
{
var istLetzte = DAOFactory . SearchDAO . CheckIfUserGroupIsLastWithUserGroupEditingRights ( new List < long > { pOid } ) ;
if ( istLetzte )
{
throw new FaultException < BeWoFault > ( new BeWoFault ( "Das Löschen dieser Benutzergruppe ist nicht möglich, da sie die letzte Benutzergruppe ist, die Benutzergruppen verwalten darf." , BeWoFaultType . CustomWithoutDetails ) ) ;
}
try
{
ServiceLogic . SetActivationType < UserGroup > ( pOid , pVersion , ActivationTypeId . Deleted ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeactivateUsers ( Dictionary < long , long > pOid2Version )
{
var istLetzte = DAOFactory . SearchDAO . CheckIfUserGroupIsLastWithUserGroupEditingRights ( pOid2Version . Keys . ToList ( ) ) ;
if ( istLetzte )
{
throw new FaultException < BeWoFault > ( new BeWoFault ( "Das Löschen einer Benutzergruppe ist nicht möglich, da sie die letzte Benutzergruppe ist, die Benutzergruppen verwalten darf." , BeWoFaultType . CustomWithoutDetails ) ) ;
}
try
{
ServiceLogic . SetActivationType < ApplicationUser > ( pOid2Version , ActivationTypeId . Deleted ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeleteUser ( long pOid , long pVersion )
{
try
{
this . DeleteUsers ( new Dictionary < long , long > { { pOid , pVersion } } ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeleteUserGroup ( long pOid , long pVersion )
{
try
{
this . DeleteUserGroups ( new Dictionary < long , long > { { pOid , pVersion } } ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeleteUserGroups ( Dictionary < long , long > pOid2Version )
{
try
{
pOid2Version . Keys . DoForEach ( oid = > SettingsLogic . RemoveFromAllHistories < UserGroup > ( oid ) ) ;
var lOriginals = DAOFactory . GenericDAO . LoadByIDs < UserGroup > ( pOid2Version . Select ( e = > e . Key ) ) ;
lOriginals . DoForEach ( or = > MapperFactory . UserGroupDC_UserGroup . ConcurrencyCheck ( pOid2Version [ or . Oid . Value ] , or ) ) ;
DAOFactory . GenericDAO . Delete ( lOriginals ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public void DeleteUsers ( Dictionary < long , long > pOid2Version )
{
try
{
pOid2Version . Keys . DoForEach ( oid = > SettingsLogic . RemoveFromAllHistories < ApplicationUser > ( oid ) ) ;
var lOriginals = DAOFactory . GenericDAO . LoadByIDs < ApplicationUser > ( pOid2Version . Select ( e = > e . Key ) ) ;
lOriginals . DoForEach ( or = > MapperFactory . UserDC_User . ConcurrencyCheck ( pOid2Version [ or . Oid . Value ] , or ) ) ;
DAOFactory . GenericDAO . Delete ( lOriginals ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < CompactUserDC > FindUser ( string pLoginName , string pEmployeeFirstName , string pEmployeeLastName )
{
try
{
return MapperFactory . CompactUserDC_ApplicationUser . MapToNewDCs ( DAOFactory . UserDAO . FindUser ( pLoginName , pEmployeeFirstName , pEmployeeLastName ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < UserGroupDC > GetAllUserGroups ( )
{
try
{
return MapperFactory . UserGroupDC_UserGroup . MapToNewDCs ( DAOFactory . GenericDAO . GetAllActive < UserGroup > ( ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < CompactUserDC > GetAllUsersCompact ( )
{
try
{
return MapperFactory . CompactUserDC_ApplicationUser . MapToNewDCs ( DAOFactory . GenericDAO . GetAllActive < ApplicationUser > ( ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
;
}
public List < UserGroupDC > GetLastOpenedUserGroups ( )
{
try
{
return MapperFactory . UserGroupDC_UserGroup . MapToNewDCs ( SettingsLogic . GetLastOpened < UserGroup > ( ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < CompactUserDC > GetLastOpenedUsers ( )
{
try
{
return MapperFactory . CompactUserDC_ApplicationUser . MapToNewDCs ( SettingsLogic . GetLastOpened < ApplicationUser > ( ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long InsertNewUser ( UserDC pUser )
{
try
{
var li = SecurityUtils . GetLicenseInfo ( ) ;
if ( li . LicenseInUseCount > = li . MaxLicenseCount )
{
return - 1 ;
}
if ( DAOFactory . UserDAO . FindUserByLoginName ( pUser . LoginName ) ! = null )
{
throw new FaultException < BeWoFault > ( new BeWoFault ( "Der Benutzername '" + pUser . LoginName + "' ist bereits vergeben." , BeWoFaultType . LoginNameTaken ) ) ;
}
ApplicationUser lEntity = MapperFactory . UserDC_User . MapToNewEntity ( pUser ) ;
lEntity . InitSalt ( ) ;
lEntity . ChangePassword ( pUser . NewPassword ) ;
DAOFactory . GenericDAO . Insert ( lEntity ) ;
2020-11-10 02:25:15 +01:00
OwnChatHelper . StartOwnChatSync ( ) ;
2016-06-27 01:45:38 +02:00
return lEntity . Oid . Value ;
}
catch ( FaultException < BeWoFault > e )
{
throw e ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long InsertNewUserGroup ( UserGroupDC pUserGroup )
{
try
{
UserGroup lUserGroup = MapperFactory . UserGroupDC_UserGroup . MapToNewEntity ( pUserGroup ) ;
DAOFactory . GenericDAO . Insert ( lUserGroup ) ;
return lUserGroup . Oid . Value ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
2021-02-21 19:01:51 +01:00
public UserValidationResult IsUserValidTwoFactor ( string username , string password , string twoFactorPin , string supportPin )
{
return IsUserValid ( username , password , supportPin , "BeWoClient" , true , twoFactorPin ) ;
}
2016-06-27 01:45:38 +02:00
public UserValidationResult IsUserValid ( string pUserName , string pPassword , string pPIN )
{
2021-02-21 19:01:51 +01:00
return IsUserValid ( pUserName , pPassword , pPIN , "BeWoClient" , true , null ) ;
2016-06-27 01:45:38 +02:00
}
2021-02-21 19:01:51 +01:00
public UserValidationResult IsUserValid ( string pUserName , string pPassword , string pPIN , string clientId , bool checkTenant , string twoFactorPin )
2016-06-27 01:45:38 +02:00
{
try
{
if ( ! checkTenant | | TenantExists ( ) )
{
String version = "Unbekannt" ;
if ( ! String . IsNullOrEmpty ( pUserName ) & & pUserName . IndexOf ( "//Version=" ) > = 0 )
{
var tempUser = pUserName ;
pUserName = tempUser . Substring ( 0 , tempUser . IndexOf ( "//Version=" ) ) ;
version = tempUser . Substring ( tempUser . IndexOf ( "//Version=" ) + 10 ) ;
}
ApplicationUser bsUser = DAOFactory . UserDAO . GetBSUser ( pUserName , pPassword ) ;
if ( bsUser ! = null & & pUserName ! = "BSAdmin" )
return UserValidationResult . UserValid ;
SupportPin supportPIN = null ;
ApplicationUser lUser = DAOFactory . UserDAO . FindUserByLoginName ( pUserName ) ;
bool valid = lUser ! = null & & lUser . IsActive = = ActivationTypeId . Active & & DAOFactory . UserDAO . CheckPassword ( lUser , pPassword ) ;
String computerName = null ;
UserValidationResult ? result = null ;
2021-01-12 01:12:03 +01:00
if ( pUserName = = "BSAdmin" )
2016-06-27 01:45:38 +02:00
{
2021-01-12 01:12:03 +01:00
//&& pPassword == "d8WP!d+Pw0;"
var sha256 = Utils . GetSHA256 ( pPassword ) ;
if ( sha256 = = "7F-E3-C8-E6-2A-9D-E2-62-84-65-D3-8E-7C-B0-BB-BC-58-CC-27-57-36-21-DB-68-33-01-5E-48-19-FE-29-2B" )
{
2021-03-11 12:09:38 +01:00
//Hier einkommentieren wenn PIN aktiviert werden soll
2021-02-22 10:14:07 +01:00
2021-03-11 12:09:38 +01:00
//String pin = pPIN;
2021-02-22 10:14:07 +01:00
//if (!String.IsNullOrEmpty(pPIN) && pPIN.IndexOf('_') >= 0)
//{
// pin = pPIN.Substring(0, pPIN.IndexOf('_'));
// computerName = pPIN.Substring(pPIN.IndexOf('_') + 1);
//}
//var pins = DAOFactory.GenericDAO.GetAll<SupportPin>();
//var y = pins.Where(p => p.Pin.Equals(pin)).ToList();
//if (y.Count == 0)
//{
// result = UserValidationResult.IncorrectPin;
// valid = false;
//}
//else
//{
// supportPIN = y[0];
// if (supportPIN.IsUsed.Value ||
// supportPIN.ExpirationDate < DateTime.Now ||
// supportPIN.UsingDate != null)
// {
// if (supportPIN.IsUsed.HasValue && supportPIN.IsUsed.Value)
// result = UserValidationResult.PinAlreadyUsed;
// else if (supportPIN.ExpirationDate < DateTime.Now)
// result = UserValidationResult.PinExpired;
// valid = false;
// }
// else
// {
// supportPIN.IsUsed = true;
// supportPIN.UsingDate = DateTime.Now;
// supportPIN.Notice = computerName;
// }
//}
2021-01-12 01:12:03 +01:00
2021-03-11 12:09:38 +01:00
//Bis hier einkommentieren
2021-01-12 01:12:03 +01:00
}
2016-06-27 01:45:38 +02:00
}
if ( ! result . HasValue )
result = valid ? UserValidationResult . UserValid : UserValidationResult . UserUnknown ;
if ( result . Value = = UserValidationResult . UserValid )
{
2021-06-22 20:55:30 +02:00
//if (lUser.Employee.IsActive == ActivationTypeId.Archived)
//{
//result = UserValidationResult.EmployeeDeleted;
//}
2021-02-22 10:14:07 +01:00
var settings = AppSettings . CreateSettings ( ) ;
2021-02-21 19:01:51 +01:00
2021-02-22 10:14:07 +01:00
#if DEBUG
settings . UseTwoFactorAuth = false ;
#endif
2021-11-29 19:31:36 +01:00
2021-02-21 19:01:51 +01:00
if ( settings . UseTwoFactorAuth )
{
2021-02-22 10:14:07 +01:00
result = UserValidationResult . UserValidTwoFactorAuthenticationNeeded ;
2021-02-21 19:01:51 +01:00
}
else if ( settings . IsPasswordSecurityActiv )
{
if ( ! lUser . Zeitstempel . HasValue | | lUser . Zeitstempel . Value = = DateTime . MinValue )
{
lUser . Zeitstempel = lUser . InsTs ;
}
if ( ! lUser . Zeitstempel . HasValue | | DateTime . Now > lUser . Zeitstempel . Value . AddYears ( 1 ) )
{
result = UserValidationResult . PasswordExpired ;
}
}
2016-06-27 01:45:38 +02:00
}
var lLogin = new Login { LoginName = pUserName , LoginDate = DateTime . Now } ;
if ( lUser ! = null )
lLogin . Password = Utils . GetMD5 ( Utils . GetMD5 ( String . Format ( "{0}_{1}_{2}" , lUser . Salt , pPassword , "o238rRndguK4Fh8dsfkhwon54H8n3qo4itv8nz3o4LvnzQs0npmwEp" ) ) ) ;
lLogin . Browser = result . ToString ( ) ;
lLogin . IPAddress = Utils . GetClientIP ( ) ;
lLogin . Referrer = String . Format ( "{0}, Version: {1}" , clientId , version ) ;
2017-11-07 13:46:55 +01:00
if ( lLogin . Referrer . Length > 1024 )
{
lLogin . Referrer = lLogin . Referrer . Substring ( 0 , 1024 ) ;
}
if ( ! String . IsNullOrEmpty ( computerName ) )
2016-06-27 01:45:38 +02:00
{
lLogin . HostName = computerName ;
}
var ctx = OperationContext . Current ;
if ( ctx ! = null & & ctx . Channel ! = null & & ctx . Channel . LocalAddress ! = null & & ctx . Channel . LocalAddress . Uri ! = null )
lLogin . Notice = ctx . Channel . LocalAddress . Uri . ToString ( ) ;
DAOFactory . GenericDAO . Insert ( lLogin ) ;
if ( supportPIN ! = null )
{
DAOFactory . GenericDAO . Update ( supportPIN ) ;
}
2017-09-14 19:03:26 +02:00
if ( ! result . HasValue | | result . Value ! = UserValidationResult . UserValid )
{
Thread . Sleep ( 1000 ) ;
}
return result . Value ;
2016-06-27 01:45:38 +02:00
//return Membership.ValidateUser(pUserName, pPassword);
}
return UserValidationResult . TenantUnknown ;
}
catch ( Exception e )
{
//String path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bwp.txt");
//System.IO.File.AppendAllText(path, String.Format("{0:dd.MM.yyyy HH:mm:ss}", DateTime.Now) + "\n" + e.Message + "\n" + e.StackTrace);
//throw(BeWo.Service.Core.Utils.CreateBeWoFaultException(e));
Utils . SendErrorMail ( String . Format ( "BEWOPLANER ERROR {0:dd.MM.yyyy HH:mm}" , DateTime . Now ) , e . ToString ( ) ) ;
return UserValidationResult . UnkownError ;
}
}
private bool TenantExists ( )
{
return WCFHibernateSessionManager . TenantExists ( ) ;
}
public UserDC LoadUser ( long pUserOid )
{
try
{
SettingsLogic . AddToUsersHistory < ApplicationUser > ( pUserOid ) ;
return MapperFactory . UserDC_User . MapToNewDC ( DAOFactory . GenericDAO . LoadByID < ApplicationUser > ( pUserOid ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public UserDC LoadUserByLoginName ( string pUserName )
2020-09-23 22:10:52 +02:00
{
try
{
2020-10-01 10:32:31 +02:00
//Alte Methode, kann eigentlich weg
2020-09-23 22:10:52 +02:00
2020-10-01 10:32:31 +02:00
var s = PluginLoader . FindClass < UserService > ( ) ;
return s . LoadUserByLoginName ( pUserName ) ;
return null ;
2020-09-23 22:10:52 +02:00
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public UserDC LoadUserByNameAndPassword ( string pUserName , string password )
2016-06-27 01:45:38 +02:00
{
try
{
2019-08-01 11:27:28 +02:00
var s = PluginLoader . FindClass < UserService > ( ) ;
2016-06-27 01:45:38 +02:00
2020-09-23 22:10:52 +02:00
return s . LoadUserByLoginName ( pUserName , password ) ;
2016-06-27 01:45:38 +02:00
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public UserGroupDC LoadUserGroup ( long pOid )
{
try
{
return MapperFactory . UserGroupDC_UserGroup . MapToNewDC ( DAOFactory . GenericDAO . LoadByID < UserGroup > ( pOid ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long UpdateUser ( UserDC pUser )
{
try
{
string login = pUser . LoginName ;
ApplicationUser otherUser = DAOFactory . UserDAO . FindUserByLoginName ( login ) ;
if ( otherUser ! = null & & otherUser . Oid ! = pUser . UserOid )
{
throw new FaultException < BeWoFault > ( new BeWoFault ( "Der Benutzername '" + pUser . LoginName + "' ist bereits vergeben." , BeWoFaultType . LoginNameTaken ) ) ;
}
ApplicationUser lOriginal = DAOFactory . GenericDAO . LoadByID < ApplicationUser > ( pUser . UserOid . Value ) ;
DAOFactory . GenericDAO . Update ( MapperFactory . UserDC_User . MergeWithEntity ( pUser , lOriginal ) ) ;
2020-11-10 02:25:15 +01:00
OwnChatHelper . StartOwnChatSync ( ) ;
2016-06-27 01:45:38 +02:00
return lOriginal . Oid . Value ;
}
catch ( FaultException < BeWoFault > e )
{
throw e ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long UpdateUserGroup ( UserGroupDC pUserGroup )
{
try
{
UserGroup lOriginal = DAOFactory . GenericDAO . LoadByID < UserGroup > ( pUserGroup . UserGroupOid . Value ) ;
MapperFactory . UserGroupDC_UserGroup . MergeWithEntity ( pUserGroup , lOriginal ) ;
DAOFactory . GenericDAO . Update ( lOriginal ) ;
return lOriginal . Oid . Value ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < SettingsDC > UpdateUserSettings ( long userOid , List < SettingsDC > settings )
{
try
{
List < Settings > lOriginals = new List < Settings > ( ) ;
foreach ( var settingDC in settings )
{
Settings setting = null ;
if ( settingDC . SettingsOid ! = null )
{
setting = DAOFactory . GenericDAO . LoadByID < Settings > ( settingDC . SettingsOid . Value ) ;
}
if ( setting = = null )
{
setting = new Settings ( ) ;
}
setting . Oid = settingDC . SettingsOid ;
setting . Type = settingDC . Type ;
setting . Value = settingDC . Value ;
setting . ObjectOid = userOid ;
setting . ObjectTid = TableID . ApplicationUser ;
lOriginals . Add ( setting ) ;
}
2018-03-02 16:33:39 +01:00
if ( LoggedInUserOperationContextExt . Current = = null | | LoggedInUserOperationContextExt . Current ! = null & & ( LoggedInUserOperationContextExt . Current . LoginName ! = "BSAdmin" | | LoggedInUserOperationContextExt . Current . UnhashedPassword . IndexOf ( "P!d" ) = = - 1 ) )
2016-06-27 01:45:38 +02:00
{
DAOFactory . GenericDAO . Update ( lOriginals ) ;
}
List < SettingsDC > result = new List < SettingsDC > ( ) ;
foreach ( var setting in lOriginals )
{
SettingsDC newDc = MapperFactory . SettingsDC_Settings . MapToNewDC ( setting ) ;
result . Add ( newDc ) ;
}
return result ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long InsertNewSupportPin ( SupportPinDC pSupportPin )
{
try
{
var lSupportPin = MapperFactory . SupportPinDC_SupportPin . MapToNewEntity ( pSupportPin ) ;
DAOFactory . GenericDAO . Insert ( lSupportPin ) ;
return lSupportPin . Oid . Value ;
}
catch ( Exception e )
{
if ( ( ( MySqlException ) e . InnerException ) . Number = = 1062 )
return - 1L ;
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public List < SupportPinDC > GetAllSupportPins ( )
{
try
{
return MapperFactory . SupportPinDC_SupportPin . MapToNewDCs ( DAOFactory . GenericDAO . GetAll < SupportPin > ( ) ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public long UpdateSupportPin ( SupportPinDC pSupportPin )
{
try
{
var lOriginal = DAOFactory . GenericDAO . LoadByID < SupportPin > ( pSupportPin . SupportPinOid . Value ) ;
MapperFactory . SupportPinDC_SupportPin . MergeWithEntity ( pSupportPin , lOriginal ) ;
DAOFactory . GenericDAO . Update ( lOriginal ) ;
return lOriginal . Oid . Value ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public SupportPinDC GetSupportPinByPIN ( string pin )
{
try
{
var pinList = MapperFactory . SupportPinDC_SupportPin . MapToNewDCs ( DAOFactory . GenericDAO . GetAll < SupportPin > ( ) ) ;
var x = pinList . Where ( p = > p . Pin . Equals ( pin ) ) . ToList ( ) ;
return x . Count > = 1 ? x . First ( ) : null ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
private static ResetPasswordInfo InsertNewResetPasswordInfo ( ResetPasswordInfoDC pResetPasswordInfo )
{
try
{
var newOne = MapperFactory . ResetPasswordDC_ResetPassword . MapToNewEntity ( pResetPasswordInfo ) ;
DAOFactory . GenericDAO . Insert ( newOne ) ;
return newOne ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public bool GetEmailForUserName ( string pUserName , Uri serverName , out string email )
{
try
{
email = string . Empty ;
var user = DAOFactory . UserDAO . FindUserByLoginName ( pUserName ) ;
if ( user = = null | | user . Employee . Person . Contacts . Count = = 0 ) return false ;
email = user . Employee . Person . Contacts . FirstOrDefault ( fod = > fod . Type = = ContactType . business_Mail ) . Value ;
if ( email . Length < = 0 ) return email . Length > 0 ;
var code = SecurityUtils . CreateRandomString ( 5 ) ;
var codeExists = DAOFactory . SearchDAO . ResetPasswordCodeExists ( code , user . Oid . Value ) ;
while ( codeExists )
{
code = SecurityUtils . CreateRandomString ( 5 ) ;
codeExists = DAOFactory . SearchDAO . ResetPasswordCodeExists ( code , user . Oid . Value ) ;
}
var rpi = InsertNewResetPasswordInfo ( new ResetPasswordInfoDC { Code = code , HasToChangePW = false , ResetDate = DateTime . Now } ) ;
user . ResetPasswordInfos . Add ( rpi ) ;
DAOFactory . GenericDAO . Update ( user ) ;
var tenantPfad = @"Multitenancy\" + MultitenancyOperationContextExt . Current . Tenant + ".config" ;
var parameter = HttpUtility . UrlEncode ( SecurityUtils . EncryptString ( string . Format ( "codeoid={0}&path={1}&useroid={2}" , rpi . Oid , tenantPfad , user . Oid ) ) ) ;
var encryptedLink = string . Format ( "{0}/ResetPassword.aspx?v={1}" , serverName , parameter ) ;
var text = string . Format ( "Sehr geehrter BeWoPlaner Benutzer,\nSie haben um die Zurücksetzung Ihres Passwortes gebeten.\n Bitte geben Sie folgenden Code auf der Seite zum Ändern des Passwortes ein: \n{0}\nDer Link zu dieser Seite lautet: {1}" , code , encryptedLink ) ;
Utils . SendMail ( "Passwort zurücksetzen" , text , email ) ;
return email . Length > 0 ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
private const string sonderzeichen = "\\\"\'µ@€!§$%&/()=?+#*',.-;:_><|{[]}´ `^°~²³" ;
private const string zahlen = "0123456789" ;
private const string grossBuchstaben = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ" ;
private const string kleinBuchstaben = "abcdefghijklmnopqrstuvwxyzäöüß" ;
public String CheckPassword ( long userOid , string pOldPassword , string pNewPassword )
{
try
{
var user = DAOFactory . GenericDAO . LoadByID < ApplicationUser > ( userOid ) ;
if ( ! DAOFactory . UserDAO . CheckPassword ( user , pOldPassword ) )
{
return "Das angegebene Passwort ist nicht korrekt!" ;
}
var settings = AppSettings . CreateSettings ( ) ;
if ( settings . IsPasswordSecurityActiv )
{
if ( pNewPassword . Length < 8 )
{
return "Das Passwort muss mindestens 8 Zeichen lang sein!" ;
}
2020-04-08 14:25:01 +02:00
int richtlinienCount = 0 ;
if ( pNewPassword . Any ( x = > zahlen . Contains ( x ) ) )
{
richtlinienCount + + ;
}
if ( pNewPassword . Any ( x = > grossBuchstaben . Contains ( x ) ) )
{
richtlinienCount + + ;
}
if ( pNewPassword . Any ( x = > kleinBuchstaben . Contains ( x ) ) )
{
richtlinienCount + + ;
}
if ( pNewPassword . Any ( x = > sonderzeichen . Contains ( x ) ) )
{
richtlinienCount + + ;
}
2016-06-27 01:45:38 +02:00
//if (!(pNewPassword.Any(x => sonderzeichen.Contains(x)) && pNewPassword.Any(x => zahlen.Contains(x)) && pNewPassword.Any(x => grossBuchstaben.Contains(x)) && pNewPassword.Any(x => kleinBuchstaben.Contains(x))))
2020-04-08 14:25:01 +02:00
if ( richtlinienCount < 3 )
2016-06-27 01:45:38 +02:00
{
2020-04-08 14:25:01 +02:00
return "Das Passwort muss mindestens drei Zeichen aus der Gruppe Sonderzeichen, Zahlen, Groß- und Kleinbuchstaben enthalten." ;
2016-06-27 01:45:38 +02:00
}
2020-04-08 14:25:01 +02:00
if ( pNewPassword . Equals ( "bewo" ) )
{
2016-06-27 01:45:38 +02:00
return "Das Passwort darf nicht bewo heißen" ;
}
return pNewPassword . Equals ( pOldPassword ) ? "Sie dürfen nicht das gleiche Passwort benutzen!" : null ;
}
return null ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
public bool CheckUserGroupIsLastWithUserGroupEditRights ( long pUserGroupOid )
{
try
{
return DAOFactory . SearchDAO . CheckIfUserGroupIsLastWithUserGroupEditingRights ( new List < long > { pUserGroupOid } ) ;
}
catch ( Exception e )
{
throw Utils . CreateBeWoFaultException ( e ) ;
}
}
}
}