hwkdo / ms-graph-laravel
This is my package ms-graph-laravel
Fund package maintenance!
hwkdo
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/hwkdo/ms-graph-laravel
Requires
- php: ^8.3
- guzzlehttp/guzzle: ^7.0
- illuminate/contracts: ^11.0||^12.0
- microsoft/microsoft-graph: ^2.49
- spatie/laravel-package-tools: ^1.16
README
Ein Laravel Package für die Integration mit Microsoft Graph API. Dieses Package bietet eine umfassende Lösung für die Verwaltung von Microsoft 365-Diensten wie Benutzer, E-Mails, OneDrive, Lizenzen und Abwesenheitsvorlagen.
Installation
Sie können das Package über Composer installieren:
composer require hwkdo/ms-graph-laravel
Sie können die Migrationen veröffentlichen und ausführen:
php artisan vendor:publish --tag="ms-graph-laravel-migrations"
php artisan migrate
Sie können die Konfigurationsdatei veröffentlichen:
php artisan vendor:publish --tag="ms-graph-laravel-config"
Webhook-Job-Mappings initialisieren
Das Package enthält einen Seeder, um die Standard-Webhook-Job-Mappings zu erstellen:
php artisan db:seed --class=Hwkdo\\MsGraphLaravel\\Database\\Seeders\\GraphWebhookJobMappingSeeder
Alternativ können Sie den Seeder in Ihrem DatabaseSeeder registrieren:
// database/seeders/DatabaseSeeder.php public function run(): void { $this->call([ \Hwkdo\MsGraphLaravel\Database\Seeders\GraphWebhookJobMappingSeeder::class, ]); }
Der Seeder erstellt automatisch Mappings für folgende Webhook-Typen:
intracollect- Formwerk Mail Webhooks für IntraCollectangebote- Bestellungen und Angebote Webhooksntopng- Ntopng Webhooksonedrive_filer- OneDrive Filer Webhooksonedrive_filerextern- Externe OneDrive Filer Webhooks
Die Notification URLs werden automatisch basierend auf der PORTAL_URL Umgebungsvariable generiert.
Konfiguration
Fügen Sie die folgenden Umgebungsvariablen zu Ihrer .env-Datei hinzu:
# Microsoft Graph Grundkonfiguration MSGRAPH_TENTANT_ID=your-tenant-id MSGRAPH_DEFAULT_SUFFIX=your-domain.com MICROSOFT_REDIRECT_URI=https://your-app.com/auth/callback # Standard App Registration MSGRAPH_APP_ID=your-client-id MSGRAPH_APP_SECRET_KEY=your-client-secret # OneDrive App Registration (optional) MSGRAPH_APP_ID_ONEDRIVE=your-onedrive-client-id MSGRAPH_APP_SECRET_KEY_ONEDRIVE=your-onedrive-client-secret # Subscription App Registration (optional) MSGRAPH_APP_ID_SUBSCRIPTION=your-subscription-client-id MSGRAPH_APP_SECRET_KEY_SUBSCRIPTION=your-subscription-client-secret # Subscription Secret MSGRAPH_SUBSCRIBE_SECRET=your-subscription-secret # Portal URL für Webhook-Benachrichtigungen PORTAL_URL=https://portal.hwkdo.com # Cache Konfiguration MSGRAPH_CACHE_SECONDS=300
Azure Setup
- Erstellen Sie eine App-Registrierung im Azure Portal
- Erstellen Sie einen Client Secret für die App
- Weisen Sie die erforderlichen Microsoft Graph-Berechtigungen zu:
User.Read.All- Für BenutzerverwaltungMail.Read- Für E-Mail-ZugriffFiles.Read.All- Für OneDrive-ZugriffLicense.Read.All- Für LizenzverwaltungPresence.Read.All- Für Anwesenheitsstatus
Verwendung
Facade verwenden
use Hwkdo\MsGraphLaravel\Facades\MsGraphLaravel; // Benutzer abrufen $user = MsGraphLaravel::getUser('user@domain.com'); // Benutzerpräsenz abrufen $presence = MsGraphLaravel::getUserPresence('user@domain.com'); // Benutzerteams abrufen $teams = MsGraphLaravel::getUserTeams('user@domain.com');
Dependency Injection verwenden
use Hwkdo\MsGraphLaravel\Services\UserService; use Hwkdo\MsGraphLaravel\Services\LicenseService; class UserController extends Controller { public function __construct( private UserService $userService, private LicenseService $licenseService ) {} public function getUserInfo(string $email) { $user = $this->userService->getUser($email); $licenses = $this->licenseService->getLicenseDetails($email); return response()->json([ 'user' => $user, 'licenses' => $licenses ]); } }
Verfügbare Services
UserService
Verwaltung von Microsoft 365-Benutzern:
use Hwkdo\MsGraphLaravel\Services\UserService; $userService = app(UserService::class); // Benutzer nach UPN abrufen $user = $userService->getUserByUpn('user@domain.com'); // Benutzer nach Alias abrufen $user = $userService->getUserByAlias('user'); // Benutzer aktualisieren $userService->update('user@domain.com', ['displayName' => 'New Name']); // Benutzerpräsenz abrufen $presence = $userService->getUserPresence('user@domain.com'); // Benutzerteams abrufen $teams = $userService->getUserTeams('user@domain.com'); // Direkte Gruppen abrufen $groups = $userService->getUserDirectGroups('user@domain.com'); // Transitive Gruppen abrufen $groups = $userService->getUserTransitiveGroups('user@domain.com');
LicenseService
Verwaltung von Microsoft 365-Lizenzen:
use Hwkdo\MsGraphLaravel\Services\LicenseService; $licenseService = app(LicenseService::class); // Lizenzdetails abrufen $licenses = $licenseService->getLicenseDetails('user@domain.com');
MailboxService
E-Mail-Verwaltung:
use Hwkdo\MsGraphLaravel\Services\MailboxService; $mailboxService = app(MailboxService::class); // E-Mails abrufen, senden und verwalten
OneDriveService
OneDrive-Dateiverwaltung:
use Hwkdo\MsGraphLaravel\Services\OneDriveService; $oneDriveService = app(OneDriveService::class); // Dateien hochladen, herunterladen und verwalten
OutOfOfficeTemplateService
Abwesenheitsvorlagen-Verwaltung:
use Hwkdo\MsGraphLaravel\Services\OutOfOfficeTemplateService; $oooService = app(OutOfOfficeTemplateService::class); // Abwesenheitsvorlagen erstellen und verwalten
Artisan Commands
Das Package stellt folgende Artisan-Befehle zur Verfügung:
# Abonnements überprüfen php artisan msgraph:check-subscriptions # Aktive Benutzer mit Abwesenheits-Cache aktualisieren php artisan msgraph:refresh-active-users-with-ooo-cache
Webhook-Subscriptions
Das Package unterstützt Microsoft Graph Webhook-Subscriptions für Echtzeit-Updates.
Webhook-Job-Mappings
Webhook-Subscriptions werden in der Datenbank verwaltet. Jede Subscription ist mit einem Job verknüpft, der ausgeführt wird, wenn ein Webhook empfangen wird.
Neue Webhook-Subscription hinzufügen
use Hwkdo\MsGraphLaravel\Models\GraphWebhookJobMapping; use App\Jobs\ProcessMyWebhook; GraphWebhookJobMapping::create([ 'webhook_type' => 'my_webhook', 'name' => 'my_webhook_name', 'job_class' => ProcessMyWebhook::class, 'filepath' => storage_path('app/webhooks/'), 'upn' => 'user@domain.com', 'resource' => "/users/user@domain.com/mailFolders('inbox')/messages", 'notification_url' => GraphWebhookJobMapping::generateNotificationUrl('my_webhook'), 'change_type' => 'created', 'description' => 'Beschreibung der Subscription', 'is_active' => true, ]);
Webhook-Subscription abrufen
use Hwkdo\MsGraphLaravel\Models\GraphWebhookJobMapping; // Alle aktiven Subscriptions $subscriptions = GraphWebhookJobMapping::getActiveSubscriptions(); // Subscription nach Typ $jobClass = GraphWebhookJobMapping::getJobClassForType('intracollect'); // Subscription nach Resource und URL $subscription = GraphWebhookJobMapping::findByResourceAndNotificationUrl( "/users/user@domain.com/mailFolders('inbox')/messages", 'https://portal.hwkdo.com/api/kunden/ms-graph-subscription/intracollect' );
Webhook-Job erstellen
Ihr Webhook-Job sollte die empfangenen Daten verarbeiten:
namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class ProcessMyWebhook implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct( public string $resource ) {} public function handle(): void { // Verarbeite die Webhook-Daten // $this->resource enthält die Microsoft Graph Resource ID } }
Webhook-Endpoint
Das Package registriert automatisch einen Webhook-Endpoint unter:
POST /api/kunden/ms-graph-subscription/{typ}
Microsoft Graph sendet Webhooks an diese URL. Der {typ} Parameter bestimmt, welcher Job ausgeführt wird.
Features
Microsoft Graph Integration
- Automatische Token-Verwaltung: OAuth-Tokens werden automatisch abgerufen, gecacht und erneuert
- Mehrere App-Registrierungen: Unterstützung für verschiedene Microsoft Graph-Anwendungen
- Umfassende API-Abdeckung: Benutzer, E-Mails, OneDrive, Lizenzen, Teams und mehr
Services
- UserService: Vollständige Benutzerverwaltung mit UPN- und Alias-Suche
- LicenseService: Lizenzverwaltung und -überwachung
- MailboxService: E-Mail-Verwaltung und -verarbeitung
- OneDriveService: Datei-Upload, -Download und -verwaltung
- OutOfOfficeTemplateService: Abwesenheitsvorlagen-Management
Webhooks & Subscriptions
- Echtzeit-Updates: Webhook-Subscriptions für E-Mails und OneDrive
- Automatische Verwaltung: Subscription-Lebenszyklus wird automatisch verwaltet
- Mehrere Endpunkte: Unterstützung für verschiedene Webhook-Endpunkte
Allgemein
- Laravel HTTP Client: Verwendet Laravels eingebauten HTTP-Client für alle Anfragen
- Umfassendes Logging: Alle Operationen werden für Debugging-Zwecke geloggt
- Exception Handling: Ordnungsgemäße Fehlerbehandlung mit detaillierten Fehlermeldungen
- Caching: Konfigurierbare Cache-Zeiten für bessere Performance
API-Referenz
UserService
getUser(string $mail): ?User
Ruft einen Benutzer anhand der E-Mail-Adresse ab.
Parameter:
$mail: E-Mail-Adresse des Benutzers
Rückgabe: Microsoft Graph User-Objekt oder null
getUserByUpn(string $upn): User
Ruft einen Benutzer anhand des UPN (User Principal Name) ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Microsoft Graph User-Objekt
getUserByAlias(string $alias): ?User
Ruft einen Benutzer anhand des Alias ab.
Parameter:
$alias: Alias des Benutzers
Rückgabe: Microsoft Graph User-Objekt oder null
update(string $upn, array $data): User
Aktualisiert Benutzerdaten.
Parameter:
$upn: UPN des Benutzers$data: Zu aktualisierende Daten
Rückgabe: Aktualisiertes Microsoft Graph User-Objekt
getUserPresence(string $upn): Presence
Ruft den Anwesenheitsstatus eines Benutzers ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Microsoft Graph Presence-Objekt
getUserTeams(string $upn): array
Ruft die Teams eines Benutzers ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Array von Microsoft Graph Team-Objekten
getUserDirectGroups(string $upn): array
Ruft die direkten Gruppen eines Benutzers ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Array von Microsoft Graph Group-Objekten
getUserTransitiveGroups(string $upn): array
Ruft die transitiven Gruppen eines Benutzers ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Array von Microsoft Graph Group-Objekten
LicenseService
getLicenseDetails(string $upn): array
Ruft die Lizenzdetails eines Benutzers ab.
Parameter:
$upn: UPN des Benutzers
Rückgabe: Array von Microsoft Graph LicenseDetails-Objekten
Testing
composer test
Changelog
Bitte sehen Sie CHANGELOG für weitere Informationen zu den letzten Änderungen.
Contributing
Bitte sehen Sie CONTRIBUTING für Details.
Security Vulnerabilities
Bitte überprüfen Sie unsere Sicherheitsrichtlinie, wie Sicherheitslücken gemeldet werden.
Credits
License
Die MIT-Lizenz (MIT). Bitte sehen Sie License File für weitere Informationen.