summaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
authorAaron Parecki <aaron@parecki.com>2018-01-06 13:57:50 -0800
committerAaron Parecki <aaron@parecki.com>2018-01-06 13:57:50 -0800
commit7047fe16da843d649baac375e9674f238072d7d5 (patch)
tree80e10520d5964d1bdd147d26317371d258abdf28 /controllers
parente5f88779f16c06f25ec4685bd07badfe5986d706 (diff)
support posting code snippets
Diffstat (limited to 'controllers')
-rw-r--r--controllers/controllers.php102
1 files changed, 102 insertions, 0 deletions
diff --git a/controllers/controllers.php b/controllers/controllers.php
index 8c371c7..bc13dd3 100644
--- a/controllers/controllers.php
+++ b/controllers/controllers.php
@@ -694,6 +694,108 @@ $app->post('/repost', function() use($app) {
}
});
+$app->get('/code', function() use($app) {
+ if($user=require_login($app)) {
+ $params = $app->request()->params();
+
+ $edit_data = ['content'=>'','name'=>''];
+
+ if(array_key_exists('edit', $params)) {
+ $source = get_micropub_source($user, $params['edit'], ['content','name']);
+ if(isset($source['content']) && is_array($source['content']) && isset($source['content'][0]))
+ $edit_data['content'] = $source['content'][0];
+ if(isset($source['name']) && is_array($source['name']) && isset($source['name'][0]))
+ $edit_data['name'] = $source['name'][0];
+ $url = $params['edit'];
+ } else {
+ $url = false;
+ }
+
+ $languages = [
+ 'php' => ['php'],
+ 'ruby' => ['rb'],
+ 'python' => ['py'],
+ 'perl' => ['pl'],
+ 'javascript' => ['js'],
+ 'html' => ['html','htm'],
+ 'css' => ['css'],
+ 'bash' => ['sh'],
+ 'nginx' => ['conf'],
+ 'apache' => [],
+ 'text' => ['txt'],
+ ];
+ ksort($languages);
+ $language_map = [];
+ foreach($languages as $lang=>$exts) {
+ foreach($exts as $ext)
+ $language_map[$ext] = $lang;
+ }
+
+ render('new-code', array(
+ 'title' => 'New Code Snippet',
+ 'url' => $url,
+ 'edit_data' => $edit_data,
+ 'token' => generate_login_token(),
+ 'languages' => $languages,
+ 'language_map' => $language_map,
+ 'my_hostname' => parse_url($user->url, PHP_URL_HOST),
+ 'authorizing' => false,
+ ));
+ }
+});
+
+$app->post('/code', function() use($app) {
+ if($user=require_login($app)) {
+ $params = $app->request()->params();
+
+ $error = false;
+
+ if(isset($params['edit']) && $params['edit']) {
+ $micropub_request = [
+ 'action' => 'update',
+ 'url' => $params['edit'],
+ 'replace' => [
+ 'content' => [$params['content']]
+ ]
+ ];
+ if(isset($params['name']) && $params['name']) {
+ $micropub_request['replace']['name'] = [$params['name']];
+ }
+ $r = micropub_post_for_user($user, $micropub_request, null, true);
+
+ if(isset($r['location']) && $r['location'])
+ $location = $r['location'];
+ elseif(in_array($r['code'], [200,201,204]))
+ $location = $params['edit'];
+ elseif(in_array($r['code'], [401,403])) {
+ $location = false;
+ $error = 'Your Micropub endpoint denied the request. Check that Quill is authorized to update posts.';
+ } else {
+ $location = false;
+ $error = 'Your Micropub endpoint did not return a location header or a recognized response code';
+ }
+ } else {
+ $micropub_request = array(
+ 'p3k-content-type' => 'code/' . $params['language'],
+ 'content' => $params['content'],
+ );
+ if(isset($params['name']) && $params['name'])
+ $micropub_request['name'] = $params['name'];
+
+ $r = micropub_post_for_user($user, $micropub_request);
+
+ $location = $r['location'];
+ }
+
+ $app->response()['Content-type'] = 'application/json';
+ $app->response()->body(json_encode(array(
+ 'location' => $location,
+ 'error' => $r['error'],
+ 'error_details' => $error,
+ )));
+ }
+});
+
$app->get('/reply/preview', function() use($app) {
if($user=require_login($app)) {
$params = $app->request()->params();