Skip to content

Commit

Permalink
Import date functions
Browse files Browse the repository at this point in the history
  • Loading branch information
coudot committed Jul 19, 2024
1 parent e21d3f5 commit f96f86e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 2 deletions.
82 changes: 82 additions & 0 deletions src/Ltb/Date.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?php namespace Ltb;

/**
* Date functions
*/
final class Date {

static function ldapDate2phpDate($string) {
// This code is part of FusionDirectory (http://www.fusiondirectory.org/)
// Copyright (C) 2016 FusionDirectory

// century = 2(%x30-39) ; "00" to "99"
// year = 2(%x30-39) ; "00" to "99"
$year = '(?P<year>\d{4})';
// month = ( %x30 %x31-39 ) ; "01" (January) to "09"
// / ( %x31 %x30-32 ) ; "10" to "12"
$month = '(?P<month>0[1-9]|1[0-2])';
// day = ( %x30 %x31-39 ) ; "01" to "09"
// / ( %x31-32 %x30-39 ) ; "10" to "29"
// / ( %x33 %x30-31 ) ; "30" to "31"
$day = '(?P<day>0[1-9]|[0-2]\d|3[01])';
// hour = ( %x30-31 %x30-39 ) / ( %x32 %x30-33 ) ; "00" to "23"
$hour = '(?P<hour>[0-1]\d|2[0-3])';
// minute = %x30-35 %x30-39 ; "00" to "59"
$minute = '(?P<minute>[0-5]\d)';
// second = ( %x30-35 %x30-39 ) ; "00" to "59"
// leap-second = ( %x36 %x30 ) ; "60"
$second = '(?P<second>[0-5]\d|60)';
// fraction = ( DOT / COMMA ) 1*(%x30-39)
$fraction = '([.,](?P<fraction>\d+))';
// g-time-zone = %x5A ; "Z"
// / g-differential
// g-differential = ( MINUS / PLUS ) hour [ minute ]
$timezone = '(?P<timezone>Z|[-+]([0-1]\d|2[0-3])([0-5]\d)?)';

// GeneralizedTime = century year month day hour
// [ minute [ second / leap-second ] ]
// [ fraction ]
// g-time-zone
$pattern = '/^'.
"$year$month$day$hour".
"($minute$second?)?".
"$fraction?".
$timezone.
'$/';

if (preg_match($pattern, $string, $m)) {
if (empty($m['minute'])) {
$m['minute'] = '00';
}
if (empty($m['second'])) {
$m['second'] = '00';
}
if (empty($m['fraction'])) {
$m['fraction'] = '0';
}
$date = new DateTime($m['year'].'-'.$m['month'].'-'.$m['day'].'T'.$m['hour'].':'.$m['minute'].':'.$m['second'].'.'.$m['fraction'].$m['timezone']);
$date->setTimezone(new DateTimeZone('UTC'));
return $date;
} else {
return false;
}
}

static function string2ldapDate($string) {
$values = explode("/",$string);
$day = $values[0];
$month = $values[1];
$year = $values[2];

$ldapdate = $year.$month.$day."000000Z";

return $ldapdate;
}

static function adDate2phpDate($string) {
$winSecs = (int)($string / 10000000); // divide by 10 000 000 to get seconds
$unixTimestamp = ($winSecs - 11644473600); // 1.1.1600 -> 1.1.1970 difference in seconds
return date(DateTime::RFC822, $unixTimestamp);
}

}
3 changes: 1 addition & 2 deletions src/Ltb/Directory/OpenLDAP.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ public function isLocked($ldap, $dn, $config) {
$isLocked = true;
} else if (isset($pwdAccountLockedTime)) {
if (isset($pwdLockoutDuration) and ($pwdLockoutDuration > 0)) {
// $lockDate = ldapDate2phpDate($pwdAccountLockedTime);
$lockdate = time() // TODO add Date functions in LTB-LDAP
$lockDate = \Ltb\Date::ldapDate2phpDate($pwdAccountLockedTime);
$unlockDate = date_add( $lockDate, new DateInterval('PT'.$pwdLockoutDuration.'S'));
if ( time() <= $unlockDate->getTimestamp() ) {
$isLocked = true;
Expand Down

0 comments on commit f96f86e

Please sign in to comment.