mirror of
https://github.com/til-schneider/slim-wiki.git
synced 2025-08-08 09:36:42 +02:00
Added login via base authentication
This commit is contained in:
@@ -13,7 +13,32 @@ class EditorService {
|
|||||||
return ($methodName == 'saveArticle' || $methodName == 'createUserConfig');
|
return ($methodName == 'saveArticle' || $methodName == 'createUserConfig');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns one of: 'logged-in', 'no-credentials', 'wrong-credentials'
|
||||||
|
public function getLoginState() {
|
||||||
|
if (!isset($_SERVER['PHP_AUTH_USER'])) {
|
||||||
|
return 'no-credentials';
|
||||||
|
} else {
|
||||||
|
$userInfo = $this->context->getConfig()['user.' . $_SERVER['PHP_AUTH_USER']];
|
||||||
|
if (isset($userInfo)) {
|
||||||
|
$loginHash = hash($userInfo['type'], $_SERVER['PHP_AUTH_PW'] . $userInfo['salt']);
|
||||||
|
if ($loginHash == $userInfo['hash']) {
|
||||||
|
return 'logged-in';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'wrong-credentials';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertLoggedIn() {
|
||||||
|
if ($this->getLoginState() != 'logged-in') {
|
||||||
|
throw new Exception('Not logged in');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function saveArticle($articleFilename, $markdownText) {
|
public function saveArticle($articleFilename, $markdownText) {
|
||||||
|
$this->assertLoggedIn();
|
||||||
|
|
||||||
if (! $this->context->isValidArticleFilename($articleFilename)) {
|
if (! $this->context->isValidArticleFilename($articleFilename)) {
|
||||||
throw new Exception("Invalid article filename: '$articleFilename'");
|
throw new Exception("Invalid article filename: '$articleFilename'");
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,17 @@ class Main {
|
|||||||
$mode = 'view';
|
$mode = 'view';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($mode == 'edit') {
|
||||||
|
$loginState = $this->context->getEditorService()->getLoginState();
|
||||||
|
if ($loginState != 'logged-in') {
|
||||||
|
$wikiName = $this->context->getConfig()['wikiName'];
|
||||||
|
header('WWW-Authenticate: Basic realm="'.$wikiName.'"');
|
||||||
|
header('HTTP/1.0 401 Unauthorized');
|
||||||
|
|
||||||
|
$mode = 'view';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$articleFilename = $this->getArticleFilename($requestPathArray);
|
$articleFilename = $this->getArticleFilename($requestPathArray);
|
||||||
if ($articleFilename == null) {
|
if ($articleFilename == null) {
|
||||||
header('HTTP/1.0 404 Not Found');
|
header('HTTP/1.0 404 Not Found');
|
||||||
|
Reference in New Issue
Block a user