From cce0048a12aec6e9f7da0e5323f556d143b464bd Mon Sep 17 00:00:00 2001 From: Thibault Debatty <thibault.debatty@gmail.com> Date: Fri, 20 Jul 2018 10:01:10 +0200 Subject: [PATCH] Modified api routes for storing records --- web/app/Http/Controllers/SensorController.php | 41 ------------------- web/app/Models/Sensors.php | 18 -------- web/app/Models/Server.php | 11 ++++- web/composer.json | 4 +- web/routes/api.php | 23 +++++++---- web/tests/Feature/ExampleTest.php | 24 ++++++++++- 6 files changed, 47 insertions(+), 74 deletions(-) delete mode 100644 web/app/Http/Controllers/SensorController.php delete mode 100644 web/app/Models/Sensors.php diff --git a/web/app/Http/Controllers/SensorController.php b/web/app/Http/Controllers/SensorController.php deleted file mode 100644 index 17318ce..0000000 --- a/web/app/Http/Controllers/SensorController.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -namespace App\Http\Controllers; - -use Illuminate\Http\Request; -use App\Models\Sensors; - -class SensorController extends Controller -{ - public function index() - { - return Sensors::all(); - } - - public function show($id) - { - return Sensors::find($id); - } - - public function store(Request $request) - { - return Sensors::create($request->all()); - } - - public function update(Request $request, $id) - { - $sensor = Sensors::findOrFail($id); - $sensor->update($request->all()); - - return $sensor; - } - - public function delete(Request $request, $id) - { - $sensor = Sensors::findOrFail($id); - $sensor->delete(); - - return 204; - } - -} diff --git a/web/app/Models/Sensors.php b/web/app/Models/Sensors.php deleted file mode 100644 index d6e4b13..0000000 --- a/web/app/Models/Sensors.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -namespace App\Models; - -use Moloquent; - -class Sensors extends Moloquent -{ - protected $connection = 'mongodb'; - protected $collection = 'sensors'; - protected $fillable = ['id','content','token']; - protected $server; - - public function server($id) - { - $this->server = Server::find($id); - } -} \ No newline at end of file diff --git a/web/app/Models/Server.php b/web/app/Models/Server.php index b770f20..fbbd898 100644 --- a/web/app/Models/Server.php +++ b/web/app/Models/Server.php @@ -6,10 +6,17 @@ use Illuminate\Database\Eloquent\Model; class Server extends Model { - protected $fillable = ['name']; + + protected $fillable = ['name', 'token']; public $sensors; - protected $primaryKey = 'id'; public $lastState; + + public function __construct(array $attributes = []) { + $attributes["token"] = str_random(32); + return parent::__construct($attributes); + } + + public function organization() { return $this->belongsTo('App\Models\Organizations'); diff --git a/web/composer.json b/web/composer.json index f06ab4b..dcb4cd3 100644 --- a/web/composer.json +++ b/web/composer.json @@ -7,10 +7,8 @@ "require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", - "jenssegers/mongodb": "^3.3", "laravel/framework": "5.5.*", - "laravel/tinker": "~1.0", - "laravelcollective/html": "~5.0" + "laravel/tinker": "~1.0" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/web/routes/api.php b/web/routes/api.php index f059918..4a9b96a 100644 --- a/web/routes/api.php +++ b/web/routes/api.php @@ -1,6 +1,8 @@ <?php use Illuminate\Http\Request; +use MongoDB\Client as Mongo; +use App\Models\Server; /* |-------------------------------------------------------------------------- @@ -13,12 +15,17 @@ use Illuminate\Http\Request; | */ -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); +Route::post('record/{server}', function(Request $request, Server $server) { + if ($server->token !== $request->get("token", "")) { + abort(403); + } + + $data = $request->all(); + $data["server_id"] = $server->id; + $data["time"] = time(); + + $collection = (new Mongo)->monitoring->records; + $collection->insertOne($data); + + return "ok"; }); -Route::get('sensors', 'SensorController@index'); -Route::get('sensors/{sensor}', 'SensorController@show'); -Route::post('sensors', 'SensorController@store'); -Route::put('sensors/{sensor}', 'SensorController@update'); -Route::delete('sensors/{article}', 'SensorController@delete'); -Route::get('register', 'ServerController@register'); \ No newline at end of file diff --git a/web/tests/Feature/ExampleTest.php b/web/tests/Feature/ExampleTest.php index f31e495..43ca053 100644 --- a/web/tests/Feature/ExampleTest.php +++ b/web/tests/Feature/ExampleTest.php @@ -2,11 +2,15 @@ namespace Tests\Feature; +use App\Models\Server; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class ExampleTest extends TestCase { + + use RefreshDatabase; + /** * A basic test example. * @@ -14,8 +18,24 @@ class ExampleTest extends TestCase */ public function testBasicTest() { - $response = $this->get('/'); + $this->get('/')->assertStatus(200); + } + + public function testRecord() + { + $server = new Server(); + $server->name = "srv01"; + $server->save(); + + $this->post('/api/record/' . $server->id, [])->assertStatus(403); + $this->post('/api/record/' . $server->id, ["token" => "abc123"])->assertStatus(403); + + $data = [ + "token" => $server->token, + "version" => "0.1.2", + "uname" => "Linux whatever..." + ]; - $response->assertStatus(200); + $this->post('/api/record/' . $server->id, $data)->assertStatus(200); } } -- GitLab