Metadata-Version: 2.4
Name: akun-client
Version: 0.1.1
Summary: Pustaka integrasi klien SSO Akun
Author: Radian Data Platform
Classifier: Programming Language :: Python :: 3
Classifier: Framework :: Django
Description-Content-Type: text/markdown
Requires-Dist: PyJWT>=2.0.0
Requires-Dist: cryptography>=3.0.0
Requires-Dist: django>=3.2
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: requires-dist
Dynamic: summary

# Akun Client SDK

`akun-client` adalah pustaka Python/Django SDK resmi untuk mengintegrasikan aplikasi klien Anda dengan platform Single Sign-On (SSO) Akun. Pustaka ini menyediakan middleware untuk memproses token Bearer JWT secara otomatis, dekorator untuk membatasi akses view Django, serta modul validasi token luring (offline) menggunakan kunci publik RS256.

## Fitur
* **Validasi Offline RS256**: Memverifikasi validitas token JWT dengan cepat tanpa perlu melakukan panggilan API jaringan (network call) ke server SSO.
* **Middleware Django**: Membaca token Bearer dari header `Authorization` dan secara otomatis mengaitkan informasi pengguna ke `request.akun_user`.
* **Dekorator Django**: Proteksi view dengan `@require_akun_auth` yang otomatis mengalihkan pengguna ke portal login SSO terpusat jika belum masuk.

## Instalasi

Instal secara langsung menggunakan `pip` atau `uv` dari folder lokal repositori pengembangan Anda:

```bash
# Menggunakan pip (editable mode)
pip install -e ./packages/akun-client

# Menggunakan uv (development mode)
uv pip install -e ./packages/akun-client
```

## Konfigurasi Django

Tambahkan konfigurasi berikut pada berkas `settings.py` di aplikasi klien Anda:

1. **Daftarkan Middleware**:
   Tambahkan `akun_client.AkunAuthMiddleware` ke dalam daftar `MIDDLEWARE`:

   ```python
   MIDDLEWARE = [
       ...
       'django.contrib.auth.middleware.AuthenticationMiddleware',
       'akun_client.AkunAuthMiddleware',  # Letakkan setelah AuthenticationMiddleware
       ...
   ]
   ```

2. **Pengaturan Konfigurasi Portal**:
   Tambahkan kamus setelan `AKUN` di `settings.py`:

   ```python
   AKUN = {
       'SERVER_URL': 'http://127.0.0.1:8000', # URL utama server SSO Akun
       'PUBLIC_KEY': """-----BEGIN PUBLIC KEY-----
   MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
   -----END PUBLIC KEY-----""", # Kunci publik RS256 dari portal SSO Akun
   }
   ```

## Contoh Penggunaan

### 1. Memproteksi View Django dengan Dekorator

Gunakan dekorator `@require_akun_auth` untuk memastikan pengguna telah masuk sebelum mengakses view.

```python
from django.shortcuts import render
from akun_client import require_akun_auth

@require_akun_auth
def dashboard_view(request):
    # Data user teridentifikasi di request.akun_user
    user_info = request.akun_user
    return render(request, 'dashboard.html', {'user': user_info})
```

### 2. Validasi Token Secara Manual (Luring)

Jika Anda ingin melakukan verifikasi token JWT di luar middleware Django:

```python
from akun_client import AkunTokenValidator

public_key = "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
validator = AkunTokenValidator(public_key)

try:
    user_payload = validator.validate("string_token_jwt_disini")
    print("Token valid. Payload:", user_payload)
except ValueError as e:
    print("Verifikasi gagal:", str(e))
```
