This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
Incam_SGD/webservice/classes/atompub/KT_atom_HTTPauth.inc.php

63 lines
2.0 KiB
PHP

<?php
class KT_atom_HTTPauth{
public static function getCredentials(){
// Workaround for mod_auth when running php cgi
if(!isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['HTTP_AUTHORIZATION'])){
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}
$credentials=array('user'=>'','pass'=>'','method'=>'');
if(isset($_SERVER['PHP_AUTH_USER'])){
$credentials['user']=$_SERVER['PHP_AUTH_USER'];
$credentials['pass']=isset($_SERVER['PHP_AUTH_PW'])?$_SERVER['PHP_AUTH_PW']:'';
$credentials['method']=isset($_SERVER['AUTH_TYPE'])?$_SERVER['AUTH_TYPE']:'';
}else{
if(isset($_SERVER['kt_auth']) || isset($_SERVER['REDIRECT_kt_auth'])){
$ktauth=isset($_SERVER['kt_auth'])?$_SERVER['kt_auth']:$_SERVER['REDIRECT_kt_auth'];
list($authMethod,$authCred)=split(' ',$ktauth);
$authMethod=strtolower(trim($authMethod));
$authCred=base64_decode(trim($authCred));
list($authUser,$authPass)=split(':',$authCred);
$credentials['method']=$authMethod;
$credentials['user']=$authUser;
$credentials['pass']=$authPass;
}
}
return $credentials;
}
public static function requireBasicAuth($realm='default',$message=''){
$realm=$realm?$realm:'default';
header('WWW-Authenticate: Basic Realm="'.$realm.'"');
header('HTTP/1.0 401 Unauthorized');
echo $message;
exit;
}
public static function isLoggedIn(){
$kt=new KTAPI();
$session=$kt->get_active_session(session_id());
return !PEAR::isError($session);
}
public static function logout(){
$kt=new KTAPI();
$session=$kt->get_active_session(session_id());
if(!PEAR::isError($session)){
$session->logout();
}
}
public static function login($realm,$msg){
$kt=new KTAPI();
$session=$kt->get_active_session(session_id());
if(PEAR::isError($session)){
$cred=self::getCredentials();
$kt->login($cred['user'],$cred['pass']);
if(self::isLoggedIn())return;
}
self::requireBasicAuth($realm,$msg);
}
}
?>