Skip to content

Commit 749442e

Browse files
authored
Merge pull request #1454 from knom/2.x
Enable/Disable Items with authentification headers
2 parents b90b38e + 5950ca9 commit 749442e

28 files changed

Lines changed: 328 additions & 42 deletions

.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,9 @@ PUSHER_APP_CLUSTER=mt1
4848

4949
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
5050
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
51+
52+
AUTH_ROLES_ENABLE=false
53+
AUTH_ROLES_HEADER="remote-groups"
54+
AUTH_ROLES_HTTP_HEADER="HTTP_REMOTE_GROUPS"
55+
AUTH_ROLES_ADMIN="admin"
56+
AUTH_ROLES_DELIMITER=","

.vscode/launch.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Listen for Xdebug",
6+
"type": "php",
7+
"request": "launch",
8+
"port": 9003,
9+
"pathMappings": {
10+
"/var/www/html": "${workspaceFolder}"
11+
}
12+
}
13+
]
14+
}
15+

.vscode/tasks.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"version": "2.0.0",
3+
"tasks": [
4+
{
5+
"label": "Start Docker Compose",
6+
"type": "shell",
7+
"command": "docker-compose up --build",
8+
"group": {
9+
"kind": "build",
10+
"isDefault": true
11+
},
12+
"problemMatcher": []
13+
}
14+
]
15+
}
16+

app/Http/Controllers/ItemController.php

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,59 @@ public function __construct()
3333
/**
3434
* Display a listing of the resource on the dashboard.
3535
*/
36-
public function dash(): View
36+
public function dash(Request $request): View
3737
{
3838
$treat_tags_as = \App\Setting::fetch('treat_tags_as');
3939

4040
$data["treat_tags_as"] = $treat_tags_as;
4141

42-
if ($treat_tags_as == 'categories') {
43-
$data['categories'] = Item::whereHas('children')->with('children', function ($query) {
44-
$query->pinned()->orderBy('order', 'asc');
45-
})->pinned()->orderBy('order', 'asc')->get();
46-
47-
} elseif ($treat_tags_as == 'tags') {
48-
$data['apps'] = Item::with('parents')->where('type', 0)->pinned()->orderBy('order', 'asc')->get();
49-
$data['all_apps'] = Item::where('type', 0)->orderBy('order', 'asc')->get();
50-
$data['taglist'] = Item::where('id', 0)->orWhere(function($query) {
51-
$query->where('type', 1)->pinned();
52-
})->orderBy('order', 'asc')->get();
42+
if (config('app.auth_roles_enable')) {
43+
$roles = explode(config('app.auth_roles_delimiter'), $request->header(config('app.auth_roles_header')));
44+
if ($treat_tags_as == 'categories') {
45+
$data['categories'] = Item::whereHas('children')->with('children', function ($query) {
46+
$query->pinned()->orderBy('order', 'asc');
47+
})->pinned()->orderBy('order', 'asc')->get();
48+
49+
} elseif ($treat_tags_as == 'tags') {
50+
$data['apps'] = Item::with('parents')->where('type', 0)->pinned()->orderBy('order', 'asc')->get();
51+
$data['all_apps'] = Item::where('type', 0)->orderBy('order', 'asc')->get();
52+
$data['taglist'] = Item::where('id', 0)->orWhere(function($query) {
53+
$query->where('type', 1)->pinned();
54+
})->orderBy('order', 'asc')->get();
55+
} else {
56+
57+
$data['apps'] = Item::whereHas('parents', function ($query) {
58+
$query->where('id', 0);
59+
})->whereIn('role', $roles)->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get();
60+
61+
$data['all_apps'] = Item::whereHas('parents', function ($query) {
62+
$query->where('id', 0);
63+
})->orWhere('type', 1)->orderBy('order', 'asc')->get();
64+
}
5365
} else {
54-
55-
$data['apps'] = Item::whereHas('parents', function ($query) {
56-
$query->where('id', 0);
57-
})->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get();
58-
59-
$data['all_apps'] = Item::whereHas('parents', function ($query) {
60-
$query->where('id', 0);
61-
})->orWhere(function ($query) {
62-
$query->where('type', 1)->whereNot('id', 0);
63-
})->orderBy('order', 'asc')->get();
66+
if ($treat_tags_as == 'categories') {
67+
$data['categories'] = Item::whereHas('children')->with('children', function ($query) {
68+
$query->pinned()->orderBy('order', 'asc');
69+
})->pinned()->orderBy('order', 'asc')->get();
70+
71+
} elseif ($treat_tags_as == 'tags') {
72+
$data['apps'] = Item::with('parents')->where('type', 0)->pinned()->orderBy('order', 'asc')->get();
73+
$data['all_apps'] = Item::where('type', 0)->orderBy('order', 'asc')->get();
74+
$data['taglist'] = Item::where('id', 0)->orWhere(function($query) {
75+
$query->where('type', 1)->pinned();
76+
})->orderBy('order', 'asc')->get();
77+
} else {
78+
79+
$data['apps'] = Item::whereHas('parents', function ($query) {
80+
$query->where('id', 0);
81+
})->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get();
82+
83+
$data['all_apps'] = Item::whereHas('parents', function ($query) {
84+
$query->where('id', 0);
85+
})->orWhere(function ($query) {
86+
$query->where('type', 1)->whereNot('id', 0);
87+
})->orderBy('order', 'asc')->get();
88+
}
6489
}
6590

6691
//$data['all_apps'] = Item::doesntHave('parents')->get();

app/Http/Controllers/TagController.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,16 @@ public function store(Request $request): RedirectResponse
8888
*
8989
* @param $slug
9090
*/
91-
public function show($slug): View
91+
public function show($slug, Request $request): View
9292
{
9393
$item = Item::whereUrl($slug)->first();
9494
//print_r($item);
95-
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
95+
if (config('app.auth_roles_enable')) {
96+
$roles = explode(config('app.auth_roles_delimiter'), $request->header(config('app.auth_roles_header')));
97+
$data['apps'] = $item->children()->whereIn('role', $roles)->pinned()->orderBy('order', 'asc')->get();
98+
} else {
99+
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
100+
}
96101
$data['tag'] = $item->id;
97102
$data['all_apps'] = $item->children;
98103

app/Item.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
* @property string|null $class
3434
* @property string|null $appid
3535
* @property string|null $appdescription
36+
* @property string|null $role
3637
* @property-read \Illuminate\Database\Eloquent\Collection|Item[] $children
3738
* @property-read int|null $children_count
3839
* @property-read string $droppable
@@ -51,6 +52,7 @@
5152
* @method static Builder|Item pinned()
5253
* @method static Builder|Item query()
5354
* @method static Builder|Item whereAppdescription($value)
55+
* @method static Builder|Item whereRole($value)
5456
* @method static Builder|Item whereAppid($value)
5557
* @method static Builder|Item whereClass($value)
5658
* @method static Builder|Item whereColour($value)
@@ -105,6 +107,7 @@ protected static function boot(): void
105107
'user_id',
106108
'tag_id',
107109
'appid',
110+
'role',
108111
];
109112

110113

app/Providers/AppServiceProvider.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public function boot(): void
8888
$view->with('trianglify_seed', $trianglify_seed);
8989
$view->with('allusers', $allusers);
9090
$view->with('current_user', $current_user);
91+
if (config('app.auth_roles_enable')){
92+
$view->with('enable_auth_admin_controls', in_array(config('app.auth_roles_admin'),explode(config('app.auth_roles_delimiter'), $_SERVER[config('app.auth_roles_http_header')])));
93+
} else {
94+
$view->with('enable_auth_admin_controls', true);
95+
}
9196
});
9297

9398
$this->app['view']->addNamespace('SupportedApps', app_path('SupportedApps'));

config/app.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,4 +192,10 @@
192192
'Yaml' => Symfony\Component\Yaml\Yaml::class,
193193
])->toArray(),
194194

195+
'auth_roles_enable' => (bool) env('AUTH_ROLES_ENABLE', false),
196+
'auth_roles_header' => env('AUTH_ROLES_HEADER', 'remote-groups'),
197+
'auth_roles_http_header' => env('AUTH_ROLES_HTTP_HEADER', 'HTTP_REMOTE_GROUPS'),
198+
'auth_roles_admin' => env('AUTH_ROLES_ADMIN', 'admin'),
199+
'auth_roles_delimiter' => env('AUTH_ROLES_DELIMITER', ','),
200+
195201
];
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class AddRoleToItem extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::table('items', function (Blueprint $table) {
17+
$table->text('role')->nullable();
18+
});
19+
}
20+
21+
/**
22+
* Reverse the migrations.
23+
*
24+
* @return void
25+
*/
26+
public function down()
27+
{
28+
Schema::table('items', function (Blueprint $table) {
29+
//
30+
});
31+
}
32+
}

docker/docker-compose.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
version: "3"
2+
services:
3+
nginx:
4+
build:
5+
context: .
6+
dockerfile: nginx/Dockerfile
7+
ports:
8+
- "8080:80"
9+
networks:
10+
- internal
11+
volumes:
12+
- ../:/var/www/html
13+
php:
14+
build:
15+
context: .
16+
dockerfile: php/Dockerfile
17+
networks:
18+
- internal
19+
environment:
20+
XDEBUG_MODE: debug
21+
XDEBUG_CONFIG: client_host=host.docker.internal client_port=9003
22+
volumes:
23+
- ../:/var/www/html
24+
networks:
25+
internal:
26+
driver: bridge

0 commit comments

Comments
 (0)