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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

Per chi sta appena scoprendo questo argomento (siamo a marzo 2020… saluti dalla quarantena covid-19 a casa!) –

La libreria di @michaeld menzionata sopra sembra essere solo per interagire con l’API. Questo non ha davvero nulla a che fare con l’SSO.

Ho provato la libreria di @vinothkannans che ha condiviso su GitHub, ma, come lui stesso afferma sopra, non ha effettuato molti test e, in effetti, la trovo piuttosto piena di bug e non pronta per l’uso in produzione.

Ho trovato questa e funziona bene per me:

9 Mi Piace