initial commit

This commit is contained in:
a-sansara 2017-03-15 00:49:44 +01:00
commit ea394b8925
11 changed files with 432 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
vendor/
composer.lock

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 meta-tech.academy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

129
README.md Normal file
View File

@ -0,0 +1,129 @@
# MetaTech PwsServer
PwsServer is a web application skeleton in silex2 managing web services through PwsAuth protocol
### Requirements
PHP 7.0
meta-tech\silex 2
meta-tech\silex-core
meta-tech\pws-client (to test ws)
### Install
The package can be installed using [ Composer ](https://getcomposer.org/). (not yet)
```
composer require meta-tech/pws-server
```
Or add the package to your `composer.json`.
```
"require": {
"meta-tech/pws-server" : "1.0"
}
```
## Usage
managing controllers & routing in application
cf [ MetaTech\Silex\Provider\ControllerServiceProvider ](https://github.com/meta-tech/silex-controller-service)
```php
namespace MetaTech\PwsServer;
use MetaTech\Silex\Application as App;
use MetaTech\Silex\Provider\ControllerServiceProvider as CtrlProvider;
use MetaTech\PwsAuth\Authenticator;
use MetaTech\PwsServer\Ctrl\Test;
use MetaTech\PwsServer\Ctrl\WebService;
use MetaTech\PwsServer\Ctrl\OtherWebService;
class Application extends App
{
/*!
* @method setServices
* @protected
*/
protected function setServices()
{
$app = $this;
$app['ws.authenticator'] = function ($app) {
return new Authenticator($app['config']['pwsauth']);
};
}
/*!
* @method routingDefinition
* @protected
*/
protected function routingDefinition()
{
$this->register(new CtrlProvider(Test::class , [$this], '/'));
$this->register(new CtrlProvider(WebService::class , [$this], '/ws'));
$this->register(new CtrlProvider(OtherWebService::class, [$this], '/ws/deep'));
}
}
```
Controller example :
```php
<?php
use Silex\ControllerCollection;
use Symfony\Component\HttpFoundation\Request;
use MetaTech\Silex\Ws\Controller;
class WebService extends Controller
{
public function index(Request $request)
{
$done = true;
$msg = 'this is index';
return $this->response($done, $msg);
}
public function routing(ControllerCollection $collection) : ControllerCollection
{
$collection = parent::routing($collection);
$_ = $this->ns();
$collection->match('/', "$_:index");
return $collection;
}
}
```
Authentication mecanism is already provided by the `MetaTech\Silex\Ws\Controller` parent class
& the `MetaTech\Silex\Ws\Authentication` handler (in meta-tech/silex-core package)
See OtherWebService to see another controller and deep routes inside rooting /ws entry point
### Test uris :
access through web browser :
* servername/
* servername/test
access through pws-client :
* servername/ws
* servername/ws/deep
* servername/ws/isauth
### @todo
subclassing `MetaTech\Silex\Ws\Authentication` to give checkUser db implementation example
### License
The project is released under the MIT license, see the LICENSE file.

39
composer.json Normal file
View File

@ -0,0 +1,39 @@
{
"name" : "meta-tech/pws-server",
"type" : "library",
"homepage" : "https://github.com/meta-tech/pws-server",
"description" : "PwsServer is web application skeleton in silex2 managing web services through PwsAuth protocol",
"license" : "MIT",
"authors" : [
{
"name" : "a-Sansara",
"homepage" : "https://github.com/a-sansara/"
}
],
"keywords" : ["Server", "PwsAuth", "WebService", "Silex", "Http"],
"autoload" : {
"psr-4" : {
"" : "src/"
}
},
"require": {
"meta-tech/silex-controller-service" : "@dev",
"meta-tech/pws-auth" : "@dev",
"meta-tech/silex-core" : "@dev"
},
"repositories": [
{
"type": "git",
"url": "https://github.com/meta-tech/silex-controller-service.git"
},
{
"type": "git",
"url": "https://github.com/meta-tech/pws-auth.git"
},
{
"type": "git",
"url": "https://github.com/meta-tech/silex-core.git"
}
],
"minimum-stability": "dev"
}

10
config/main.yml Normal file
View File

@ -0,0 +1,10 @@
env :
name : local
prod : 0
debug : 1
url : pwsserver.docker
protocol : http
info :
app_name : pwsserver
version : 1.0.2

22
config/pwsauth.yml Normal file
View File

@ -0,0 +1,22 @@
type : PwsAuth2
header :
auth : Pws-Authorization
ident : Pws-Ident
salt :
common : jK5#p9Mh5.Zv}
# used for generating user specific salt
user.index : 10
user.length : 12
hash :
sep : /
algo : sha256
# effective token length size. out of bound data is simply noise
length : 52
# session index (or obfuscate length)
session.index : 58
# ending noise data length)
noise.length : 12

View File

@ -0,0 +1,50 @@
<?php
/*
* This file is part of the pws-server package.
*
* (c) meta-tech.academy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace MetaTech\PwsServer;
use MetaTech\Silex\Application as App;
use MetaTech\Silex\Provider\ControllerServiceProvider as CtrlProvider;
use MetaTech\PwsAuth\Authenticator;
use MetaTech\PwsServer\Ctrl\Test;
use MetaTech\PwsServer\Ctrl\WebService;
use MetaTech\PwsServer\Ctrl\OtherWebService;
/*!
* @package MetaTech\PwsServer
* @class Application
* @extends Silex\Application
* @author a-Sansara
* @date 2017-03-12 21:46:43 CET
*/
class Application extends App
{
/*!
* @method setServices
* @protected
*/
protected function setServices()
{
$app = $this;
$app['ws.authenticator'] = function ($app) {
return new Authenticator($app['config']['pwsauth']);
};
}
/*!
* @method routingDefinition
* @protected
*/
protected function routingDefinition()
{
$this->register(new CtrlProvider(Test::class , [$this], '/'));
$this->register(new CtrlProvider(WebService::class , [$this], '/ws'));
$this->register(new CtrlProvider(OtherWebService::class, [$this], '/ws/deep'));
}
}

View File

@ -0,0 +1,52 @@
<?php
/*
* This file is part of the pws-server package.
*
* (c) meta-tech.academy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace MetaTech\PwsServer\Ctrl;
use Silex\Application;
use Silex\ControllerCollection;
use Symfony\Component\HttpFoundation\Request;
use MetaTech\Silex\Ws\Controller;
/*!
* @package MetaTech\PwsServer\Ctrl
* @class OtherWebService
* @extends MetaTech\Silex\Ws\Controller
* @author a-Sansara
* @date 2017-03-12 15:39:30 CET
*/
class OtherWebService extends Controller
{
/*!
* @method index
* @public
* @return Symfony\Component\HttpFoundation\Response
*/
public function index()
{
$done = true;
$msg = 'this is deep index';
return $this->response($done, $msg);
}
/*!
* @method routing
* @public
* @param Silex\ControllerCollection $collection
* @return Silex\ControllerCollection
*/
public function routing(ControllerCollection $collection) : ControllerCollection
{
//~ $collection = parent::routing($collection);
$_ = $this->ns();
$collection->match('/', "$_:index");
return $collection;
}
}

View File

@ -0,0 +1,50 @@
<?php
/*
* This file is part of the pws-server package.
*
* (c) meta-tech.academy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace MetaTech\PwsServer\Ctrl;
use Silex\Application;
use Silex\ControllerCollection;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use MetaTech\Silex\Ctrl\Base;
/*!
* @package MetaTech\PwsServer\Ctrl
* @class Test
* @extends MetaTech\Silex\Ctrl\Base
* @author a-Sansara
* @date 2017-03-12 15:39:30 CET
*/
class Test extends Base
{
public function __construct(Application $app)
{
}
public function index()
{
return new Response('index');
}
public function test()
{
return new Response('test');
}
public function routing(ControllerCollection $collection): ControllerCollection
{
$_ = $this->ns();
$collection->match('/' , "$_:index");
$collection->match('/test', "$_:test");
return $collection;
}
}

View File

@ -0,0 +1,53 @@
<?php
/*
* This file is part of the pws-server package.
*
* (c) meta-tech.academy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace MetaTech\PwsServer\Ctrl;
use Silex\Application;
use Silex\ControllerCollection;
use Symfony\Component\HttpFoundation\Request;
use MetaTech\Silex\Ws\Controller;
/*!
* @package MetaTech\PwsServer\Ctrl
* @class WebService
* @extends MetaTech\Silex\Ws\Controller
* @author a-Sansara
* @date 2017-03-12 15:39:30 CET
*/
class WebService extends Controller
{
/*!
* @method index
* @public
* @return Symfony\Component\HttpFoundation\Response
*/
public function index()
{
$done = true;
$msg = 'this is index';
return $this->response($done, $msg);
}
/*!
* @method routing
* @public
* @param Silex\ControllerCollection $collection
* @return Silex\ControllerCollection
*/
public function routing(ControllerCollection $collection) : ControllerCollection
{
$collection = parent::routing($collection);
$_ = $this->ns();
$collection->match('/', "$_:index");
return $collection;
}
}

4
web/index.php Normal file
View File

@ -0,0 +1,4 @@
<?php
require_once(dirname(__dir__) . '/vendor/autoload.php');
(new MetaTech\PwsServer\Application(['path' => dirname(__dir__)]))->run();