Merge pull request #24 from LDAPAccountManager/2factor_auth
2factor auth
This commit is contained in:
commit
968b6ebd22
lam
docs/manual-sources
lib
templates
3rdParty/pla/lib
account
config
delete.phpinitsuff.phplists
login.phplogin2Factor.phplogout.phpmain.phpmisc
multiEdit.phpou_edit.phppdfedit
profedit
schema
serverInfo.phptests
tools.phptree
upload
tmp
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After ![]() (image error) Size: 32 KiB |
Binary file not shown.
After ![]() (image error) Size: 17 KiB |
Binary file not shown.
After ![]() (image error) Size: 6.4 KiB |
Binary file not shown.
Before ![]() (image error) Size: 18 KiB After ![]() (image error) Size: 30 KiB ![]() ![]() |
Binary file not shown.
Before ![]() (image error) Size: 18 KiB After ![]() (image error) Size: 24 KiB ![]() ![]() |
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace LAM\LIB\TWO_FACTOR;
|
namespace LAM\LIB\TWO_FACTOR;
|
||||||
use \selfServiceProfile;
|
use \selfServiceProfile;
|
||||||
|
use \LAMConfig;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
|
@ -58,15 +59,15 @@ interface TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
class PrivacyIDEAProvider implements TwoFactorProvider {
|
class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
|
|
||||||
private $profile;
|
private $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param selfServiceProfile $profile profile
|
* @param TwoFactorConfiguration $config configuration
|
||||||
*/
|
*/
|
||||||
public function __construct(&$profile) {
|
public function __construct(&$config) {
|
||||||
$this->profile = $profile;
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -99,7 +100,7 @@ class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
private function authenticate($user, $password) {
|
private function authenticate($user, $password) {
|
||||||
$curl = $this->getCurl();
|
$curl = $this->getCurl();
|
||||||
$url = $this->profile->twoFactorAuthenticationURL . "/auth";
|
$url = $this->config->twoFactorAuthenticationURL . "/auth";
|
||||||
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
$header = array('Accept: application/json');
|
$header = array('Accept: application/json');
|
||||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
||||||
|
@ -137,7 +138,7 @@ class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
private function getCurl() {
|
private function getCurl() {
|
||||||
$curl = curl_init();
|
$curl = curl_init();
|
||||||
if ($this->profile->twoFactorAuthenticationInsecure) {
|
if ($this->config->twoFactorAuthenticationInsecure) {
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
|
||||||
}
|
}
|
||||||
|
@ -154,7 +155,7 @@ class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
private function getSerialsForUser($user, $token) {
|
private function getSerialsForUser($user, $token) {
|
||||||
$curl = $this->getCurl();
|
$curl = $this->getCurl();
|
||||||
$url = $this->profile->twoFactorAuthenticationURL . "/token/?user=" . $user;
|
$url = $this->config->twoFactorAuthenticationURL . "/token/?user=" . $user;
|
||||||
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
$header = array('Authorization: ' . $token, 'Accept: application/json');
|
$header = array('Authorization: ' . $token, 'Accept: application/json');
|
||||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
||||||
|
@ -192,7 +193,7 @@ class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
private function verify($token, $serial, $twoFactorInput) {
|
private function verify($token, $serial, $twoFactorInput) {
|
||||||
$curl = $this->getCurl();
|
$curl = $this->getCurl();
|
||||||
$url = $this->profile->twoFactorAuthenticationURL . "/validate/check";
|
$url = $this->config->twoFactorAuthenticationURL . "/validate/check";
|
||||||
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
$options = array(
|
$options = array(
|
||||||
'pass' => $twoFactorInput,
|
'pass' => $twoFactorInput,
|
||||||
|
@ -225,15 +226,25 @@ class PrivacyIDEAProvider implements TwoFactorProvider {
|
||||||
*/
|
*/
|
||||||
class TwoFactorProviderService {
|
class TwoFactorProviderService {
|
||||||
|
|
||||||
private $profile;
|
/** 2factor authentication disabled */
|
||||||
|
const TWO_FACTOR_NONE = 'none';
|
||||||
|
/** 2factor authentication via privacyIDEA */
|
||||||
|
const TWO_FACTOR_PRIVACYIDEA = 'privacyidea';
|
||||||
|
|
||||||
|
private $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param selfServiceProfile $profile profile
|
* @param selfServiceProfile|LAMConfig $configObj profile
|
||||||
*/
|
*/
|
||||||
public function __construct(&$profile) {
|
public function __construct(&$configObj) {
|
||||||
$this->profile = $profile;
|
if ($configObj instanceof selfServiceProfile) {
|
||||||
|
$this->config = $this->getConfigSelfService($configObj);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->config = $this->getConfigAdmin($configObj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -244,10 +255,49 @@ class TwoFactorProviderService {
|
||||||
* @throws \Exception unable to get provider
|
* @throws \Exception unable to get provider
|
||||||
*/
|
*/
|
||||||
public function getProvider() {
|
public function getProvider() {
|
||||||
if ($this->profile->twoFactorAuthentication == selfServiceProfile::TWO_FACTOR_PRIVACYIDEA) {
|
if ($this->config->twoFactorAuthentication == TwoFactorProviderService::TWO_FACTOR_PRIVACYIDEA) {
|
||||||
return new PrivacyIDEAProvider($this->profile);
|
return new PrivacyIDEAProvider($this->config);
|
||||||
}
|
}
|
||||||
throw new \Exception('Invalid provider: ' . $this->profile->twoFactorAuthentication);
|
throw new \Exception('Invalid provider: ' . $this->config->twoFactorAuthentication);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the configuration from self service.
|
||||||
|
*
|
||||||
|
* @param selfServiceProfile $profile profile
|
||||||
|
* @return TwoFactorConfiguration configuration
|
||||||
|
*/
|
||||||
|
private function getConfigSelfService(&$profile) {
|
||||||
|
$config = new TwoFactorConfiguration();
|
||||||
|
$config->twoFactorAuthentication = $profile->twoFactorAuthentication;
|
||||||
|
$config->twoFactorAuthenticationInsecure = $profile->twoFactorAuthenticationInsecure;
|
||||||
|
$config->twoFactorAuthenticationURL = $profile->twoFactorAuthenticationURL;
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the configuration for admin interface.
|
||||||
|
*
|
||||||
|
* @param LAMConfig $conf configuration
|
||||||
|
* @return TwoFactorConfiguration configuration
|
||||||
|
*/
|
||||||
|
private function getConfigAdmin($conf) {
|
||||||
|
$config = new TwoFactorConfiguration();
|
||||||
|
$config->twoFactorAuthentication = $conf->getTwoFactorAuthentication();
|
||||||
|
$config->twoFactorAuthenticationInsecure = $conf->getTwoFactorAuthenticationInsecure();
|
||||||
|
$config->twoFactorAuthenticationURL = $conf->getTwoFactorAuthenticationURL();
|
||||||
|
return $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration settings for 2-factor authentication.
|
||||||
|
*
|
||||||
|
* @author Roland Gruber
|
||||||
|
*/
|
||||||
|
class TwoFactorConfiguration {
|
||||||
|
public $twoFactorAuthentication = null;
|
||||||
|
public $twoFactorAuthenticationURL = null;
|
||||||
|
public $twoFactorAuthenticationInsecure = false;
|
||||||
|
}
|
||||||
|
|
|
@ -1467,6 +1467,22 @@ function validateReCAPTCHA($secretKey) {
|
||||||
return $responseJSON->{'success'} === true;
|
return $responseJSON->{'success'} === true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the user is logged in. Stops script execution if not.
|
||||||
|
*
|
||||||
|
* @param boolean $check2ndFactor check if the 2nd factor was provided if required
|
||||||
|
*/
|
||||||
|
function enforceUserIsLoggedIn($check2ndFactor = true) {
|
||||||
|
if (!isset($_SESSION['loggedIn']) || ($_SESSION['loggedIn'] !== true)) {
|
||||||
|
logNewMessage(LOG_WARNING, 'Detected unauthorized access to page that requires login: ' . $_SERVER["SCRIPT_FILENAME"]);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
if ($check2ndFactor && isset($_SESSION['2factorRequired'])) {
|
||||||
|
die();
|
||||||
|
logNewMessage(LOG_WARNING, 'Detected unauthorized access to page that requires login (2nd factor not provided): ' . $_SERVER["SCRIPT_FILENAME"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class LAMException extends Exception {
|
class LAMException extends Exception {
|
||||||
|
|
||||||
private $title;
|
private $title;
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
use \LAM\LIB\TWO_FACTOR\TwoFactorProviderService;
|
||||||
/*
|
/*
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -31,11 +32,13 @@ $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Used to print messages. */
|
/** Used to print messages. */
|
||||||
include_once("status.inc");
|
include_once "status.inc";
|
||||||
/** Used to get module information. */
|
/** Used to get module information. */
|
||||||
include_once("modules.inc");
|
include_once "modules.inc";
|
||||||
/** Used to get type information. */
|
/** Used to get type information. */
|
||||||
include_once("types.inc");
|
include_once "types.inc";
|
||||||
|
/** 2-factor */
|
||||||
|
include_once '2factor.inc';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the environment variables for custom SSL CA certificates.
|
* Sets the environment variables for custom SSL CA certificates.
|
||||||
|
@ -567,6 +570,13 @@ class LAMConfig {
|
||||||
/** job configuration */
|
/** job configuration */
|
||||||
private $jobSettings = array();
|
private $jobSettings = array();
|
||||||
|
|
||||||
|
private $twoFactorAuthentication = TwoFactorProviderService::TWO_FACTOR_NONE;
|
||||||
|
private $twoFactorAuthenticationURL = 'https://localhost';
|
||||||
|
private $twoFactorAuthenticationInsecure = false;
|
||||||
|
private $twoFactorAuthenticationLabel = null;
|
||||||
|
private $twoFactorAuthenticationOptional = false;
|
||||||
|
private $twoFactorAuthenticationCaption = '';
|
||||||
|
|
||||||
/** List of all settings in config file */
|
/** List of all settings in config file */
|
||||||
private $settings = array("ServerURL", "useTLS", "followReferrals", 'pagedResults', "Passwd", "Admins", "treesuffix",
|
private $settings = array("ServerURL", "useTLS", "followReferrals", 'pagedResults', "Passwd", "Admins", "treesuffix",
|
||||||
"defaultLanguage", "scriptPath", "scriptServer", "scriptRights", "cachetimeout", 'serverDisplayName',
|
"defaultLanguage", "scriptPath", "scriptServer", "scriptRights", "cachetimeout", 'serverDisplayName',
|
||||||
|
@ -576,7 +586,9 @@ class LAMConfig {
|
||||||
'loginSearchPassword', 'timeZone', 'jobsBindUser', 'jobsBindPassword', 'jobsDatabase', 'jobToken', 'jobs',
|
'loginSearchPassword', 'timeZone', 'jobsBindUser', 'jobsBindPassword', 'jobsDatabase', 'jobToken', 'jobs',
|
||||||
'jobsDBHost', 'jobsDBPort', 'jobsDBUser', 'jobsDBPassword', 'jobsDBName', 'pwdResetAllowSpecificPassword',
|
'jobsDBHost', 'jobsDBPort', 'jobsDBUser', 'jobsDBPassword', 'jobsDBName', 'pwdResetAllowSpecificPassword',
|
||||||
'pwdResetAllowScreenPassword', 'pwdResetForcePasswordChange', 'pwdResetDefaultPasswordOutput',
|
'pwdResetAllowScreenPassword', 'pwdResetForcePasswordChange', 'pwdResetDefaultPasswordOutput',
|
||||||
'scriptUserName', 'scriptSSHKey', 'scriptSSHKeyPassword'
|
'scriptUserName', 'scriptSSHKey', 'scriptSSHKeyPassword', 'twoFactorAuthentication', 'twoFactorAuthenticationURL',
|
||||||
|
'twoFactorAuthenticationInsecure', 'twoFactorAuthenticationLabel', 'twoFactorAuthenticationOptional',
|
||||||
|
'twoFactorAuthenticationCaption'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -816,6 +828,12 @@ class LAMConfig {
|
||||||
if (!in_array("pwdResetAllowScreenPassword", $saved)) array_push($file_array, "\n" . "pwdResetAllowScreenPassword: " . $this->pwdResetAllowScreenPassword . "\n");
|
if (!in_array("pwdResetAllowScreenPassword", $saved)) array_push($file_array, "\n" . "pwdResetAllowScreenPassword: " . $this->pwdResetAllowScreenPassword . "\n");
|
||||||
if (!in_array("pwdResetForcePasswordChange", $saved)) array_push($file_array, "\n" . "pwdResetForcePasswordChange: " . $this->pwdResetForcePasswordChange . "\n");
|
if (!in_array("pwdResetForcePasswordChange", $saved)) array_push($file_array, "\n" . "pwdResetForcePasswordChange: " . $this->pwdResetForcePasswordChange . "\n");
|
||||||
if (!in_array("pwdResetDefaultPasswordOutput", $saved)) array_push($file_array, "\n" . "pwdResetDefaultPasswordOutput: " . $this->pwdResetDefaultPasswordOutput . "\n");
|
if (!in_array("pwdResetDefaultPasswordOutput", $saved)) array_push($file_array, "\n" . "pwdResetDefaultPasswordOutput: " . $this->pwdResetDefaultPasswordOutput . "\n");
|
||||||
|
if (!in_array("twoFactorAuthentication", $saved)) array_push($file_array, "\n" . "twoFactorAuthentication: " . $this->twoFactorAuthentication . "\n");
|
||||||
|
if (!in_array("twoFactorAuthenticationURL", $saved)) array_push($file_array, "\n" . "twoFactorAuthenticationURL: " . $this->twoFactorAuthenticationURL . "\n");
|
||||||
|
if (!in_array("twoFactorAuthenticationInsecure", $saved)) array_push($file_array, "\n" . "twoFactorAuthenticationInsecure: " . $this->twoFactorAuthenticationInsecure . "\n");
|
||||||
|
if (!in_array("twoFactorAuthenticationLabel", $saved)) array_push($file_array, "\n" . "twoFactorAuthenticationLabel: " . $this->twoFactorAuthenticationLabel . "\n");
|
||||||
|
if (!in_array("twoFactorAuthenticationOptional", $saved)) array_push($file_array, "\n" . "twoFactorAuthenticationOptional: " . $this->twoFactorAuthenticationOptional . "\n");
|
||||||
|
if (!in_array("twoFactorAuthenticationCaption", $saved)) array_push($file_array, "\n" . "twoFactorAuthenticationCaption: " . $this->twoFactorAuthenticationCaption . "\n");
|
||||||
// check if all module settings were added
|
// check if all module settings were added
|
||||||
$m_settings = array_keys($this->moduleSettings);
|
$m_settings = array_keys($this->moduleSettings);
|
||||||
for ($i = 0; $i < sizeof($m_settings); $i++) {
|
for ($i = 0; $i < sizeof($m_settings); $i++) {
|
||||||
|
@ -2044,6 +2062,116 @@ class LAMConfig {
|
||||||
public function setPwdResetDefaultPasswordOutput($pwdResetDefaultPasswordOutput) {
|
public function setPwdResetDefaultPasswordOutput($pwdResetDefaultPasswordOutput) {
|
||||||
$this->pwdResetDefaultPasswordOutput = $pwdResetDefaultPasswordOutput;
|
$this->pwdResetDefaultPasswordOutput = $pwdResetDefaultPasswordOutput;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns the authentication type.
|
||||||
|
*
|
||||||
|
* @return string $twoFactorAuthentication authentication type
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthentication() {
|
||||||
|
if (empty($this->twoFactorAuthentication)) {
|
||||||
|
return TwoFactorProviderService::TWO_FACTOR_NONE;
|
||||||
|
}
|
||||||
|
return $this->twoFactorAuthentication;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the authentication type.
|
||||||
|
*
|
||||||
|
* @param string $twoFactorAuthentication authentication type
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthentication($twoFactorAuthentication) {
|
||||||
|
$this->twoFactorAuthentication = $twoFactorAuthentication;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the authentication URL.
|
||||||
|
*
|
||||||
|
* @return string $twoFactorAuthenticationURL authentication URL
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthenticationURL() {
|
||||||
|
return $this->twoFactorAuthenticationURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the authentication URL.
|
||||||
|
*
|
||||||
|
* @param string $twoFactorAuthenticationURL authentication URL
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthenticationURL($twoFactorAuthenticationURL) {
|
||||||
|
$this->twoFactorAuthenticationURL = $twoFactorAuthenticationURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if SSL certificate verification is turned off.
|
||||||
|
*
|
||||||
|
* @return bool $twoFactorAuthenticationInsecure SSL certificate verification is turned off
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthenticationInsecure() {
|
||||||
|
return $this->twoFactorAuthenticationInsecure;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets if SSL certificate verification is turned off.
|
||||||
|
*
|
||||||
|
* @param boolean $twoFactorAuthenticationInsecure SSL certificate verification is turned off
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthenticationInsecure($twoFactorAuthenticationInsecure) {
|
||||||
|
$this->twoFactorAuthenticationInsecure = $twoFactorAuthenticationInsecure;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the authentication label.
|
||||||
|
*
|
||||||
|
* @return string $twoFactorAuthenticationLabel authentication label
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthenticationLabel() {
|
||||||
|
return $this->twoFactorAuthenticationLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the authentication label.
|
||||||
|
*
|
||||||
|
* @param string $twoFactorAuthenticationLabel authentication label
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthenticationLabel($twoFactorAuthenticationLabel) {
|
||||||
|
$this->twoFactorAuthenticationLabel = $twoFactorAuthenticationLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if 2nd factor is optional.
|
||||||
|
*
|
||||||
|
* @return bool $twoFactorAuthenticationOptional 2nd factor is optional
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthenticationOptional() {
|
||||||
|
return $this->twoFactorAuthenticationOptional;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets if 2nd factor is optional.
|
||||||
|
*
|
||||||
|
* @param boolean $twoFactorAuthenticationOptional 2nd factor is optional
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthenticationOptional($twoFactorAuthenticationOptional) {
|
||||||
|
$this->twoFactorAuthenticationOptional = $twoFactorAuthenticationOptional;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the caption HTML.
|
||||||
|
*
|
||||||
|
* @return string $twoFactorAuthenticationCaption caption HTML
|
||||||
|
*/
|
||||||
|
public function getTwoFactorAuthenticationCaption() {
|
||||||
|
return $this->twoFactorAuthenticationCaption;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the caption HTML.
|
||||||
|
*
|
||||||
|
* @param string $twoFactorAuthenticationCaption caption HTML
|
||||||
|
*/
|
||||||
|
public function setTwoFactorAuthenticationCaption($twoFactorAuthenticationCaption) {
|
||||||
|
$this->twoFactorAuthenticationCaption = $twoFactorAuthenticationCaption;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?PHP
|
<?php
|
||||||
|
use \LAM\LIB\TWO_FACTOR\TwoFactorProviderService;
|
||||||
/*
|
/*
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
@ -31,9 +32,11 @@ $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** modules */
|
/** modules */
|
||||||
include_once("modules.inc");
|
include_once "modules.inc";
|
||||||
/** account types */
|
/** account types */
|
||||||
include_once("types.inc");
|
include_once "types.inc";
|
||||||
|
/** 2-factor */
|
||||||
|
include_once '2factor.inc';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns if this is a LAM Pro installation.
|
* Returns if this is a LAM Pro installation.
|
||||||
|
@ -302,11 +305,6 @@ function isSelfService() {
|
||||||
*/
|
*/
|
||||||
class selfServiceProfile {
|
class selfServiceProfile {
|
||||||
|
|
||||||
/** 2factor authentication disabled */
|
|
||||||
const TWO_FACTOR_NONE = 'none';
|
|
||||||
/** 2factor authentication via privacyIDEA */
|
|
||||||
const TWO_FACTOR_PRIVACYIDEA = 'privacyidea';
|
|
||||||
|
|
||||||
/** server address */
|
/** server address */
|
||||||
public $serverURL;
|
public $serverURL;
|
||||||
|
|
||||||
|
@ -381,7 +379,7 @@ class selfServiceProfile {
|
||||||
|
|
||||||
public $timeZone = 'Europe/London';
|
public $timeZone = 'Europe/London';
|
||||||
|
|
||||||
public $twoFactorAuthentication = selfServiceProfile::TWO_FACTOR_NONE;
|
public $twoFactorAuthentication = TwoFactorProviderService::TWO_FACTOR_NONE;
|
||||||
public $twoFactorAuthenticationURL = 'https://localhost';
|
public $twoFactorAuthenticationURL = 'https://localhost';
|
||||||
public $twoFactorAuthenticationInsecure = false;
|
public $twoFactorAuthenticationInsecure = false;
|
||||||
public $twoFactorAuthenticationLabel = null;
|
public $twoFactorAuthenticationLabel = null;
|
||||||
|
@ -425,7 +423,7 @@ class selfServiceProfile {
|
||||||
$this->enforceLanguage = true;
|
$this->enforceLanguage = true;
|
||||||
$this->followReferrals = 0;
|
$this->followReferrals = 0;
|
||||||
$this->timeZone = 'Europe/London';
|
$this->timeZone = 'Europe/London';
|
||||||
$this->twoFactorAuthentication = selfServiceProfile::TWO_FACTOR_NONE;
|
$this->twoFactorAuthentication = TwoFactorProviderService::TWO_FACTOR_NONE;
|
||||||
$this->twoFactorAuthenticationURL = 'https://localhost';
|
$this->twoFactorAuthenticationURL = 'https://localhost';
|
||||||
$this->twoFactorAuthenticationInsecure = false;
|
$this->twoFactorAuthenticationInsecure = false;
|
||||||
$this->twoFactorAuthenticationLabel = null;
|
$this->twoFactorAuthenticationLabel = null;
|
||||||
|
|
|
@ -21,6 +21,7 @@ function app_session_start() {
|
||||||
include_once '../../../../lib/config.inc';
|
include_once '../../../../lib/config.inc';
|
||||||
include_once '../../../../lib/ldap.inc';
|
include_once '../../../../lib/ldap.inc';
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
$config_file = CONFDIR.'config.php';
|
$config_file = CONFDIR.'config.php';
|
||||||
$config = check_config($config_file);
|
$config = check_config($config_file);
|
||||||
# If we came via index.php, then set our $config.
|
# If we came via index.php, then set our $config.
|
||||||
|
|
|
@ -4,7 +4,7 @@ $Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2006 Tilo Lutz
|
Copyright (C) 2003 - 2006 Tilo Lutz
|
||||||
2005 - 2016 Roland Gruber
|
2005 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -47,6 +47,7 @@ include_once('../../lib/modules.inc');
|
||||||
|
|
||||||
// Start session
|
// Start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// Redirect to startpage if user is not loged in
|
// Redirect to startpage if user is not loged in
|
||||||
if (!isLoggedIn()) {
|
if (!isLoggedIn()) {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
use \LAM\LIB\TWO_FACTOR\TwoFactorProviderService;
|
||||||
/*
|
/*
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -37,6 +38,8 @@ include_once("../../lib/config.inc");
|
||||||
include_once("../../lib/modules.inc");
|
include_once("../../lib/modules.inc");
|
||||||
/** access to tools */
|
/** access to tools */
|
||||||
include_once("../../lib/tools.inc");
|
include_once("../../lib/tools.inc");
|
||||||
|
/** 2-factor */
|
||||||
|
include_once '../../lib/2facto.inc';
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
if (strtolower(session_module_name()) == 'files') {
|
if (strtolower(session_module_name()) == 'files') {
|
||||||
|
@ -523,8 +526,40 @@ $searchPasswordInput->setIsPassword(true);
|
||||||
$securitySettingsContent->addElement($searchPasswordInput, true);
|
$securitySettingsContent->addElement($searchPasswordInput, true);
|
||||||
// HTTP authentication
|
// HTTP authentication
|
||||||
$securitySettingsContent->addElement(new htmlTableExtendedInputCheckbox('httpAuthentication', ($conf->getHttpAuthentication() == 'true'), _('HTTP authentication'), '223', true), true);
|
$securitySettingsContent->addElement(new htmlTableExtendedInputCheckbox('httpAuthentication', ($conf->getHttpAuthentication() == 'true'), _('HTTP authentication'), '223', true), true);
|
||||||
$securitySettingsContent->addElement(new htmlSpacer(null, '10px'), true);
|
$securitySettingsContent->addElement(new htmlSpacer(null, '30px'), true);
|
||||||
|
|
||||||
|
// 2factor authentication
|
||||||
|
if (extension_loaded('curl')) {
|
||||||
|
$securitySettingsContent->addElement(new htmlSubTitle(_("2-factor authentication")), true);
|
||||||
|
$twoFactorOptions = array(
|
||||||
|
_('None') => TwoFactorProviderService::TWO_FACTOR_NONE,
|
||||||
|
_('privacyIDEA') => TwoFactorProviderService::TWO_FACTOR_PRIVACYIDEA,
|
||||||
|
);
|
||||||
|
$twoFactorSelect = new htmlTableExtendedSelect('twoFactor', $twoFactorOptions, array($conf->getTwoFactorAuthentication()), _('Provider'), '514');
|
||||||
|
$twoFactorSelect->setHasDescriptiveElements(true);
|
||||||
|
$twoFactorSelect->setTableRowsToHide(array(
|
||||||
|
TwoFactorProviderService::TWO_FACTOR_NONE => array('twoFactorURL', 'twoFactorInsecure', 'twoFactorLabel', 'twoFactorOptional', 'twoFactorCaption')
|
||||||
|
));
|
||||||
|
$twoFactorSelect->setTableRowsToShow(array(
|
||||||
|
TwoFactorProviderService::TWO_FACTOR_PRIVACYIDEA => array('twoFactorURL', 'twoFactorInsecure', 'twoFactorLabel', 'twoFactorOptional', 'twoFactorCaption')
|
||||||
|
));
|
||||||
|
$securitySettingsContent->addElement($twoFactorSelect, true);
|
||||||
|
$twoFactorUrl = new htmlTableExtendedInputField(_("Base URL"), 'twoFactorURL', $conf->getTwoFactorAuthenticationURL(), '515');
|
||||||
|
$twoFactorUrl->setRequired(true);
|
||||||
|
$securitySettingsContent->addElement($twoFactorUrl, true);
|
||||||
|
$twoFactorLabel = new htmlTableExtendedInputField(_("Label"), 'twoFactorLabel', $conf->getTwoFactorAuthenticationLabel(), '517');
|
||||||
|
$securitySettingsContent->addElement($twoFactorLabel, true);
|
||||||
|
$securitySettingsContent->addElement(new htmlTableExtendedInputCheckbox('twoFactorOptional', $conf->getTwoFactorAuthenticationOptional(), _('Optional'), '519'), true);
|
||||||
|
$securitySettingsContent->addElement(new htmlTableExtendedInputCheckbox('twoFactorInsecure', $conf->getTwoFactorAuthenticationInsecure(), _('Disable certificate check'), '516'), true);
|
||||||
|
$securitySettingsContent->addElement(new htmlSpacer(null, '5px'), true);
|
||||||
|
$twoFactorCaption = new htmlTableExtendedInputTextarea('twoFactorCaption', $conf->getTwoFactorAuthenticationCaption(), '80', '4', _("Caption"), '518');
|
||||||
|
$twoFactorCaption->setIsRichEdit(true);
|
||||||
|
$twoFactorCaption->alignment = htmlElement::ALIGN_TOP;
|
||||||
|
$securitySettingsContent->addElement($twoFactorCaption, true);
|
||||||
|
}
|
||||||
|
|
||||||
// new password
|
// new password
|
||||||
|
$securitySettingsContent->addElement(new htmlSubTitle(_("Profile password")), true);
|
||||||
$password1 = new htmlTableExtendedInputField(_("New password"), 'passwd1', null, '212');
|
$password1 = new htmlTableExtendedInputField(_("New password"), 'passwd1', null, '212');
|
||||||
$password1->setIsPassword(true);
|
$password1->setIsPassword(true);
|
||||||
$password2 = new htmlTableExtendedInputField(_("Reenter password"), 'passwd2');
|
$password2 = new htmlTableExtendedInputField(_("Reenter password"), 'passwd2');
|
||||||
|
@ -551,10 +586,12 @@ $buttonContainer->addElement($cancelButton, true);
|
||||||
$buttonContainer->addElement(new htmlSpacer(null, '10px'), true);
|
$buttonContainer->addElement(new htmlSpacer(null, '10px'), true);
|
||||||
parseHtml(null, $buttonContainer, array(), false, $tabindex, 'user');
|
parseHtml(null, $buttonContainer, array(), false, $tabindex, 'user');
|
||||||
|
|
||||||
echo "</form>\n";
|
?>
|
||||||
echo "</body>\n";
|
</form>
|
||||||
echo "</html>\n";
|
<script type="text/javascript" src="../lib/extra/ckeditor/ckeditor.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks user input and saves the entered settings.
|
* Checks user input and saves the entered settings.
|
||||||
|
@ -711,6 +748,15 @@ function checkInput() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$conf->setToolSettings($toolSettings);
|
$conf->setToolSettings($toolSettings);
|
||||||
|
// 2-factor
|
||||||
|
if (extension_loaded('curl')) {
|
||||||
|
$conf->setTwoFactorAuthentication($_POST['twoFactor']);
|
||||||
|
$conf->setTwoFactorAuthenticationURL($_POST['twoFactorURL']);
|
||||||
|
$conf->setTwoFactorAuthenticationInsecure(isset($_POST['twoFactorInsecure']) && ($_POST['twoFactorInsecure'] == 'on'));
|
||||||
|
$conf->setTwoFactorAuthenticationLabel($_POST['twoFactorLabel']);
|
||||||
|
$conf->setTwoFactorAuthenticationOptional(isset($_POST['twoFactorOptional']) && ($_POST['twoFactorOptional'] == 'on'));
|
||||||
|
$conf->setTwoFactorAuthenticationCaption(str_replace(array("\r", "\n"), array('', ''), $_POST['twoFactorCaption']));
|
||||||
|
}
|
||||||
// check if password was changed
|
// check if password was changed
|
||||||
if (isset($_POST['passwd1']) && ($_POST['passwd1'] != '')) {
|
if (isset($_POST['passwd1']) && ($_POST['passwd1'] != '')) {
|
||||||
if ($_POST['passwd1'] != $_POST['passwd2']) {
|
if ($_POST['passwd1'] != $_POST['passwd2']) {
|
||||||
|
|
|
@ -49,6 +49,7 @@ include_once('../lib/modules.inc');
|
||||||
|
|
||||||
// Start session
|
// Start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
if (!checkIfWriteAccessIsAllowed()) {
|
if (!checkIfWriteAccessIsAllowed()) {
|
||||||
die();
|
die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2015 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +39,7 @@ include_once("../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
if (!checkIfWriteAccessIsAllowed()) {
|
if (!checkIfWriteAccessIsAllowed()) {
|
||||||
die();
|
die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2007 - 2013 Roland Gruber
|
Copyright (C) 2007 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +39,7 @@ include_once("../../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -38,6 +38,7 @@ include_once("../../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2010 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +39,7 @@ include_once("../../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
use LAM\LIB\TWO_FACTOR\TwoFactorProviderService;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
@ -324,6 +326,14 @@ function display_LoginPage($config_object, $cfgMain) {
|
||||||
StatusMessage("INFO", _("Your settings were successfully saved."), htmlspecialchars($_GET['selfserviceSaveOk']));
|
StatusMessage("INFO", _("Your settings were successfully saved."), htmlspecialchars($_GET['selfserviceSaveOk']));
|
||||||
echo "<br>";
|
echo "<br>";
|
||||||
}
|
}
|
||||||
|
if (isset($_GET['2factor']) && ($_GET['2factor'] == 'error')) {
|
||||||
|
StatusMessage('ERROR', _("Unable to start 2-factor authentication."));
|
||||||
|
echo "<br>";
|
||||||
|
}
|
||||||
|
elseif (isset($_GET['2factor']) && ($_GET['2factor'] == 'noToken')) {
|
||||||
|
StatusMessage('ERROR', _("Unable to start 2-factor authentication because no tokens were found."));
|
||||||
|
echo "<br>";
|
||||||
|
}
|
||||||
if (!empty($config_object)) {
|
if (!empty($config_object)) {
|
||||||
?>
|
?>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
@ -636,8 +646,20 @@ if(!empty($_POST['checklogin'])) {
|
||||||
addSecurityTokenToSession();
|
addSecurityTokenToSession();
|
||||||
// logging
|
// logging
|
||||||
logNewMessage(LOG_NOTICE, 'User ' . $username . ' (' . $clientSource . ') successfully logged in.');
|
logNewMessage(LOG_NOTICE, 'User ' . $username . ' (' . $clientSource . ') successfully logged in.');
|
||||||
// Load main frame
|
// Load main frame or 2 factor page
|
||||||
metaRefresh("./main.php");
|
if ($_SESSION['config']->getTwoFactorAuthentication() == TwoFactorProviderService::TWO_FACTOR_NONE) {
|
||||||
|
metaRefresh("./main.php");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_SESSION['2factorRequired'] = true;
|
||||||
|
if (($_SESSION['config']->getLoginMethod() == LAMConfig::LOGIN_SEARCH) && ($_SESSION['config']->getHttpAuthentication() == 'true')) {
|
||||||
|
$_SESSION['user2factor'] = $_SERVER['PHP_AUTH_USER'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_SESSION['user2factor'] = $_POST['username'];
|
||||||
|
}
|
||||||
|
metaRefresh("./login2Factor.php");
|
||||||
|
}
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -0,0 +1,241 @@
|
||||||
|
<?php
|
||||||
|
namespace LAM\LOGIN;
|
||||||
|
use \LAM\LIB\TWO_FACTOR\TwoFactorProviderService;
|
||||||
|
use \htmlResponsiveRow;
|
||||||
|
use \htmlGroup;
|
||||||
|
use \htmlOutputText;
|
||||||
|
use \htmlSpacer;
|
||||||
|
use \htmlSelect;
|
||||||
|
use \htmlInputField;
|
||||||
|
use \htmlButton;
|
||||||
|
/*
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
|
Copyright (C) 2017 Roland Gruber
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This page redirects to the correct start page after checking 2nd factor.
|
||||||
|
*
|
||||||
|
* @package main
|
||||||
|
* @author Roland Gruber
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** config object */
|
||||||
|
include_once '../lib/config.inc';
|
||||||
|
|
||||||
|
// start session
|
||||||
|
startSecureSession();
|
||||||
|
|
||||||
|
setlanguage();
|
||||||
|
|
||||||
|
$config = $_SESSION['config'];
|
||||||
|
$ldap = $_SESSION['ldap'];
|
||||||
|
$credentials = $ldap->decrypt_login();
|
||||||
|
$password = $credentials[1];
|
||||||
|
$user = $_SESSION['user2factor'];
|
||||||
|
if (get_preg($user, 'dn')) {
|
||||||
|
$user = extractRDNValue($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get serials
|
||||||
|
try {
|
||||||
|
$service = new TwoFactorProviderService($config);
|
||||||
|
$provider = $service->getProvider();
|
||||||
|
$serials = $provider->getSerials($user, $password);
|
||||||
|
}
|
||||||
|
catch (\Exception $e) {
|
||||||
|
logNewMessage(LOG_ERR, 'Unable to get 2-factor serials for ' . $user . ' ' . $e->getMessage());
|
||||||
|
metaRefresh("login.php?2factor=error");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
$twoFactorLabel = empty($config->getTwoFactorAuthenticationLabel()) ? _('PIN+Token') : $config->getTwoFactorAuthenticationLabel();
|
||||||
|
|
||||||
|
if (sizeof($serials) == 0) {
|
||||||
|
if ($config->getTwoFactorAuthenticationOptional()) {
|
||||||
|
unset($_SESSION['2factorRequired']);
|
||||||
|
unset($_SESSION['user2factor']);
|
||||||
|
metaRefresh("main.php");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
metaRefresh("login.php?2factor=noToken");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['logout'])) {
|
||||||
|
// destroy session
|
||||||
|
session_destroy();
|
||||||
|
unset($_SESSION);
|
||||||
|
// redirect to login page
|
||||||
|
metaRefresh("login.php");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['submit'])) {
|
||||||
|
$twoFactorInput = $_POST['2factor'];
|
||||||
|
$serial = $_POST['serial'];
|
||||||
|
if (empty($twoFactorInput) || !in_array($serial, $serials)) {
|
||||||
|
$errorMessage = _(sprintf('Please enter "%s".', $twoFactorLabel));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$twoFactorValid = false;
|
||||||
|
try {
|
||||||
|
$twoFactorValid = $provider->verify2ndFactor($user, $password, $serial, $twoFactorInput);
|
||||||
|
}
|
||||||
|
catch (\Exception $e) {
|
||||||
|
logNewMessage(LOG_WARNING, '2-factor verification failed: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
if ($twoFactorValid) {
|
||||||
|
unset($_SESSION['2factorRequired']);
|
||||||
|
unset($_SESSION['user2factor']);
|
||||||
|
metaRefresh("main.php");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$errorMessage = _(sprintf('Verification failed.', $twoFactorLabel));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html class="no-js">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<title><?php echo _("Login"); ?></title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../style/responsive/105_normalize.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../style/responsive/110_foundation.css">
|
||||||
|
<?php
|
||||||
|
// include all CSS files
|
||||||
|
$cssDirName = dirname(__FILE__) . '/../style';
|
||||||
|
$cssDir = dir($cssDirName);
|
||||||
|
$cssFiles = array();
|
||||||
|
$cssEntry = $cssDir->read();
|
||||||
|
while ($cssEntry !== false) {
|
||||||
|
if (substr($cssEntry, strlen($cssEntry) - 4, 4) == '.css') {
|
||||||
|
$cssFiles[] = $cssEntry;
|
||||||
|
}
|
||||||
|
$cssEntry = $cssDir->read();
|
||||||
|
}
|
||||||
|
sort($cssFiles);
|
||||||
|
foreach ($cssFiles as $cssEntry) {
|
||||||
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/" . $cssEntry . "\">\n";
|
||||||
|
}
|
||||||
|
if (isset($profile->additionalCSS) && ($profile->additionalCSS != '')) {
|
||||||
|
$CSSlinks = explode("\n", $profile->additionalCSS);
|
||||||
|
for ($i = 0; $i < sizeof($CSSlinks); $i++) {
|
||||||
|
$CSSlinks[$i] = trim($CSSlinks[$i]);
|
||||||
|
if ($CSSlinks[$i] == '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"" . $CSSlinks[$i] . "\">\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</head>
|
||||||
|
<body class="admin">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// include all JavaScript files
|
||||||
|
$jsDirName = dirname(__FILE__) . '/lib';
|
||||||
|
$jsDir = dir($jsDirName);
|
||||||
|
$jsFiles = array();
|
||||||
|
while ($jsEntry = $jsDir->read()) {
|
||||||
|
if (substr($jsEntry, strlen($jsEntry) - 3, 3) != '.js') continue;
|
||||||
|
$jsFiles[] = $jsEntry;
|
||||||
|
}
|
||||||
|
sort($jsFiles);
|
||||||
|
foreach ($jsFiles as $jsEntry) {
|
||||||
|
echo "<script type=\"text/javascript\" src=\"lib/" . $jsEntry . "\"></script>\n";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="lib/extra/responsive/200_modernizr.js"></script>
|
||||||
|
<script type="text/javascript" src="lib/extra/responsive/250_foundation.js"></script>
|
||||||
|
<table border=0 width="100%" class="lamHeader ui-corner-all">
|
||||||
|
<tr>
|
||||||
|
<td align="left" height="30">
|
||||||
|
<a class="lamLogo" href="http://www.ldap-account-manager.org/" target="new_window">LDAP Account Manager</a>
|
||||||
|
</td>
|
||||||
|
<td align="right" height=20>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<form enctype="multipart/form-data" action="login2Factor.php" method="post" autocomplete="off">
|
||||||
|
<?php
|
||||||
|
echo $config->getTwoFactorAuthenticationCaption();
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div class="centeredTable">
|
||||||
|
<div class="roundedShadowBox limitWidth">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$group = new htmlGroup();
|
||||||
|
$row = new htmlResponsiveRow();
|
||||||
|
// error
|
||||||
|
if (!empty($errorMessage)) {
|
||||||
|
$row->add(new \htmlStatusMessage('ERROR', $errorMessage), 12);
|
||||||
|
$row->add(new htmlSpacer('1em', '1em'), 12);
|
||||||
|
}
|
||||||
|
// serial
|
||||||
|
$row->add(new htmlOutputText(_('Serial number')), 12, 12, 12, 'text-left');
|
||||||
|
$serialSelect = new htmlSelect('serial', $serials);
|
||||||
|
$row->add($serialSelect, 12);
|
||||||
|
// token
|
||||||
|
$row->add(new htmlOutputText($twoFactorLabel), 12, 12, 12, 'text-left');
|
||||||
|
$twoFactorInput = new htmlInputField('2factor', '');
|
||||||
|
$twoFactorInput->setFieldSize(null);
|
||||||
|
$twoFactorInput->setIsPassword(true);
|
||||||
|
$row->add($twoFactorInput, 12);
|
||||||
|
$row->add(new htmlSpacer('1em', '1em'), 12);
|
||||||
|
$submit = new htmlButton('submit', _("Submit"));
|
||||||
|
$submit->setCSSClasses(array('fullwidth'));
|
||||||
|
$row->add($submit, 12, 12, 12, 'fullwidth');
|
||||||
|
$row->add(new htmlSpacer('0.5em', '0.5em'), 12);
|
||||||
|
$logout = new htmlButton('logout', _("Cancel"));
|
||||||
|
$logout->setCSSClasses(array('fullwidth'));
|
||||||
|
$row->add($logout, 12);
|
||||||
|
$group->addElement($row);
|
||||||
|
|
||||||
|
$tabindex = 1;
|
||||||
|
addSecurityTokenToMetaHTML($group);
|
||||||
|
parseHtml(null, $group, array(), false, $tabindex, 'user');
|
||||||
|
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).foundation();
|
||||||
|
myElement = document.getElementsByName('2factor')[0];
|
||||||
|
myElement.focus();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2006 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -44,6 +44,7 @@ include_once("../lib/ldap.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// log message
|
// log message
|
||||||
$ldapUser = $_SESSION['ldap']->decrypt_login();
|
$ldapUser = $_SESSION['ldap']->decrypt_login();
|
||||||
|
|
|
@ -4,7 +4,7 @@ namespace LAM\INIT;
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -36,6 +36,7 @@ include_once '../lib/profiles.inc';
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ class lamAjax {
|
||||||
validateSecurityToken(false);
|
validateSecurityToken(false);
|
||||||
|
|
||||||
if (isset($_GET['module']) && isset($_GET['scope']) && in_array($_GET['module'], getAvailableModules($_GET['scope']))) {
|
if (isset($_GET['module']) && isset($_GET['scope']) && in_array($_GET['module'], getAvailableModules($_GET['scope']))) {
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
if (isset($_GET['useContainer']) && ($_GET['useContainer'] == '1')) {
|
if (isset($_GET['useContainer']) && ($_GET['useContainer'] == '1')) {
|
||||||
if (!isset($_SESSION['account'])) die();
|
if (!isset($_SESSION['account'])) die();
|
||||||
$module = $_SESSION['account']->getAccountModule($_GET['module']);
|
$module = $_SESSION['account']->getAccountModule($_GET['module']);
|
||||||
|
@ -82,12 +83,13 @@ class lamAjax {
|
||||||
}
|
}
|
||||||
|
|
||||||
$jsonInput = $_POST['jsonInput'];
|
$jsonInput = $_POST['jsonInput'];
|
||||||
|
if ($function == 'passwordStrengthCheck') {
|
||||||
|
lamAjax::checkPasswordStrength($jsonInput);
|
||||||
|
}
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
if ($function == 'passwordChange') {
|
if ($function == 'passwordChange') {
|
||||||
lamAjax::managePasswordChange($jsonInput);
|
lamAjax::managePasswordChange($jsonInput);
|
||||||
}
|
}
|
||||||
elseif ($function == 'passwordStrengthCheck') {
|
|
||||||
lamAjax::checkPasswordStrength($jsonInput);
|
|
||||||
}
|
|
||||||
elseif ($function == 'upload') {
|
elseif ($function == 'upload') {
|
||||||
include_once('../../lib/upload.inc');
|
include_once('../../lib/upload.inc');
|
||||||
$typeManager = new \LAM\TYPES\TypeManager();
|
$typeManager = new \LAM\TYPES\TypeManager();
|
||||||
|
|
|
@ -21,7 +21,7 @@ use \htmlInputTextarea;
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2013 - 2016 Roland Gruber
|
Copyright (C) 2013 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -57,6 +57,7 @@ include_once("../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -50,6 +50,7 @@ include_once("../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -15,13 +15,12 @@ use \htmlInputFileUpload;
|
||||||
use \htmlHelpLink;
|
use \htmlHelpLink;
|
||||||
use \htmlInputField;
|
use \htmlInputField;
|
||||||
use \htmlHiddenInput;
|
use \htmlHiddenInput;
|
||||||
use \htmlDiv;
|
|
||||||
/*
|
/*
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2006 Michael Duergner
|
Copyright (C) 2003 - 2006 Michael Duergner
|
||||||
2005 - 2016 Roland Gruber
|
2005 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -60,6 +59,7 @@ include_once("../../lib/modules.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -19,7 +19,7 @@ $Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2006 Michael Duergner
|
Copyright (C) 2003 - 2006 Michael Duergner
|
||||||
2007 - 2016 Roland Gruber
|
2007 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -62,6 +62,7 @@ include_once('../../lib/xml_parser.inc');
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -18,7 +18,7 @@ use \htmlInputField;
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -54,6 +54,7 @@ include_once("../../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -12,7 +12,7 @@ use \htmlHiddenInput;
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2016 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -52,6 +52,7 @@ include_once("../../lib/status.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
Copyright (C) 2004 David Smith
|
Copyright (C) 2004 David Smith
|
||||||
modified to fit for LDAP Account Manager 2005 - 2012 Roland Gruber
|
modified to fit for LDAP Account Manager 2005 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -42,6 +42,7 @@ require_once("../../lib/schema.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
checkIfToolIsActive('toolSchemaBrowser');
|
checkIfToolIsActive('toolSchemaBrowser');
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2009 - 2012 Roland Gruber
|
Copyright (C) 2009 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -35,6 +35,7 @@ include_once("../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
checkIfToolIsActive('toolServerInformation');
|
checkIfToolIsActive('toolServerInformation');
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2006 - 2012 Roland Gruber
|
Copyright (C) 2006 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -35,6 +35,7 @@ include_once("../../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2006 - 2016 Roland Gruber
|
Copyright (C) 2006 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -36,6 +36,7 @@ include_once("../../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2007 - 2016 Roland Gruber
|
Copyright (C) 2007 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,6 +39,7 @@ include_once("../../lib/schema.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// die if no write access
|
// die if no write access
|
||||||
if (!checkIfWriteAccessIsAllowed()) die();
|
if (!checkIfWriteAccessIsAllowed()) die();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2003 - 2011 Roland Gruber
|
Copyright (C) 2003 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -37,6 +37,7 @@ include_once("../lib/tools.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||||
Copyright (C) 2010 - 2011 Roland Gruber
|
Copyright (C) 2010 - 2017 Roland Gruber
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -36,6 +36,7 @@ include_once("../../lib/config.inc");
|
||||||
|
|
||||||
// start session
|
// start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
setlanguage();
|
setlanguage();
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ include_once('../../lib/modules.inc');
|
||||||
|
|
||||||
// Start session
|
// Start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// check if this tool may be run
|
// check if this tool may be run
|
||||||
checkIfToolIsActive('toolFileUpload');
|
checkIfToolIsActive('toolFileUpload');
|
||||||
|
|
|
@ -45,6 +45,7 @@ include_once('../../lib/pdf.inc');
|
||||||
|
|
||||||
// Start session
|
// Start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// check if this tool may be run
|
// check if this tool may be run
|
||||||
checkIfToolIsActive('toolFileUpload');
|
checkIfToolIsActive('toolFileUpload');
|
||||||
|
|
|
@ -62,6 +62,7 @@ include_once('../../lib/upload.inc');
|
||||||
|
|
||||||
// Start session
|
// Start session
|
||||||
startSecureSession();
|
startSecureSession();
|
||||||
|
enforceUserIsLoggedIn();
|
||||||
|
|
||||||
// check if this tool may be run
|
// check if this tool may be run
|
||||||
checkIfToolIsActive('toolFileUpload');
|
checkIfToolIsActive('toolFileUpload');
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
/*.jpg
|
|
Loading…
Reference in New Issue