bitbucket -> github
parent
803b36ed3d
commit
eeac0740d2
@ -1,10 +1,38 @@
|
||||
# Dotclear REST API
|
||||
|
||||
Plugin dotclear ouvrant une API REST/JSON
|
||||
Plugin to serve a Rest/JSON API on Dotclear.
|
||||
|
||||
C'est en cours de développement et est loin d'être fini.
|
||||
This is a work in progress. API definitions and specifications are not stables. Its will be more exhaustive.
|
||||
|
||||
Real time code repository is https://bitbucket.org/gnieark/dc-rest-api
|
||||
|
||||
Les spécifications swagger seront modifiées au fur et à mesure du développement de l'API.
|
||||
Pour le moment elles sont basées sur la structure de la base de données et ne sont pas exhaustives.
|
||||
A terme, elles seront basées plus sur les fonctions de dotclear.
|
||||
# Install:
|
||||
|
||||
Make a zip of this repository and install it on your Dotclear Blog.
|
||||
|
||||
# License
|
||||
|
||||
Dotclear rest/json plugin.
|
||||
|
||||
Copyright (C) [Gnieark](https://blog-du-grouik.tinad.fr/)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
# Third-party code
|
||||
|
||||
## Dotclear
|
||||
The content management system Dotclear http://dotclear.org/ licensed under
|
||||
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
|
||||
|
||||
|
||||
## SwaggerUI
|
||||
Documentation and the tool to test the API is a third party code integrated on this plugin:
|
||||
Swagger-UI https://github.com/swagger-api/swagger-ui Licensed under the Apache License, Version 2.0
|
@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
?>
|
||||
<h1>Hey</h1>
|
@ -1,93 +0,0 @@
|
||||
<!-- HTML for static distribution bundle build -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
<style>
|
||||
html
|
||||
{
|
||||
box-sizing: border-box;
|
||||
overflow: -moz-scrollbars-vertical;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
*,
|
||||
*:before,
|
||||
*:after
|
||||
{
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
background: #fafafa;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
|
||||
<defs>
|
||||
<symbol viewBox="0 0 20 20" id="unlocked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="locked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="close">
|
||||
<path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow">
|
||||
<path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow-down">
|
||||
<path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
|
||||
</symbol>
|
||||
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="jump-to">
|
||||
<path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="expand">
|
||||
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
||||
</symbol>
|
||||
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
<div id="swagger-ui"></div>
|
||||
|
||||
<script src="./swagger-ui-bundle.js"> </script>
|
||||
<script src="./swagger-ui-standalone-preset.js"> </script>
|
||||
<script>
|
||||
window.onload = function() {
|
||||
// Build a system
|
||||
const ui = SwaggerUIBundle({
|
||||
url: "http://dotclear.localhost/dotclear/index.php?rest/specs",
|
||||
dom_id: '#swagger-ui',
|
||||
presets: [
|
||||
SwaggerUIBundle.presets.apis,
|
||||
SwaggerUIStandalonePreset
|
||||
],
|
||||
plugins: [
|
||||
SwaggerUIBundle.plugins.DownloadUrl
|
||||
],
|
||||
layout: "StandaloneLayout"
|
||||
})
|
||||
|
||||
window.ui = ui
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
class ResQueryDeleteBlogs extends RestQuery
|
||||
{
|
||||
//$core->delBlog($blog_id);
|
||||
public function __construct($args){
|
||||
|
||||
global $core;
|
||||
|
||||
$this->blog_id = substr($args,6);
|
||||
|
||||
$this->required_perms = 'admin';
|
||||
|
||||
//Is allowed?
|
||||
if($this->is_allowed() === false){
|
||||
//need To be authentified
|
||||
$this->response_code = 403;
|
||||
$this->response_message = array('code' => 403, 'error' => 'You need to be admin to patch a blog');
|
||||
return;
|
||||
}
|
||||
|
||||
//does the blog exists?
|
||||
$core->blog = new dcBlog($core, $this->blog_id);
|
||||
$blog_settings = new dcSettings($core,$this->blog_id);
|
||||
|
||||
if(!$core->blog->id){
|
||||
$this->response_code = 404;
|
||||
$this->response_message = array('code' => 404, 'error' => 'Resource '.$this -> blog_id.' not found');
|
||||
return;
|
||||
}
|
||||
try{
|
||||
$core->delBlog($this->blog_id);
|
||||
$this->response_code = 201;
|
||||
$this->response_message = array(
|
||||
'code' => 200,
|
||||
'message' => 'Successfully deleted blog '.$this->blog_id
|
||||
);
|
||||
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->response_code = 500;
|
||||
$this->response_message = array(
|
||||
'code' => 500,
|
||||
'message' => $e->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
class RestQueryGetBlogSettings extends RestQuery
|
||||
{
|
||||
|
||||
public function __construct($args)
|
||||
{
|
||||
global $core;
|
||||
|
||||
|
||||
$this->blog_id = explode("/",$args)[0];
|
||||
//check if user is allowed
|
||||
$this->required_perms = 'admin';
|
||||
if($this->is_allowed() === false){
|
||||
$this->response_code = 403;
|
||||
$this->response_message = array('code' => 403, 'error' => 'No enough privileges');
|
||||
return;
|
||||
}
|
||||
|
||||
$core->blog = new dcBlog($core, $this->blog_id);
|
||||
$blog_settings = new dcSettings($core,$this->blog_id);
|
||||
|
||||
if(!$core->blog->id){
|
||||
$this->response_code = 404;
|
||||
$this->response_message = array('code' => 404, 'error' => 'Resource '.$this -> blog_id.' not found');
|
||||
return;
|
||||
}
|
||||
try{
|
||||
$settings = array();
|
||||
foreach ($core->blog->settings->dumpNamespaces() as $ns => $namespace) {
|
||||
foreach ($namespace->dumpSettings() as $k => $v) {
|
||||
$settings[$ns][$k] = $v;
|
||||
}
|
||||
}
|
||||
$this->response_code = 200;
|
||||
$this->response_message = $settings;
|
||||
}catch (Exception $e){
|
||||
$this->response_code = 500;
|
||||
$this->response_message = array(
|
||||
'code' => 500,
|
||||
'message' => $e->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
class ResQueryPatchBlogs extends RestQuery
|
||||
{
|
||||
|
||||
|
||||
public function __construct($args,$body)
|
||||
{
|
||||
|
||||
global $core;
|
||||
|
||||
$this->blog_id = substr($args,6);
|
||||
|
||||
$this->required_perms = 'admin';
|
||||
|
||||
//Is allowed?
|
||||
if($this->is_allowed() === false){
|
||||
//need To be authentified
|
||||
$this->response_code = 403;
|
||||
$this->response_message = array('code' => 403, 'error' => 'You need to be admin to patch a blog');
|
||||
return;
|
||||
}
|
||||
|
||||
//Is JSON valid?
|
||||
$inputArray = $this-> body_to_array($body);
|
||||
if ($inputArray === false){
|
||||
return;
|
||||
}
|
||||
|
||||
//is it valid fields?
|
||||
if(!$this->check_for_required_fields( $inputArray, array(),
|
||||
array('blog_id','blog_url','blog_name','blog_desc','lang','blog_timezone','url_scan')) ){
|
||||
return;
|
||||
}
|
||||
|
||||
//does the blog exists?
|
||||
$core->blog = new dcBlog($core, $this->blog_id);
|
||||
$blog_settings = new dcSettings($core,$this->blog_id);
|
||||
|
||||
if(!$core->blog->id){
|
||||
$this->response_code = 404;
|
||||
$this->response_message = array('code' => 404, 'error' => 'Resource '.$this -> blog_id.' not found');
|
||||
return;
|
||||
}
|
||||
|
||||
$cur = $core->con->openCursor($core->prefix.'blog');
|
||||
|
||||
if(isset($inputArray['blog_id']))
|
||||
$cur->blog_id = $inputArray['blog_id'];
|
||||
else
|
||||
$cur->blog_id = $core->blog->id;
|
||||
|
||||
if(isset($inputArray['blog_url']))
|
||||
$cur->blog_url = preg_replace('/\?+$/','?', $inputArray['blog_url']);
|
||||
else
|
||||
$cur->blog_url = $core->blog->url;
|
||||
|
||||
if(isset($inputArray['blog_name']))
|
||||
$cur->blog_name = $inputArray['blog_name'];
|
||||
if(isset($inputArray['blog_desc']))
|
||||
$cur->blog_desc = $inputArray['blog_desc'];
|
||||
|
||||
$core->updBlog($this->blog_id,$cur);
|
||||
|
||||
//$cur->blog_upddt = date('Y-m-d H:i:s');
|
||||
//$cur->update("WHERE blog_id = '".$core->con->escape($id)."'");
|
||||
|
||||
$this -> response_code = 200;
|
||||
$this -> response_message = array(
|
||||
'code' => 200,
|
||||
'message' => 'blog '.$this->blog_id.' Successfully updated'
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
class ResQueryPutBlogs extends RestQuery
|
||||
{
|
||||
|
||||
|
||||
public function __construct($args,$body)
|
||||
{
|
||||
|
||||
global $core;
|
||||
|
||||
$this->blog_id = substr($args,6);
|
||||
|
||||
$this->required_perms = 'admin';
|
||||
|
||||
//Is allowed?
|
||||
if($this->is_allowed() === false){
|
||||
//need To be authentified
|
||||
$this->response_code = 403;
|
||||
$this->response_message = array('code' => 403, 'error' => 'You need to be admin to put a blog');
|
||||
return;
|
||||
}
|
||||
|
||||
//Is JSON valid?
|
||||
$inputArray = $this-> body_to_array($body);
|
||||
if ($inputArray === false){
|
||||
return;
|
||||
}
|
||||
|
||||
//is it valid fields?
|
||||
if(!$this->check_for_required_fields( $inputArray, array('blog_id','blog_url','blog_name','blog_desc'), array())){
|
||||
return;
|
||||
}
|
||||
|
||||
//does the blog exists?
|
||||
$core->blog = new dcBlog($core, $this->blog_id);
|
||||
$blog_settings = new dcSettings($core,$this->blog_id);
|
||||
|
||||
if(!$core->blog->id){
|
||||
$this->response_code = 404;
|
||||
$this->response_message = array('code' => 404, 'error' => 'Resource '.$this -> blog_id.' not found');
|
||||
return;
|
||||
}
|
||||
|
||||
$cur = $core->con->openCursor($core->prefix.'blog');
|
||||
|
||||
if(isset($inputArray['blog_id']))
|
||||
$cur->blog_id = $inputArray['blog_id'];
|
||||
else
|
||||
$cur->blog_id = $core->blog->id;
|
||||
|
||||
if(isset($inputArray['blog_url']))
|
||||
$cur->blog_url = preg_replace('/\?+$/','?', $inputArray['blog_url']);
|
||||
else
|
||||
$cur->blog_url = $core->blog->url;
|
||||
|
||||
if(isset($inputArray['blog_name']))
|
||||
$cur->blog_name = $inputArray['blog_name'];
|
||||
if(isset($inputArray['blog_desc']))
|
||||
$cur->blog_desc = $inputArray['blog_desc'];
|
||||
|
||||
$core->updBlog($this->blog_id,$cur);
|
||||
|
||||
//$cur->blog_upddt = date('Y-m-d H:i:s');
|
||||
//$cur->update("WHERE blog_id = '".$core->con->escape($id)."'");
|
||||
|
||||
$this -> response_code = 200;
|
||||
$this -> response_message = array(
|
||||
'code' => 200,
|
||||
'message' => 'blog '.$this->blog_id.' Successfully updated'
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 675 B |
Loading…
Reference in New Issue