bitbucket -> github
parent
803b36ed3d
commit
eeac0740d2
@ -1,10 +1,38 @@
|
|||||||
# Dotclear REST API
|
# 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.
|
# Install:
|
||||||
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.
|
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