From 5d2441df68c904761b48ded32e02f1277e3bf314 Mon Sep 17 00:00:00 2001 From: sualko Date: Tue, 18 Jul 2017 15:47:52 +0200 Subject: [PATCH 01/11] add registration form for managed server service --- ajax/registerManagedServer.php | 72 ++++++++++++++++++++++++++++++++++ appinfo/routes.php | 3 ++ js/jsxc | 2 +- js/settings/admin.js | 41 ++++++++++++++++--- lib/Settings/Admin.php | 8 +++- scss/_oc.scss | 8 ++++ settings/admin.php | 6 +++ templates/settings/admin.php | 49 ++++++++++++++++++++++- 8 files changed, 180 insertions(+), 9 deletions(-) create mode 100644 ajax/registerManagedServer.php diff --git a/ajax/registerManagedServer.php b/ajax/registerManagedServer.php new file mode 100644 index 00000000..c088318c --- /dev/null +++ b/ajax/registerManagedServer.php @@ -0,0 +1,72 @@ + 'error', + 'data' => array( + 'msg' => $msg + ), + ))); +} + +$apiUrl = \OC::$server->getURLGenerator()->linkTo('ojsxc', 'ajax/externalApi.php'); +$apiUrl = \OC::$server->getURLGenerator()->getAbsoluteURL($apiUrl); + +$config = \OC::$server->getConfig(); +$apiSecret = $config->getAppValue('ojsxc', 'apiSecret'); + +$userId = \OC::$server->getUserSession()->getUser()->getUID(); + +$context = stream_context_create(array('http' => + array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => http_build_query( + array( + 'apiUrl' => $apiUrl, + 'apiSecret' => $apiSecret, + 'userId' => $userId + ) + ) + ) +)); + +$result = file_get_contents(REGISTRATION_URL, false, $context); + +if ($result === false) { + abort('Couldn\'t reach the registration server'); +} + +$responseJSON = json_decode($result); + +if ($responseJSON === null) { + abort('Couldn\'t parse the response'); +} + +if ($responseJSON->result !== 'success') { + abort($responseJSON->data->msg); +} + +$config->setAppValue('ojsxc', 'serverType', 'managed'); +$config->setAppValue('ojsxc', 'boshUrl', $responseJSON->data->boshUrl); +$config->setAppValue('ojsxc', 'xmppDomain', $responseJSON->data->domain); +$config->setAppValue('ojsxc', 'timeLimitedToken', 'true'); +$config->setAppValue('ojsxc', 'managedServer', 'registered'); + +//@TODO add bosh url to content-security-policy + +echo json_encode(array( + 'result' => 'success', + 'data' => array() +)); +?> diff --git a/appinfo/routes.php b/appinfo/routes.php index d201a7de..fe93cbc9 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -28,6 +28,9 @@ $this->create('ojsxc_ajax_externalApi', 'ajax/externalApi.php') ->actionInclude('ojsxc/ajax/externalApi.php'); + $this->create('ojsxc_ajax_registerManagedServer', 'ajax/registerManagedServer.php') + ->actionInclude('ojsxc/ajax/registerManagedServer.php'); + $application = new Application(); $application->registerRoutes($this, array( 'routes' => array( diff --git a/js/jsxc b/js/jsxc index da3b0926..fc8e0852 160000 --- a/js/jsxc +++ b/js/jsxc @@ -1 +1 @@ -Subproject commit da3b092628024142c1f735959261d4177eb2174b +Subproject commit fc8e08527858fbed502246a25eb1420ecb8ffce7 diff --git a/js/settings/admin.js b/js/settings/admin.js index 14a8e40b..9e681f1d 100644 --- a/js/settings/admin.js +++ b/js/settings/admin.js @@ -94,8 +94,8 @@ $(document).ready(function() { } $('#ojsxc [name=serverType]').change(function(){ - $('#ojsxc .ojsxc-external, #ojsxc .ojsxc-internal').hide(); - $('#ojsxc .ojsxc-external, #ojsxc .ojsxc-internal').find('.required').removeAttr('required'); + $('#ojsxc .ojsxc-external, #ojsxc .ojsxc-internal, #ojsxc .ojsxc-managed').hide(); + $('#ojsxc .ojsxc-external, #ojsxc .ojsxc-internal, #ojsxc .ojsxc-managed').find('.required').removeAttr('required'); $('#ojsxc .ojsxc-' + $(this).val()).show(); $('#ojsxc .ojsxc-' + $(this).val()).find('.required').attr('required', 'true'); }); @@ -207,12 +207,43 @@ $(document).ready(function() { } }); - var apiUrl = window.location.origin + OC.filePath('ojsxc', 'ajax', 'externalApi.php'); - $('#jsxc-api-url').val(apiUrl); - $('#ojsxc input[readonly]').focus(function(){ if(typeof this.select === 'function') { this.select(); } }); + + $('#ojsxc-register').click(function(){ + var el = $(this); + el.prop('disabled', 'disabled'); + el.val(el.attr('data-toggle-value')); + + var msgEl = el.parents('.ojsxc-managed').find('.msg'); + + $.ajax({ + url: OC.filePath('ojsxc', 'ajax', 'registerManagedServer.php'), + }).always(function(responseJSON) { + if (responseJSON && responseJSON.result === 'success') { + $('.ojsxc-managed-registration').hide(); + + msgEl.addClass('jsxc_success'); + msgEl.text('Congratulations! You got your own XMPP server. Please log out and in again.'); + + var submitEl = $('#ojsxc input[type="submit"]'); + submitEl.prop('disabled', 'disabled'); + submitEl.val('Please reload this page to continue'); + + return; + } + + if (responseJSON.responseJSON) { + responseJSON = responseJSON.responseJSON; + } + + var errorMsg = (responseJSON && responseJSON.data) ? responseJSON.data.msg : 'unknown error'; + + msgEl.addClass('jsxc_fail'); + msgEl.text('Sorry we couldn\'t complete your registration: ' + errorMsg); + }); + }); }); diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 4b1cacbf..6d87185c 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -25,6 +25,9 @@ public function getForm() $serverType = $this->config->getAppValue('ojsxc', 'serverType'); + $apiUrl = \OC::$server->getURLGenerator()->linkTo('ojsxc', 'ajax/externalApi.php'); + $apiUrl = \OC::$server->getURLGenerator()->getAbsoluteURL($apiUrl); + $parameters = [ 'serverType' => (!empty($serverType))? $serverType : 'internal', 'boshUrl' => $this->config->getAppValue('ojsxc', 'boshUrl'), @@ -42,7 +45,10 @@ public function getForm() 'chromeExtension' => $this->config->getAppValue('ojsxc', 'chromeExtension'), 'timeLimitedToken' => $this->config->getAppValue('ojsxc', 'timeLimitedToken'), 'externalServices' => $externalServices, - 'apiSecret' => $this->config->getAppValue('ojsxc', 'apiSecret') + 'apiUrl' => $apiUrl, + 'apiSecret' => $this->config->getAppValue('ojsxc', 'apiSecret'), + 'userId' => \OC::$server->getUserSession()->getUser()->getUID(), + 'managedServer' => $this->config->getAppValue('ojsxc', 'managedServer') ]; return new TemplateResponse('ojsxc', 'settings/admin', $parameters); diff --git a/scss/_oc.scss b/scss/_oc.scss index ea70317d..2c4ae2f6 100644 --- a/scss/_oc.scss +++ b/scss/_oc.scss @@ -98,10 +98,18 @@ &[type='checkbox'] { margin: 13px 0; width: auto; + min-height: auto; + height: auto; } &[type='radio'] { width: auto; + min-height: auto; + height: auto; + } + + &[readonly] { + background-color: #f1f1f1; } &:invalid { diff --git a/settings/admin.php b/settings/admin.php index dc50ff29..515fb76e 100644 --- a/settings/admin.php +++ b/settings/admin.php @@ -7,6 +7,9 @@ $config = \OC::$server->getConfig(); $tmpl = new OCP\Template('ojsxc', 'settings/admin'); +$apiUrl = \OC::$server->getURLGenerator()->linkTo('ojsxc', 'ajax/externalApi.php'); +$apiUrl = \OC::$server->getURLGenerator()->getAbsoluteURL($apiUrl); + $serverType = $config->getAppValue('ojsxc', 'serverType'); $tmpl->assign('serverType', (!empty($serverType))? $serverType : 'internal'); @@ -28,7 +31,10 @@ $externalServices = explode("|", $externalServices); $tmpl->assign('externalServices', $externalServices); +$tmpl->assign('apiUrl', $apiUrl); $tmpl->assign('apiSecret', $config->getAppValue('ojsxc', 'apiSecret')); $tmpl->assign('timeLimitedToken', $config->getAppValue('ojsxc', 'timeLimitedToken')); +$tmpl->assign('userId', \OC::$server->getUserSession()->getUser()->getUID()); +$tmpl->assign('managedServer', $this->config->getAppValue('ojsxc', 'managedServer')); return $tmpl->fetchPage(); diff --git a/templates/settings/admin.php b/templates/settings/admin.php index 23d4491e..8bfff297 100644 --- a/templates/settings/admin.php +++ b/templates/settings/admin.php @@ -10,10 +10,11 @@

JavaScript Xmpp Client

+

Server type

Limited functionality only: No clients besides JSXC in ownCloud, no multi-user chat, no server-to-server federations.
@@ -24,6 +25,13 @@ Choose this option to use your own XMPP server.
+
+ + Get your own full featured XMPP server directly hosted by the core team of JSXC in Germany. For more information visit [todo]. +

Basic

@@ -71,6 +79,43 @@
+
+ +
+
+
+ +
+ +
+
From 3ff5e673ae73b15a680309576453c09781477f2b Mon Sep 17 00:00:00 2001 From: sualko Date: Mon, 24 Jul 2017 17:05:54 +0200 Subject: [PATCH 04/11] add api version to registration request --- ajax/registerManagedServer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/ajax/registerManagedServer.php b/ajax/registerManagedServer.php index 8bc4640d..82f416e9 100644 --- a/ajax/registerManagedServer.php +++ b/ajax/registerManagedServer.php @@ -57,6 +57,7 @@ function parseHeaders($headers) array( 'apiUrl' => $apiUrl, 'apiSecret' => $apiSecret, + 'apiVersion' => 1, 'userId' => $userId, 'promotionCode' => $promotionCode ) From 18c8cc9b5190f235e20a55c2f1d60d31aae923ff Mon Sep 17 00:00:00 2001 From: sualko Date: Mon, 24 Jul 2017 17:21:38 +0200 Subject: [PATCH 05/11] add some checks for registration response --- ajax/registerManagedServer.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ajax/registerManagedServer.php b/ajax/registerManagedServer.php index 82f416e9..b271d264 100644 --- a/ajax/registerManagedServer.php +++ b/ajax/registerManagedServer.php @@ -82,9 +82,21 @@ function parseHeaders($headers) if ($headers['reponse_code'] !== 200) { \OCP\Util::writeLog('ojsxc', 'RMS: Response code: '.$headers['reponse_code'], \OCP\Util::INFO); - abort($responseJSON->message); + abort(htmlspecialchars($responseJSON->message)); } +if (!preg_match('#^https://#', $responseJSON->boshUrl) || + !preg_match('#/http-bind/?$#', $responseJSON->boshUrl) || + preg_match('#\?#', $responseJSON->boshUrl)) { + abort('Got a bad bosh URL'); + } + +if (!preg_match('/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i', $responseJSON->domain) || + !preg_match('/^.{1,253}$/', $responseJSON->domain) || + !preg_match('/^[^\.]{1,63}(\.[^\.]{1,63})*$/', $responseJSON->domain)) { + abort('Got a bad domain'); + } + $config->setAppValue('ojsxc', 'serverType', 'managed'); $config->setAppValue('ojsxc', 'boshUrl', $responseJSON->boshUrl); $config->setAppValue('ojsxc', 'xmppDomain', $responseJSON->domain); From e8c3cdcaf60a604a9f6b0642bf6944007c1cd33c Mon Sep 17 00:00:00 2001 From: sualko Date: Mon, 24 Jul 2017 17:27:24 +0200 Subject: [PATCH 06/11] store external services from registration response --- ajax/registerManagedServer.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ajax/registerManagedServer.php b/ajax/registerManagedServer.php index b271d264..848305e0 100644 --- a/ajax/registerManagedServer.php +++ b/ajax/registerManagedServer.php @@ -102,8 +102,7 @@ function parseHeaders($headers) $config->setAppValue('ojsxc', 'xmppDomain', $responseJSON->domain); $config->setAppValue('ojsxc', 'timeLimitedToken', 'true'); $config->setAppValue('ojsxc', 'managedServer', 'registered'); - -//@TODO add bosh url to content-security-policy +$config->setAppValue('ojsxc', 'externalServices', implode('|', $responseJSON->externalServices)); echo json_encode(array( 'result' => 'success', From a4d27bf14253e0250f8069f655cb8c8fd91ce5db Mon Sep 17 00:00:00 2001 From: sualko Date: Tue, 25 Jul 2017 17:40:40 +0200 Subject: [PATCH 07/11] use controller style for register managed server --- ajax/registerManagedServer.php | 111 -------- appinfo/application.php | 22 ++ appinfo/routes.php | 4 + js/settings/admin.js | 17 +- lib/Controller/ManagedServerController.php | 120 +++++++++ lib/DataRetriever.php | 47 ++++ lib/IDataRetriever.php | 7 + lib/Settings/Admin.php | 3 +- templates/settings/admin.php | 4 +- .../ManagedServerControllerTest.php | 236 ++++++++++++++++++ 10 files changed, 454 insertions(+), 117 deletions(-) delete mode 100644 ajax/registerManagedServer.php create mode 100644 lib/Controller/ManagedServerController.php create mode 100644 lib/DataRetriever.php create mode 100644 lib/IDataRetriever.php create mode 100644 tests/unit/controller/ManagedServerControllerTest.php diff --git a/ajax/registerManagedServer.php b/ajax/registerManagedServer.php deleted file mode 100644 index 848305e0..00000000 --- a/ajax/registerManagedServer.php +++ /dev/null @@ -1,111 +0,0 @@ - 'error', - 'data' => array( - 'msg' => $msg - ), - ))); -} - -function parseHeaders($headers) -{ - $head = array(); - foreach ($headers as $k=>$v) { - $t = explode(':', $v, 2); - if (isset($t[1])) { - $head[ trim($t[0]) ] = trim($t[1]); - } else { - $head[] = $v; - if (preg_match("#HTTP/[0-9\.]+\s+([0-9]+)#", $v, $out)) { - $head['reponse_code'] = intval($out[1]); - } - } - } - return $head; -} - -$promotionCode = $_POST['promotionCode']; -$promotionCode = (preg_match('/^[0-9a-z]+$/i', $promotionCode)) ? $promotionCode : null; - -$apiUrl = \OC::$server->getURLGenerator()->linkTo('ojsxc', 'ajax/externalApi.php'); -$apiUrl = \OC::$server->getURLGenerator()->getAbsoluteURL($apiUrl); - -$config = \OC::$server->getConfig(); -$apiSecret = $config->getAppValue('ojsxc', 'apiSecret'); - -$userId = \OC::$server->getUserSession()->getUser()->getUID(); - -$context = stream_context_create(array('http' => - array( - 'method' => 'POST', - 'ignore_errors' => '1', - 'header' => 'Content-type: application/x-www-form-urlencoded', - 'content' => http_build_query( - array( - 'apiUrl' => $apiUrl, - 'apiSecret' => $apiSecret, - 'apiVersion' => 1, - 'userId' => $userId, - 'promotionCode' => $promotionCode - ) - ) - ) -)); - -$result = file_get_contents(REGISTRATION_URL, false, $context); - -if ($result === false) { - abort('Couldn\'t reach the registration server'); -} - -$headers = parseHeaders($http_response_header); - -$responseJSON = json_decode($result); - -if ($responseJSON === null) { - abort('Couldn\'t parse the response. Response code: '.$headers['reponse_code']); -} - -if ($headers['reponse_code'] !== 200) { - \OCP\Util::writeLog('ojsxc', 'RMS: Response code: '.$headers['reponse_code'], \OCP\Util::INFO); - - abort(htmlspecialchars($responseJSON->message)); -} - -if (!preg_match('#^https://#', $responseJSON->boshUrl) || - !preg_match('#/http-bind/?$#', $responseJSON->boshUrl) || - preg_match('#\?#', $responseJSON->boshUrl)) { - abort('Got a bad bosh URL'); - } - -if (!preg_match('/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i', $responseJSON->domain) || - !preg_match('/^.{1,253}$/', $responseJSON->domain) || - !preg_match('/^[^\.]{1,63}(\.[^\.]{1,63})*$/', $responseJSON->domain)) { - abort('Got a bad domain'); - } - -$config->setAppValue('ojsxc', 'serverType', 'managed'); -$config->setAppValue('ojsxc', 'boshUrl', $responseJSON->boshUrl); -$config->setAppValue('ojsxc', 'xmppDomain', $responseJSON->domain); -$config->setAppValue('ojsxc', 'timeLimitedToken', 'true'); -$config->setAppValue('ojsxc', 'managedServer', 'registered'); -$config->setAppValue('ojsxc', 'externalServices', implode('|', $responseJSON->externalServices)); - -echo json_encode(array( - 'result' => 'success', - 'data' => array() -)); -?> diff --git a/appinfo/application.php b/appinfo/application.php index ef3457e3..31685716 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -2,6 +2,7 @@ namespace OCA\OJSXC\AppInfo; +use OCA\OJSXC\Controller\ManagedServerController; use OCA\OJSXC\Controller\SettingsController; use OCA\OJSXC\Controller\ExternalApiController; use OCA\OJSXC\Middleware\ExternalApiMiddleware; @@ -19,6 +20,7 @@ use OCA\OJSXC\StanzaHandlers\Presence; use OCA\OJSXC\StanzaLogger; use OCA\OJSXC\RawRequest; +use OCA\OJSXC\DataRetriever; use OCP\AppFramework\App; use OCA\OJSXC\ILock; use OCA\OJSXC\DbLock; @@ -89,6 +91,19 @@ public function __construct(array $urlParams=array()){ ); }); + $container->registerService('ManagedServerController', function(IContainer $c) { + return new ManagedServerController( + $c->query('AppName'), + $c->query('Request'), + $c->query('URLGenerator'), + \OC::$server->getConfig(), + \OC::$server->getUserSession(), + $c->query('Logger'), + $c->query('DataRetriever'), + 'https://xmpp.jsxc.ch/registration' + ); + }); + /** * Middleware */ @@ -231,6 +246,13 @@ public function __construct(array $urlParams=array()){ return new RawRequest(); }); + /** + * Data retriever + */ + $container->registerService('DataRetriever', function($c) { + return new DataRetriever(); + }); + } /** diff --git a/appinfo/routes.php b/appinfo/routes.php index 06112f56..dce78aa5 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -9,15 +9,19 @@ $application->registerRoutes($this, array( 'routes' => array( array('name' => 'http_bind#index', 'url' => '/http-bind', 'verb' => 'POST'), + array('name' => 'settings#index', 'url' => '/settings', 'verb' => 'POST'), array('name' => 'settings#setAdmin', 'url' => '/settings/admin', 'verb' => 'POST'), array('name' => 'settings#setUser', 'url' => '/settings/user', 'verb' => 'POST'), array('name' => 'settings#getIceServers', 'url' => '/settings/iceServers', 'verb' => 'GET'), array('name' => 'settings#getUsers', 'url' => '/settings/users', 'verb' => 'GET'), + array('name' => 'externalApi#index', 'url' => '/ajax/externalApi.php', 'verb' => 'POST'), array('name' => 'externalApi#check_password', 'url' => '/api/v2/checkPassword', 'verb' => 'POST'), array('name' => 'externalApi#is_user', 'url' => '/api/v2/isUser', 'verb' => 'POST'), array('name' => 'externalApi#shared_roster', 'url' => '/api/v2/sharedRoster', 'verb' => 'POST'), + + array('name' => 'managedServer#register', 'url' => '/managedServer/register', 'verb' => 'POST') ) )); ?> diff --git a/js/settings/admin.js b/js/settings/admin.js index 3f22f312..ceb0894e 100644 --- a/js/settings/admin.js +++ b/js/settings/admin.js @@ -235,7 +235,7 @@ $(document).ready(function() { $.ajax({ method: 'POST', - url: OC.filePath('ojsxc', 'ajax', 'registerManagedServer.php'), + url: OC.generateUrl('apps/ojsxc/managedServer/register'), data: { promotionCode: promotionCode } @@ -260,7 +260,20 @@ $(document).ready(function() { var errorMsg = (responseJSON && responseJSON.data) ? responseJSON.data.msg : 'unknown error'; msgEl.addClass('jsxc_fail'); - msgEl.text('Sorry we couldn\'t complete your registration: ' + errorMsg); + msgEl.append($('').text('Sorry we couldn\'t complete your registration.')); + msgEl.append($('
')); + msgEl.append($('').text(errorMsg)); }); }); + + $('.ojsxc-refresh-registration').click(function(ev){ + ev.preventDefault(); + + var msgEl = $(this).parents('.msg'); + + msgEl.removeClass('jsxc_success'); + msgEl.empty(); + + $('.ojsxc-managed-registration').show(); + }); }); diff --git a/lib/Controller/ManagedServerController.php b/lib/Controller/ManagedServerController.php new file mode 100644 index 00000000..cee029da --- /dev/null +++ b/lib/Controller/ManagedServerController.php @@ -0,0 +1,120 @@ +urlGenerator = $urlGenerator; + $this->config = $config; + $this->userSession = $userSession; + $this->logger = $logger; + $this->dataRetriever = $dataRetriever; + $this->registrationUrl = $registrationUrl; + } + + public function register($promotionCode = null) { + $promotionCode = (preg_match('/^[0-9a-z]+$/i', $promotionCode)) ? $promotionCode : null; + $registrationResult = false; + + try { + $registrationResult = $this->doRegistration($promotionCode); + } catch (\Exception $exception) { + $this->logger->warning('RMS: Abort with message: '.$exception->getMessage()); + + return new JSONResponse(array( + 'result' => 'error', + 'data' => array( + 'msg' => $exception->getMessage() + ) + ), Http::STATUS_INTERNAL_SERVER_ERROR); + } + + if ($registrationResult) { + return array( + 'result' => 'success', + 'data' => array() + ); + } + } + + private function doRegistration($promotionCode) { + $apiUrl = $this->urlGenerator->linkToRouteAbsolute('ojsxc.externalApi.index'); + $apiSecret = $this->config->getAppValue('ojsxc', 'apiSecret'); + $userId = $this->userSession->getUser()->getUID(); + + $data = array( + 'apiUrl' => $apiUrl, + 'apiSecret' => $apiSecret, + 'apiVersion' => 1, + 'userId' => $userId, + 'promotionCode' => $promotionCode + ); + + $response = $this->dataRetriever->fetchUrl($this->registrationUrl, $data); + + if ($response['body'] === false) { + throw new Exception('Couldn\'t reach the registration server'); + } + + $responseJSON = json_decode($response['body']); + + if ($responseJSON === null) { + throw new Exception('Couldn\'t parse the response. Response code: '.$response['headers']['response_code']); + } + + if ($response['headers']['response_code'] !== 200) { + $this->logger->info('RMS: Response code: '.$response['headers']['response_code']); + + throw new Exception(htmlspecialchars($responseJSON->message)); + } + + if (!preg_match('#^https://#', $responseJSON->boshUrl) || + !preg_match('#/http-bind/?$#', $responseJSON->boshUrl) || + preg_match('/\?|#/', $responseJSON->boshUrl)) { + throw new Exception('Got a bad bosh URL'); + } + + if (!preg_match('/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i', $responseJSON->domain) || + !preg_match('/^.{1,253}$/', $responseJSON->domain) || + !preg_match('/^[^\.]{1,63}(\.[^\.]{1,63})*$/', $responseJSON->domain)) { + throw new Exception('Got a bad domain'); + } + + $this->config->setAppValue('ojsxc', 'serverType', 'managed'); + $this->config->setAppValue('ojsxc', 'boshUrl', $responseJSON->boshUrl); + $this->config->setAppValue('ojsxc', 'xmppDomain', $responseJSON->domain); + $this->config->setAppValue('ojsxc', 'timeLimitedToken', 'true'); + $this->config->setAppValue('ojsxc', 'managedServer', 'registered'); + $this->config->setAppValue('ojsxc', 'externalServices', implode('|', $responseJSON->externalServices)); + + return true; + } +} diff --git a/lib/DataRetriever.php b/lib/DataRetriever.php new file mode 100644 index 00000000..db551b8f --- /dev/null +++ b/lib/DataRetriever.php @@ -0,0 +1,47 @@ + + array( + 'method' => 'POST', + 'ignore_errors' => '1', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => http_build_query($data) + ) + )); + + $body = file_get_contents($url, false, $context); + $headers = []; + + if ($body !== false) { + $headers = $this->parseHeaders($http_response_header); + } + + return [ + 'body' => $body, + 'headers' => $headers + ]; + } + + private function parseHeaders($headers) + { + $head = array(); + + foreach ($headers as $k=>$v) { + $t = explode(':', $v, 2); + if (isset($t[1])) { + $head[ trim($t[0]) ] = trim($t[1]); + } else { + $head[] = $v; + if (preg_match('#HTTP/[0-9\.]+\s+([0-9]+)#', $v, $out)) { + $head['reponse_code'] = intval($out[1]); + } + } + } + + return $head; + } +} diff --git a/lib/IDataRetriever.php b/lib/IDataRetriever.php new file mode 100644 index 00000000..e0a2595b --- /dev/null +++ b/lib/IDataRetriever.php @@ -0,0 +1,7 @@ +config->getAppValue('ojsxc', 'serverType'); - $apiUrl = \OC::$server->getURLGenerator()->linkTo('ojsxc', 'ajax/externalApi.php'); - $apiUrl = \OC::$server->getURLGenerator()->getAbsoluteURL($apiUrl); + $apiUrl = \OC::$server->getURLGenerator()->linkToRouteAbsolute('ojsxc.externalApi.index'); $parameters = [ 'serverType' => (!empty($serverType))? $serverType : 'internal', diff --git a/templates/settings/admin.php b/templates/settings/admin.php index 3828351f..387f8a95 100644 --- a/templates/settings/admin.php +++ b/templates/settings/admin.php @@ -30,7 +30,7 @@ /> Managed (Beta service) - Get your own full featured XMPP server directly hosted by the core team of JSXC in Germany. For more information visit [todo]. + Get your own full featured XMPP server directly hosted by the core team of JSXC. For more information visit [todo].
@@ -83,7 +83,7 @@