Newer
Older
<?php
class OauthController extends PluginController
{
public function request_access_token_action()
{
URLHelper::setBaseURL($GLOBALS['ABSOLUTE_URI_STUDIP']);
//Muss den Nutzer weiterleiten auf den Server, wo der Nutzer die App freischaltet
$owncloud = Config::get()->OWNCLOUD_ENDPOINT ?: UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ENDPOINT_USER;
if ($owncloud[strlen($owncloud) - 1] !== "/") {
$owncloud .= "/";
}
$client_id = Config::get()->OWNCLOUD_CLIENT_ID ?: UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_CLIENT_ID_USER;
$redirect_uri = PluginEngine::getURL($this->plugin, array(), "oauth/receive_access_token", true);
$url .= "?state=".urlencode($_SESSION['oauth2state'])
. "&response_type=code"
. "&redirect_uri=".urlencode($redirect_uri)
. "&client_id=".urlencode($client_id);
$this->render_nothing();
}
public function receive_access_token_action()
{
//Save the access token and refresh-token
$owncloud = Config::get()->OWNCLOUD_ENDPOINT ?: UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ENDPOINT_USER;
if ($owncloud[strlen($owncloud) - 1] !== "/") {
$owncloud .= "/";
}
if (Request::get("state") !== $_SESSION['oauth2state']) {
throw new AccessDeniedException();
}
$client_id = \Config::get()->OWNCLOUD_CLIENT_ID ?: \UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_CLIENT_ID_USER; // The client ID assigned to you by the provider
$client_secret = \Config::get()->OWNCLOUD_CLIENT_SECRET ?: \UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_CLIENT_SECRET_USER; // The client password assigned to you by the provider
$redirect_uri = PluginEngine::getURL($this->plugin, array(), "oauth/receive_access_token", true);
$payload = array(
'grant_type' => "authorization_code",
'code' => Request::get("code"),
'client_id' => $client_id,
'client_secret' => $client_secret,
'format' => "json"
$header = array();
$header[] = "Accept: application/json";
$header[] = "Authorization: Basic ".base64_encode($client_id . ":" .$client_secret);
curl_setopt($r, CURLOPT_URL, $owncloud."index.php/apps/oauth2/api/v1/token?grant_type=authorization_code&code=".urlencode(Request::get("code"))."&redirect_uri=".urlencode($redirect_uri)); //nextcloud
curl_setopt($r, CURLOPT_SSL_VERIFYPEER, (bool) Config::get()->OWNCLOUD_SSL_VERIFYPEER);
curl_setopt($r, CURLOPT_SSL_VERIFYHOST, (bool) Config::get()->OWNCLOUD_SSL_VERIFYPEER);
if (!empty($GLOBALS['OWNCLOUD_VERBOSE'])) {
PageLayout::postError(_("Authentifizierungsfehler:")." ".$json['error']);
$this->redirect(URLHelper::getURL("dispatch.php/files/index"));
} else {
if ($response === false) {
PageLayout::postError(_("Fehler beim Abrufen der OAuth-Token:"), array(curl_error($r)));
}
if (false) {
var_dump($json);
$this->render_nothing();
return;
}
$config = \UserConfig::get($GLOBALS['user']->id);
$config->store("OWNCLOUD_ACCESS_TOKEN", $json['access_token']);
$config->store("OWNCLOUD_REFRESH_TOKEN", $json['refresh_token']);
$config->store("OWNCLOUD_ACCESS_TOKEN_EXPIRES", time() + $json['expires_in']);
if (UserConfig::get($GLOBALS['user']->id)->OWNCLOUD_ACTIVATED) {
$this->redirect(URLHelper::getURL("dispatch.php/files/system/" . $this->plugin->getPluginId()));
} else {
$this->redirect(URLHelper::getURL("dispatch.php/files"));
}