Search by

rulli / laravel-onedrive

nubinter

Laravel package untuk OneDrive Personal (Microsoft account) dengan login permanen via auto-refresh token.

Package info

github.com/nubinter/laravel-onedrive

pkg:composer/rulli/laravel-onedrive

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-11-01 06:08 UTC

This package is auto-updated.

Last update: 2026-11-01 06:13:46 UTC


README

Package Laravel untuk OneDrive Personal (akun Microsoft pribadi, bukan Outlook/Kantor) via Microsoft Graph API, dengan login permanen — token di-refresh otomatis di belakang layar, Anda hanya perlu konsep login lewat browser satu kali.

Cara "login permanen" bekerja

  1. Saat login pertama, package meminta scope offline_access → Anda mendapat refresh_token.
  2. Access token Microsoft hanya berlaku ±1 jam. Setiap access token kedaluwarsa, package otomatis menukarnya dengan refresh_token — dan Microsoft memberikan refresh_token baru (di-rotate).
  3. Selama aplikasi memanggil OneDrive minimal 1× dalam 90 hari, refresh token terus berputar dan tidak pernah kedaluwarsa = login permanen.
  4. Token disimpan terenkripsi (Laravel Crypt, memakai APP_KEY) di tabel database.

Jika >90 hari tidak dipakai, cukup buka kembali /onedrive/login untuk memasangkan ulang.

Kebutuhan

  • PHP 8.1+
  • Laravel 9, 10, 11, 12, atau 13

Instalasi

# di project Laravel Anda
composer require rulli/laravel-onedrive
php artisan vendor:publish --tag=onedrive-config
php artisan vendor:publish --tag=onedrive-migrations
php artisan migrate

Alternatif: install dari source lokal (sebelum rilis di Packagist)

composer config repositories.rulli-onedrive '{"type":"path","url":"E:/www/laravel-onedrive"}'
composer require rulli/laravel-onedrive:@dev

Daftarkan App di Azure (untuk OneDrive Personal) — SEKALI

  1. Buka https://portal.azure.com → cari App registrations → New registration
  2. Isi nama, mis. Laravel OneDrive
  3. Supported account: pilih "Personal Microsoft accounts only" ← ini kunci OneDrive personal
  4. Redirect URI (tipe Web): http://localhost:8000/onedrive/callback → Register
  5. Buka app → Certificates & secrets → New client secret → simpan nilainya
  6. API permissions (Personal Microsoft permissions): sudah default User.Read — cukup, scope lain diminta waktu login.

Konfigurasi .env project Laravel

ONEDRIVE_CLIENT_ID=xxxx-xxxx-xxxx
ONEDRIVE_CLIENT_SECRET=xxxxx~xxxxxx
ONEDRIVE_REDIRECT_URI=http://localhost:8000/onedrive/callback

Login (cukup 1× via browser)

http://localhost:8000/onedrive/login

Muncul halaman login Microsoft → masukkan akun personal (outlook.com / hotmail.com) → klik "Izinkan" → selesai. Token tersimpan permanen di database.

URL tersedia:

URL Fungsi
/onedrive/login mulai login
/onedrive/callback dipanggil Microsoft (otomatis)
/onedrive/status cek koneksi (JSON)
/onedrive/logout hapus token (login ulang kapan saja)

Pemakaian

use Rulli\OneDrive\Facades\OneDrive;

// Informasi akun
OneDrive::me();               // nama, email utama
OneDrive::drive();            // info drive

// Daftar isi
OneDrive::list('/');          // root
OneDrive::list('/Documents');
OneDrive::meta('/Documents/laporan.pdf');
OneDrive::exists('/Documents/laporan.pdf');

// Download
$isi = OneDrive::download('/Documents/laporan.pdf');          // string
OneDrive::downloadTo('/Documents/besar.zip', storage_path('app/besar.zip'));  // streaming file besar
$url = OneDrive::downloadUrl('/Documents/laporan.pdf');       // tautan unduh sementara

// Upload
OneDrive::upload('/Documents/laporan.pdf', file_get_contents('laporan.pdf')); // kecil & besar otomatis
OneDrive::uploadFrom(storage_path('app/backup.zip'), '/Backup/backup.zip');

// Folder
OneDrive::mkdir('/Backup/2026/Oktober');
OneDrive::move('/Documents/lama.pdf', '/Backup/lama.pdf', 'baru.pdf'); // pindah + rename
OneDrive::delete('/Backup/lama.pdf');

// Berbagi & cari
$link = OneDrive::shareLink('/Documents/laporan.pdf');        // link publik view
OneDrive::search('laporan');
OneDrive::recent();

Contoh di Laravel route/controller

Route::get('/backup', function () {
    \Rulli\OneDrive\Facades\OneDrive::uploadFrom(
        storage_path('app/db.sql'),
        '/Backup/db-' . date('Y-m-d') . '.sql'
    );

    return 'berhasil diupload!';
});

Perintah artisan

php artisan onedrive:status

Handling error (token habis >90 hari, password diganti/dicabut)

try {
    OneDrive::list('/');
} catch (\Rulli\OneDrive\OneDriveAuthRequiredException $e) {
    // Kondisi ini jarang: refresh token praktis permanen di rotasi otomatis.
    // Redirect user ke /onedrive/login —
    return redirect('/onedrive/login');
}

Anda juga dapat memanggil OneDrive::needsRelogin() false secara manual sebelum proses berjalan.

Keamanan

  • Token (access_token, refresh_token) disimpan terenkripsi di database memakai APP_KEY.
  • Pastikan .env tidak ikut ke git, dan APP_KEY disimpan aman.
  • Untuk produksi, ganti ONEDRIVE_REDIRECT_URI ke domain HTTPS Anda.

Catatan

  • Package ini spesifik akun personal (login.microsoftonline.com/consumers). Untuk OneDrive bisnis (Microsoft 365/kantor), tenant → common atau organizations.
  • File > 4 MB menggunakan upload session (chunk 5 MB) — aman untuk file multi-GB.