Discourse SSO and API Helper for PHP

Installation

The package is registered at Packagist as vinkas/discourse-php and can be installed using composer:

composer require vinkas/discourse-php

Usage

$discourse = new Vinkas\Discourse\PHP\Client('discouse.example.com', true);  // set true if ssl enabled

API

$api = $discourse->api('API_KEY', 'API_USERNAME');
$api->topics()->create('TITLE', 'CONTENT', 'CATEGORY_SLUG')

SSO

$payload = $_GET['sso'];
$signature = $_GET['sig'];

$sso = $discourse->sso('SECRET', $payload, $signature);

if (!($sso->isValid())) {
    header("HTTP/1.1 403 Forbidden");
    echo("Bad SSO request");
    die();
}

$userParams = array(
    'external_id' => 'USER_ID',
    'email'     => 'EMAIL_ADDRESS',
    'username' => 'USERNAME',  // optional
    'name'     => 'FULL_NAME'  // optional
    // for more available fields https://meta.discourse.org/t/official-single-sign-on-for-discourse/13045
);

$url = $sso->getResponseUrl($userParams)
header('Location: ' . $url);
exit(0);
6 „Gefällt mir“

Since I committed in other task I didn’t tested the code well and unable to give detailed documentation with usage examples.

I will release next version soon with more options, documentation and examples.

1 „Gefällt mir“

I haven’t looked closely at this but it sounds like there might be some overlap with @michaeld’s PHP API client for Discourse:

I already aware of this existing package. But I didn’t used it. I used famous GuzzleHttp (they used php native curl) and composer. Also in mine it have SSO option too.

After all I created this package because of I am also creating laravel package (which depends it) for easy implementation with laravel features like eloquent model. Yes few laravel packages also already exist for discourse. But I have something different in my mind for development :slight_smile:

1 „Gefällt mir“

Too bad you decided to create another, instead of just contributing to what already existed, and making it better.

Sorry @michaeld. Coding structure which I wanted and created is totally different from your existing package. That’s why I created it as new one.

In other words I created this package for my own purpose. Then I decided to open source it.

1 „Gefällt mir“

Für alle, die diesen Beitrag gerade erst finden (es ist jetzt März 2020 … hallo aus der häuslichen COVID-19-Quarantäne!) –

Die von @michaeld erwähnte Bibliothek scheint nur für die Kommunikation mit der API gedacht zu sein. Das hat nichts mit SSO zu tun.

Ich habe mit der Bibliothek von @vinothkannans experimentiert, die er auf GitHub geteilt hat, aber wie er selbst oben erwähnt, hat er nicht viel getestet, und tatsächlich finde ich sie ziemlich fehlerhaft und noch nicht einsatzbereit.

Ich habe diese hier gefunden, und sie funktioniert bei mir gut:

9 „Gefällt mir“