mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Push Notifications (Mobile and PC) (#13277)
* Update manifest and add service worker cleanup icons a bit * Push notifications WIP * navigate working * cleanup * acknowledge wired up * Set VAPID keys on composer install * Component to control notification permissions. * Allow all user option to validate * Enable on browser load if transport exists. * Check for transport before showing user permissions translations * Documentation * style fixes * access via the attribute model * fix alerting test * update schema * cleanup subscription on disable * non-configurable db and table for webpush subscriptions (respect system connection) * revert AlertTransport change hopefully phpstan can figure it out * phpstan fixes * Support custom details display * Match transport names to brand's preferred display * less duplicate id errors * Tests are done in Laravel code now so remove legacy function usage... could be better, but ok * Style fixes * Style fixes 2 * Fix alert test * Doc updates requires HTTPS and GMP * unregister subscription when permission is set to denied * cleanup after user deletion * delete the right thing * fix whitespace * update install docs to include php-gmp * suggest ext-gmp * update javascript * Update functions.php Co-authored-by: Jellyfrog <Jellyfrog@users.noreply.github.com>
This commit is contained in:
@@ -7,11 +7,11 @@ use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use LibreNMS\Authentication\LegacyAuth;
|
||||
use NotificationChannels\WebPush\HasPushSubscriptions;
|
||||
use Permissions;
|
||||
|
||||
/**
|
||||
@@ -19,7 +19,7 @@ use Permissions;
|
||||
*/
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use Notifiable, HasFactory;
|
||||
use Notifiable, HasFactory, HasPushSubscriptions;
|
||||
|
||||
protected $primaryKey = 'user_id';
|
||||
protected $fillable = ['realname', 'username', 'email', 'level', 'descr', 'can_modify_passwd', 'auth_type', 'auth_id', 'enabled'];
|
||||
@@ -124,6 +124,21 @@ class User extends Authenticatable
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this user has a browser push notification transport configured.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasBrowserPushTransport(): bool
|
||||
{
|
||||
$user_id = \Auth::id();
|
||||
|
||||
return AlertTransport::query()
|
||||
->where('transport_type', 'browserpush')
|
||||
->where('transport_config', 'regexp', "\"user\":\"(0|$user_id)\"")
|
||||
->exists();
|
||||
}
|
||||
|
||||
// ---- Query scopes ----
|
||||
|
||||
/**
|
||||
@@ -189,9 +204,9 @@ class User extends Authenticatable
|
||||
|
||||
// ---- Define Relationships ----
|
||||
|
||||
public function apiToken(): HasOne
|
||||
public function apiTokens(): HasMany
|
||||
{
|
||||
return $this->hasOne(\App\Models\ApiToken::class, 'user_id', 'user_id');
|
||||
return $this->hasMany(\App\Models\ApiToken::class, 'user_id', 'user_id');
|
||||
}
|
||||
|
||||
public function devices()
|
||||
@@ -222,6 +237,11 @@ class User extends Authenticatable
|
||||
return $this->hasMany(\App\Models\Dashboard::class, 'user_id');
|
||||
}
|
||||
|
||||
public function notificationAttribs(): HasMany
|
||||
{
|
||||
return $this->hasMany(NotificationAttrib::class, 'user_id');
|
||||
}
|
||||
|
||||
public function preferences(): HasMany
|
||||
{
|
||||
return $this->hasMany(\App\Models\UserPref::class, 'user_id');
|
||||
|
Reference in New Issue
Block a user