API
This commit is contained in:
parent
878d993459
commit
fe2c37f7d7
12 changed files with 207 additions and 6 deletions
64
app/Http/Controllers/API/AppController.php
Normal file
64
app/Http/Controllers/API/AppController.php
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\API;
|
||||||
|
|
||||||
|
use App\Exceptions\HTTPException;
|
||||||
|
use App\Exceptions\NoPermissionException;
|
||||||
|
use App\Exceptions\NotLoggedInException;
|
||||||
|
use App\Exceptions\ResourceNotFound;
|
||||||
|
use App\Http\Resources\API\App;
|
||||||
|
use App\Http\Resources\API\AppForOwner;
|
||||||
|
use App\Models\Setting;
|
||||||
|
use App\Models\User;
|
||||||
|
use http\Env\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Laravel\Lumen\Routing\Controller as BaseController;
|
||||||
|
use TaGeSo\APIResponse\Response;
|
||||||
|
|
||||||
|
class AppController extends BaseController
|
||||||
|
{
|
||||||
|
public function listApps(Response $response) {
|
||||||
|
if(!Auth::check()) {
|
||||||
|
throw new NotLoggedInException();
|
||||||
|
}
|
||||||
|
|
||||||
|
$apps = \App\Models\App::query()->where("user_id", "=", Auth::user()->id)->get();
|
||||||
|
|
||||||
|
return $response->withData(AppForOwner::collection(collect($apps)));
|
||||||
|
}
|
||||||
|
public function appDetails(Response $response, $id) {
|
||||||
|
if(!Auth::check()) {
|
||||||
|
throw new NotLoggedInException();
|
||||||
|
}
|
||||||
|
|
||||||
|
$app = \App\Models\App::query()->where("id", "=", (int)$id)->firstOrFail();
|
||||||
|
|
||||||
|
if($app->user_id == Auth::user()->id) {
|
||||||
|
return $response->withData(new AppForOwner($app));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response->withData(new App($app));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findApp(Response $response, \Illuminate\Http\Request $request) {
|
||||||
|
if(!Auth::check()) {
|
||||||
|
throw new NotLoggedInException();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->validate($request, [
|
||||||
|
'apiKey' => '',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$query = \App\Models\App::query();
|
||||||
|
|
||||||
|
if($request->input("apiKey", false)) {
|
||||||
|
$query->where("apiKey", "=", $request->input("apiKey"));
|
||||||
|
}
|
||||||
|
|
||||||
|
$apps = $query->paginate(20);
|
||||||
|
|
||||||
|
$response->setPagination($apps->currentPage(), $apps->lastPage(), $apps->perPage());
|
||||||
|
return $response->withData(App::collection($apps));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -68,6 +68,14 @@ class UserController extends BaseController
|
||||||
return new AccessToken($token);
|
return new AccessToken($token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function me(Response $response) {
|
||||||
|
if(!Auth::check()) {
|
||||||
|
throw new NotLoggedInException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response->withData(new \App\Http\Resources\API\User(Auth::user()));
|
||||||
|
}
|
||||||
|
|
||||||
public function register(Request $request, Response $response) {
|
public function register(Request $request, Response $response) {
|
||||||
//If Recptache is enabled check it at the beginning
|
//If Recptache is enabled check it at the beginning
|
||||||
if(Setting::getSettingValue("recaptcha_v2_register")) {
|
if(Setting::getSettingValue("recaptcha_v2_register")) {
|
||||||
|
|
38
app/Http/Middleware/CorsMiddleware.php
Normal file
38
app/Http/Middleware/CorsMiddleware.php
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
|
||||||
|
class CorsMiddleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure $next
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle($request, Closure $next)
|
||||||
|
{
|
||||||
|
$headers = [
|
||||||
|
'Access-Control-Allow-Origin' => '*',
|
||||||
|
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
|
||||||
|
'Access-Control-Allow-Credentials' => 'true',
|
||||||
|
'Access-Control-Max-Age' => '86400',
|
||||||
|
'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With'
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($request->isMethod('OPTIONS'))
|
||||||
|
{
|
||||||
|
return response()->json('{"method":"OPTIONS"}', 200, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $next($request);
|
||||||
|
foreach($headers as $key => $value)
|
||||||
|
{
|
||||||
|
$response->header($key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
}
|
36
app/Http/Resources/API/App.php
Normal file
36
app/Http/Resources/API/App.php
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources\API;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class App extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (int)$this->id,
|
||||||
|
#'created_at' => $this->created_at,
|
||||||
|
#'updated_at' => $this->created_at,
|
||||||
|
'name' => $this->name,
|
||||||
|
'description' => $this->description,
|
||||||
|
'directUrl' => $this->direct_url,
|
||||||
|
'url' => $this->url,
|
||||||
|
/*'properties' => [
|
||||||
|
#'autoAccept' => $this->auto_accept,
|
||||||
|
#'untrustedWarning' => $this->untrusted_warning,
|
||||||
|
#'showOnWebpage' => $this->show_on_webpage,
|
||||||
|
#'stopAutoRedirect' => $this->stop_auto_redirect,
|
||||||
|
#'hideInAppList' => $this->hide_in_app_list,
|
||||||
|
#'userCantRemoveApp' => $this->user_cant_remove_app
|
||||||
|
]*/
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
39
app/Http/Resources/API/AppForOwner.php
Normal file
39
app/Http/Resources/API/AppForOwner.php
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources\API;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class AppForOwner extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => (int)$this->id,
|
||||||
|
'created_at' => $this->created_at,
|
||||||
|
'updated_at' => $this->updated_at,
|
||||||
|
'name' => $this->name,
|
||||||
|
'description' => $this->description,
|
||||||
|
'url' => $this->url,
|
||||||
|
'directUrl' => $this->direct_url,
|
||||||
|
'apiKey' => $this->apiKey,
|
||||||
|
'apiSecret' => $this->apiSecret,
|
||||||
|
'properties' => [
|
||||||
|
'testingWarning' => $this->testing_warning,
|
||||||
|
'autoAccept' => $this->auto_accept,
|
||||||
|
'untrustedWarning' => $this->untrusted_warning,
|
||||||
|
'showOnWebpage' => $this->show_on_webpage,
|
||||||
|
'stopAutoRedirect' => $this->stop_auto_redirect,
|
||||||
|
'hideInAppList' => $this->hide_in_app_list,
|
||||||
|
'userCantRemoveApp' => $this->user_cant_remove_app
|
||||||
|
]
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,7 +16,7 @@ class App extends Model
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name', 'description', 'url', 'apiKey', 'apiSecret', 'auto_accept', 'testing_warning', 'untrusted_warning', 'user_id'
|
'name', 'description', 'url', 'apiKey', 'apiSecret', 'auto_accept', 'testing_warning', 'untrusted_warning', 'user_id', 'direct_url'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -41,7 +41,8 @@ class Setting extends Model
|
||||||
'recaptcha_v2_key',
|
'recaptcha_v2_key',
|
||||||
'name_big',
|
'name_big',
|
||||||
'name_small',
|
'name_small',
|
||||||
'name_slogen'
|
'name_slogen',
|
||||||
|
'startpage'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,8 @@ $app->singleton(
|
||||||
// ]);
|
// ]);
|
||||||
|
|
||||||
$app->middleware(array(
|
$app->middleware(array(
|
||||||
TaGeSo\APIResponse\Middelware::class
|
TaGeSo\APIResponse\Middelware::class,
|
||||||
|
\App\Http\Middleware\CorsMiddleware::class
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,12 @@ class NewGuiSettings extends Migration
|
||||||
$setting->typ = "textinput";
|
$setting->typ = "textinput";
|
||||||
$setting->value = "Zentraler authentication Service";
|
$setting->value = "Zentraler authentication Service";
|
||||||
$setting->saveOrFail();
|
$setting->saveOrFail();
|
||||||
|
$setting = new \App\Models\Setting();
|
||||||
|
$setting->name = "startpage";
|
||||||
|
$setting->description = "Show startpage, if not enabled the user will redirect to the login page";
|
||||||
|
$setting->typ = "checkbox";
|
||||||
|
$setting->value = true;
|
||||||
|
$setting->saveOrFail();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,9 +9,9 @@ services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:5.7
|
||||||
ports:
|
ports:
|
||||||
- 3306:3306
|
- 3366:3306
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: example
|
MYSQL_ROOT_PASSWORD: example
|
||||||
MYSQL_DATABASE: oauth
|
MYSQL_DATABASE: oauth
|
||||||
MYSQL_USER: oauth
|
MYSQL_USER: oauth
|
||||||
MYSQL_PASSWORD: oauth
|
MYSQL_PASSWORD: oauth
|
||||||
|
|
|
@ -26,6 +26,5 @@ $app = require __DIR__.'/../bootstrap/app.php';
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
header("Access-Control-Allow-Origin: *");
|
|
||||||
|
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|
|
@ -44,6 +44,15 @@ $router->group(['prefix' => 'api'], function () use ($router) {
|
||||||
$router->post("/register", ['uses' => 'API\UserController@register']);
|
$router->post("/register", ['uses' => 'API\UserController@register']);
|
||||||
$router->get("/captcha", ['uses' => 'API\UserController@reCAPTCHA']);
|
$router->get("/captcha", ['uses' => 'API\UserController@reCAPTCHA']);
|
||||||
$router->get("/invites", ['uses' => 'API\UserController@getInviteCodeInfo']);
|
$router->get("/invites", ['uses' => 'API\UserController@getInviteCodeInfo']);
|
||||||
|
$router->get("/me", ['uses' => 'API\UserController@me']);
|
||||||
|
});
|
||||||
|
$router->group(['prefix' => 'app'], function () use ($router) {
|
||||||
|
$router->get("/", ['uses' => 'API\AppController@listApps']);
|
||||||
|
$router->get("/find", ['uses' => 'API\AppController@findApp']);
|
||||||
|
$router->group(['prefix' => '{id}'], function () use ($router) {
|
||||||
|
$router->get("/", ['uses' => 'API\AppController@appDetails']);
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
$router->group(['prefix' => 'account'], function () use ($router) {
|
$router->group(['prefix' => 'account'], function () use ($router) {
|
||||||
$router->get("/", ['uses' => 'API\AccountController@getUsers']);
|
$router->get("/", ['uses' => 'API\AccountController@getUsers']);
|
||||||
|
|
Reference in a new issue