forked from verdnatura/hedera-web
95 lines
1.9 KiB
PHP
Executable File
95 lines
1.9 KiB
PHP
Executable File
<?php
|
|
|
|
class Login extends Vn\Web\JsonRequest
|
|
{
|
|
function run ($db)
|
|
{
|
|
try {
|
|
$this->updateCredentials ($db);
|
|
//$this->updateCredentialsLdap ($db);
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
error_log ($e->getMessage ());
|
|
}
|
|
|
|
$token = $this->service->createToken (
|
|
$_SESSION['user'],
|
|
!empty ($_POST['remember'])
|
|
);
|
|
|
|
return [
|
|
'login' => TRUE,
|
|
'token' => $token
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Updates the user credentials in other user databases like Samba
|
|
* LDAP .
|
|
**/
|
|
function updateCredentialsLdap ($db)
|
|
{
|
|
$host = $ldapConf['host'];
|
|
|
|
if ($ldapConf->secure)
|
|
$ldapHost = "ldaps://$host";
|
|
else
|
|
$ldapHost = "ldap://$host";
|
|
|
|
$ldap = ldap_connect ($ldapHost, $ldapConf['port']);
|
|
|
|
if (!ldap_bind ($ldap, $ldapConf['user'], $ldapConf['password']))
|
|
throw new Exception ('LDAP authentication failed');
|
|
|
|
error_log ('Connected to LDAP!');
|
|
}
|
|
|
|
/**
|
|
* Updates the user credentials in other user databases like Samba.
|
|
**/
|
|
function updateCredentials ($db)
|
|
{
|
|
if (empty ($_POST['password']))
|
|
return;
|
|
|
|
$hasAccount = $db->getValue (
|
|
'SELECT COUNT(*) > 0
|
|
FROM account.user u
|
|
JOIN account.account a ON u.id = a.id
|
|
WHERE u.name = #',
|
|
[$_SESSION['user']]
|
|
);
|
|
|
|
if (!$hasAccount)
|
|
return;
|
|
|
|
$sshConf = $db->getRow ('SELECT host, user, password FROM ssh_config');
|
|
|
|
$ssh = ssh2_connect ($sshConf['host']);
|
|
|
|
if (!$ssh)
|
|
throw new Exception ("Can't connect to SSH server {$sshConf['host']}");
|
|
|
|
$sshAuth = ssh2_auth_password ($ssh,
|
|
$sshConf['user'], base64_decode ($sshConf['password']));
|
|
|
|
if (!$sshAuth)
|
|
throw new Exception ("SSH authentication failed");
|
|
|
|
$user = $this->escape ($_SESSION['user']);
|
|
$pass = $this->escape ($_POST['password']);
|
|
$stream = ssh2_exec ($ssh, "samba-tool user create \"$user\" \"$pass\"");
|
|
}
|
|
|
|
/**
|
|
* Escapes the double quotes from an string.
|
|
**/
|
|
function escape ($str)
|
|
{
|
|
return str_replace ('"', '\\"', $str);
|
|
}
|
|
}
|
|
|
|
?>
|