Skip to content

Commit 72843d4

Browse files
committed
Fixed logout issue, added token expiry and added DatabaseAdmin Command
1 parent 7b18121 commit 72843d4

22 files changed

+215
-191
lines changed

config/dbm.php

+25-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22
return [
3-
'prefix' => '/admin',
3+
'prefix' => '',
44
'namespace' => '\CodexShaper\DBM',
55
'controller_namespace' => '\CodexShaper\DBM\Http\Controllers',
66
'resources_path' => 'package/laravel-database-manager/publishable/assets/',
@@ -10,15 +10,35 @@
1010
'random_length' => 32,
1111
],
1212
'backup' => [
13-
'dump_path' => "c:\\\\xampp\\\\mysql\\\\bin\\\\mysqldump",
14-
'restore_path' => "c:\\\\xampp\\\\mysql\\\\bin\\\\mysql",
15-
'dir' => 'backups',
13+
'mysql' => [
14+
'binary_path' => "c:\\xampp\\mysql\\bin\\",
15+
],
16+
'pgsql' => [
17+
// 'binary_path' => "C:\\pgsql\\bin\\",
18+
],
19+
'mongodb' => [
20+
"dsn" => "mongodb+srv://maab:[email protected]/laravel-database-manager",
21+
],
22+
'dir' => 'backups',
23+
'compress' => true,
24+
'compress_binary_path' => "",
25+
'compress_extension' => ".gz",
26+
'compress_command' => "gzip",
27+
'uncompress_command' => "gunzip",
28+
'debug' => true,
29+
],
30+
'auth' => [
31+
"token" => [
32+
"expiry" => 24 * 60 * 60 * 1000, // 24 hours as a milliseconds
33+
],
1634
],
1735
'user' => [
1836
'model' => 'App\\User',
1937
'table' => 'users',
20-
'local_key' => 'id',
38+
'local_key' => '_id', // MongoDB
39+
// 'local_key' => 'id', // Others
2140
'display_name' => 'name',
41+
'where' => ['email' => '[email protected]'],
2242
],
2343
'permission' => [
2444

database/migrations/2019_10_28_125735_create_dbm_fields_table.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ public function up()
1919
$table->string('name');
2020
$table->string('display_name');
2121
$table->string('type')->nullable();
22-
$table->boolean('required')->default(false);
22+
// $table->boolean('required')->default(false);
2323
$table->boolean('create')->default(true);
2424
$table->boolean('read')->default(true);
2525
$table->boolean('edit')->default(true);
2626
$table->boolean('delete')->default(true);
2727
$table->integer('order')->unsigned();
28-
$table->text('extra')->nullable();
28+
$table->string('function_name')->nullable();
29+
$table->text('settings')->nullable();
2930
$table->timestamps();
3031
});
3132
}

database/seeds/DatabaseManagerSeeder.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public function run()
1414
{
1515
$seeds = [
1616
'DatabasePermissionSeeder',
17-
'DatabaseUserPerissionsSeeder',
17+
// 'DatabaseUserPerissionsSeeder',
1818
];
1919

2020
foreach ($seeds as $class) {

publishable/assets/js/app.js

+19-20
Original file line numberDiff line numberDiff line change
@@ -7168,25 +7168,11 @@ __webpack_require__.r(__webpack_exports__);
71687168
}
71697169
},
71707170
logout: function logout() {
7171-
var _this2 = this;
7172-
7173-
axios.defaults.headers.common['Content-Type'] = 'application/json';
7174-
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('dbm.authToken');
7175-
axios["delete"]('/api/database/logout/').then(function (res) {
7176-
console.log(res.data);
7177-
7178-
if (res.data.success == true) {
7179-
localStorage.removeItem('dbm.authToken');
7180-
localStorage.removeItem('dbm.user');
7181-
7182-
_this2.check();
7183-
7184-
_this2.$router.push({
7185-
name: 'login'
7186-
});
7187-
}
7188-
})["catch"](function (err) {
7189-
return console.log(err);
7171+
localStorage.removeItem('dbm.authToken');
7172+
localStorage.removeItem('dbm.user');
7173+
this.check();
7174+
this.$router.push({
7175+
name: 'login'
71907176
});
71917177
}
71927178
}
@@ -8267,9 +8253,12 @@ __webpack_require__.r(__webpack_exports__);
82678253
password: this.password
82688254
}
82698255
}).then(function (res) {
8270-
console.log(res.data);
8256+
// console.log(res.data);
82718257
localStorage.setItem('dbm.user', JSON.stringify(res.data.user));
82728258
localStorage.setItem('dbm.authToken', res.data.token);
8259+
var now = new Date();
8260+
var expiry = now.getTime() + res.data.expiry;
8261+
localStorage.setItem('dbm.authTokenExpiry', expiry);
82738262

82748263
_this.redirectTo();
82758264
})["catch"](function (err) {
@@ -146583,6 +146572,16 @@ router.beforeEach(function (to, from, next) {
146583146572
nextUrl: to.fullPath
146584146573
}
146585146574
});
146575+
} else if (new Date().getTime() > localStorage.getItem('dbm.authTokenExpiry')) {
146576+
localStorage.removeItem('dbm.user');
146577+
localStorage.removeItem('dbm.authToken');
146578+
localStorage.removeItem('dbm.authTokenExpiry');
146579+
router.push({
146580+
name: "login",
146581+
params: {
146582+
nextUrl: to.fullPath
146583+
}
146584+
});
146586146585
} else {
146587146586
next();
146588146587
}

resources/assets/js/routes.js

+8
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,14 @@ router.beforeEach((to, from, next) => {
243243
name: "login",
244244
params: {nextUrl: to.fullPath}
245245
})
246+
}else if(new Date().getTime() > localStorage.getItem('dbm.authTokenExpiry')){
247+
localStorage.removeItem('dbm.user')
248+
localStorage.removeItem('dbm.authToken')
249+
localStorage.removeItem('dbm.authTokenExpiry')
250+
router.push({
251+
name: "login",
252+
params: {nextUrl: to.fullPath}
253+
})
246254
} else {
247255
next()
248256
}

resources/assets/js/views/App.vue

+4-16
Original file line numberDiff line numberDiff line change
@@ -128,22 +128,10 @@
128128
129129
},
130130
logout(){
131-
axios.defaults.headers.common['Content-Type'] = 'application/json'
132-
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('dbm.authToken');
133-
axios.delete('/api/database/logout/')
134-
.then(res => {
135-
console.log(res.data);
136-
if(res.data.success == true) {
137-
localStorage.removeItem('dbm.authToken')
138-
localStorage.removeItem('dbm.user')
139-
this.check()
140-
this.$router.push({name: 'login'})
141-
}
142-
143-
})
144-
.catch(err => console.log(err))
145-
146-
131+
localStorage.removeItem('dbm.authToken')
132+
localStorage.removeItem('dbm.user')
133+
this.check()
134+
this.$router.push({name: 'login'})
147135
}
148136
}
149137
}

resources/assets/js/views/Login.vue

+8-5
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,13 @@
6868
}
6969
})
7070
.then(res => {
71-
console.log(res.data);
72-
localStorage.setItem('dbm.user', JSON.stringify(res.data.user));
73-
localStorage.setItem('dbm.authToken', res.data.token);
74-
this.redirectTo();
71+
// console.log(res.data);
72+
localStorage.setItem('dbm.user', JSON.stringify(res.data.user))
73+
localStorage.setItem('dbm.authToken', res.data.token)
74+
let now = new Date()
75+
let expiry = now.getTime() + res.data.expiry
76+
localStorage.setItem('dbm.authTokenExpiry', expiry)
77+
this.redirectTo()
7578
})
7679
.catch(err => {
7780
console.log(err)
@@ -81,7 +84,7 @@
8184
},
8285
redirectTo: function(){
8386
if (localStorage.getItem('dbm.authToken') != null) {
84-
this.$emit('check');
87+
this.$emit('check')
8588
if (this.$route.params.nextUrl != null) {
8689
this.$router.push(this.$route.params.nextUrl)
8790
} else {

routes/api.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
Route::put('/record', 'RecordController@update');
5454
Route::delete('/record', 'RecordController@delete');
5555
//User
56-
Route::delete('/logout', 'UserController@logout')->middleware('auth:api');
56+
// Route::delete('/logout', 'UserController@logout')->middleware('auth:api');
5757
});
5858

5959
Route::group([
@@ -62,5 +62,5 @@
6262
], function () {
6363
// User
6464
Route::post('/login', 'UserController@login');
65-
Route::post('/oauth/token', 'UserController@getPersonalAccessToken');
65+
// Route::post('/oauth/token', 'UserController@getPersonalAccessToken');
6666
});

routes/apiBackup.php

-84
This file was deleted.

src/Commands/DatabaseAdmin.php

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
namespace CodexShaper\DBM\Commands;
3+
4+
use CodexShaper\DBM\Facades\Manager;
5+
use Illuminate\Console\Command;
6+
use Illuminate\Filesystem\Filesystem;
7+
use Symfony\Component\Console\Input\InputOption;
8+
9+
class DatabaseAdmin extends Command
10+
{
11+
/**
12+
* The name and signature of the console command.
13+
*
14+
* @var string
15+
*/
16+
protected $signature = 'dbm:admin {email} {action=create} {--c|column=email}';
17+
/**
18+
* The console command description.
19+
*
20+
* @var string
21+
*/
22+
protected $description = 'Make Database Admin';
23+
/**
24+
* Get Option
25+
*
26+
* @return array
27+
*/
28+
protected function getOptions()
29+
{
30+
return [
31+
['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production', null],
32+
];
33+
}
34+
35+
/**
36+
* Get the composer command for the environment.
37+
*
38+
* @return string
39+
*/
40+
protected function findComposer()
41+
{
42+
if (file_exists(getcwd() . '/composer.phar')) {
43+
return '"' . PHP_BINARY . '" ' . getcwd() . '/composer.phar';
44+
}
45+
return 'composer';
46+
}
47+
48+
/**
49+
* Execute the console command.
50+
*
51+
* @param \Illuminate\Filesystem\Filesystem $filesystem
52+
*
53+
* @return void
54+
*/
55+
public function handle(Filesystem $filesystem)
56+
{
57+
$email = $this->argument('email');
58+
$column = $this->option('column');
59+
$permissions = Manager::Permission()->all();
60+
$successMessage = "Admin Created successfully";
61+
62+
if ($this->argument('action') == 'drop') {
63+
$permissions = [];
64+
$successMessage = "Admin Deleted successfully";
65+
}
66+
67+
$userModel = config('dbm.user.model');
68+
$userTable = config('dbm.user.table');
69+
$localObject = Manager::model($userModel, $userTable)
70+
->where($column, $email)
71+
->first();
72+
Manager::Object()
73+
->setManyToManyRelation(
74+
$localObject,
75+
Manager::Permission(),
76+
'dbm_user_permissions',
77+
'user_id',
78+
'dbm_permission_id'
79+
)
80+
->belongs_to_many()
81+
->sync($permissions);
82+
$this->info($successMessage);
83+
}
84+
}

0 commit comments

Comments
 (0)