diff --git a/controllers/Controller.php b/controllers/Controller.php
index af37e56..77e7896 100644
--- a/controllers/Controller.php
+++ b/controllers/Controller.php
@@ -4,7 +4,13 @@ use Symfony\Component\HttpFoundation\Response;
class Controller {
- private function _is_logged_in(&$request, &$response) {
+ public $http;
+
+ public function __construct() {
+ $this->http = new Telegraph\HTTP();
+ }
+
+ private function _is_logged_in(Request $request, Response $response) {
session_start();
if(!session('user_id')) {
session_destroy();
@@ -16,6 +22,24 @@ class Controller {
}
}
+ private function _get_role(Request $request) {
+ // Default to load their first site, but let the query string override it
+ $role = ORM::for_table('roles')->join('sites', 'roles.site_id = sites.id')
+ ->where('user_id', session('user_id'))->order_by_asc('sites.created_at')->find_one();
+
+ if($request->get('account')) {
+ $role = ORM::for_table('roles')->where('user_id', session('user_id'))->where('site_id', $request->get('account'))->find_one();
+ // Check that the user has permission to access this account
+ if(!$role) {
+ $response->setStatusCode(302);
+ $response->headers->set('Location', '/dashboard');
+ return false;
+ }
+ }
+
+ return $role;
+ }
+
public function index(Request $request, Response $response) {
$response->setContent(view('index', [
'title' => 'Telegraph'
@@ -28,18 +52,8 @@ class Controller {
return $response;
}
- // Default to load their first site, but let the query string override it
- $role = ORM::for_table('roles')->join('sites', 'roles.site_id = sites.id')
- ->where('user_id', session('user_id'))->order_by_asc('sites.created_at')->find_one();
-
- if($request->get('account')) {
- $role = ORM::for_table('roles')->where('user_id', session('user_id'))->where('site_id', $request->get('account'))->find_one();
- // Check that the user has permission to access this account
- if(!$role) {
- $response->setStatusCode(302);
- $response->headers->set('Location', '/dashboard');
- return $response;
- }
+ if(!$role=$this->_get_role($request, $response)) {
+ return $response;
}
$site = ORM::for_table('sites')->where_id_is($role->site_id)->find_one();
@@ -117,6 +131,48 @@ class Controller {
return $response;
}
+ public function dashboard_send(Request $request, Response $response) {
+ if(!$this->_is_logged_in($request, $response)) {
+ return $response;
+ }
+
+ if(!$role=$this->_get_role($request, $response)) {
+ return $response;
+ }
+
+ $site = ORM::for_table('sites')->where_id_is($role->site_id)->find_one();
+
+ $response->setContent(view('webmention-send', [
+ 'title' => 'Webmention Details',
+ 'user' => $this->_user(),
+ 'accounts' => $this->_accounts(),
+ 'site' => $site,
+ 'role' => $role,
+ 'url' => $request->get('url')
+ ]));
+ return $response;
+ }
+
+ public function get_outgoing_links(Request $request, Response $response) {
+ if(!$this->_is_logged_in($request, $response)) {
+ return $response;
+ }
+
+ $sourceURL = $request->get('url');
+
+ $client = new IndieWeb\MentionClient();
+ $source = $this->http->get($sourceURL);
+ $parsed = \Mf2\parse($source['body'], $sourceURL);
+
+ $links = $client->findOutgoingLinks($parsed);
+
+ $response->headers->set('Content-Type', 'application/json');
+ $response->setContent(json_encode([
+ 'links' => array_values($links)
+ ]));
+ return $response;
+ }
+
private function _user() {
return ORM::for_table('users')->where_id_is(session('user_id'))->find_one();
}
diff --git a/public/index.php b/public/index.php
index 34fdaff..bfe307b 100644
--- a/public/index.php
+++ b/public/index.php
@@ -10,10 +10,12 @@ $templates = new League\Plates\Engine(dirname(__FILE__).'/../views');
$router->addRoute('GET', '/', 'Controller::index');
$router->addRoute('GET', '/dashboard', 'Controller::dashboard');
$router->addRoute('GET', '/api', 'Controller::api');
+$router->addRoute('GET', '/webmention/{code}/details', 'Controller::webmention_details');
+$router->addRoute('GET', '/dashboard/send', 'Controller::dashboard_send');
+$router->addRoute('POST', '/dashboard/get_outgoing_links.json', 'Controller::get_outgoing_links');
$router->addRoute('POST', '/webmention', 'API::webmention');
$router->addRoute('GET', '/webmention/{code}', 'API::webmention_status');
-$router->addRoute('GET', '/webmention/{code}/details', 'Controller::webmention_details');
$router->addRoute('GET', '/login', 'Auth::login');
$router->addRoute('GET', '/logout', 'Auth::logout');
diff --git a/views/dashboard.php b/views/dashboard.php
index 7b06f07..4be1b75 100644
--- a/views/dashboard.php
+++ b/views/dashboard.php
@@ -2,8 +2,15 @@
+
-
+
Status |
Date |
diff --git a/views/layout-loggedin.php b/views/layout-loggedin.php
index 101551d..4fe87d1 100644
--- a/views/layout-loggedin.php
+++ b/views/layout-loggedin.php
@@ -15,9 +15,11 @@
foreach($accounts as $account): ?>
= $this->e($account->name) ?>
endforeach; ?>
+
Log Out
diff --git a/views/webmention-send.php b/views/webmention-send.php
new file mode 100644
index 0000000..a45fa50
--- /dev/null
+++ b/views/webmention-send.php
@@ -0,0 +1,46 @@
+layout('layout-loggedin', ['title' => $title, 'accounts' => $accounts, 'user' => $user]); ?>
+
+
+
+
Send Webmentions
+
+
+
+ URL |
+ Status |
+
+
+ Looking for URLs... |
+
+
+
+
+
+