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