Skip to content
This repository has been archived by the owner on Jul 12, 2022. It is now read-only.

Commit

Permalink
Initial Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
herpaderpaldent committed Apr 6, 2018
1 parent c7fc2b8 commit a1f1255
Showing 1 changed file with 10 additions and 107 deletions.
117 changes: 10 additions & 107 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,126 +1,29 @@
# SPINEN's Discourse SSO for Laravel
# Hepraderp Aldent's - SeAT Discourse

This SeAT-Package is based upon [SPINEN's Discourse SSO for Laravel](https://github.com/spinen/laravel-discourse-sso).
Extendend with [richp10/discourse-api-php](https://github.com/richp10/discourse-api-php) to be able to create users and
topics based on roles in SeAT.

## Prerequisite

Aside from Laravel >= 5.2, there is 1 package that is required. NOTE: There are limitations in the way that 5.1 deals with collections, so I am taking the easy way & just not supporting it. If you need this in 5.1, then please make a merge request on the `SsoController`.
There are two dependencies.

* ["cviebrock/discourse-php": "^0.9.3",](https://github.com/cviebrock/discourse-php)
* ["cviebrock/discourse-php": "^0.9.3"](https://github.com/cviebrock/discourse-php)
* ["richp10/discourse-api-php": "^1.2"](https://github.com/richp10/discourse-api-php)

## Install

Install Discourse SSO for Laravel:

```bash
$ composer require spinen/laravel-discourse-sso
$ composer require herpaderpaldent/seat-discourse
```

### For >= Laravel 5.5, you are done with the Install
### For SeAT 3.0, you are done with the Install

The package uses the auto registration feature

### For < Laravel 5.5, you have to register the Service Provider

Add the Service Provider to `config/app.php`:

```php
'providers' => [
// ...
Spinen\Discourse\SsoServiceProvider::class,
];
```

## Configuration

All of the configuration values are stored in under a `discourse` key in `config/services.php`. Here is the array to add...

```php
'discourse' => [
// The route's URI that acts as the entrypoint for Discourse to start the SSO process.
// Used by Discourse to route incoming logins.
'route' => 'discourse/sso',

// Secret string used to encrypt/decrypt SSO information,
// be sure that it is 10 chars or longer
'secret' => env('DISCOURSE_SECRET'),

// Disable Discourse from sending welcome message
'suppress_welcome_message' => 'true',

// Where the Discourse form lives
'url' => env('DISCOURSE_URL'),

// User specific items
// NOTE: The 'email' & 'external_id' are the only 2 required fields
'user' => [
// Check to see if the user has forum access & should be logged in via SSO
'access' => null,

// Groups to make sure that the user is part of in a comma-separated string
// NOTE: Groups cannot have spaces in their names & must already exist in Discourse
'add_groups' => null,

// Boolean for user a Discourse admin, leave null to ignore
'admin' => null,

// Full path to user's avatar image
'avatar_url' => null,

// The avatar is cached, so this triggers an update
'avatar_force_update' => false,

// Content of the user's bio
'bio' => null,

// Verified email address (see "require_activation" if not verified)
'email' => 'email',

// Unique string to the user that will never change
'external_id' => 'id',

// Boolean for user a Discourse admin, leave null to ignore
'moderator' => null,

// Full name on Discourse if the user is new or
// if SiteSetting.sso_overrides_name is set
'name' => 'name',

// Groups to make sure that the user is *NOT* part of in a comma-separated string
// NOTE: Groups cannot have spaces in their names & must already exist in Discourse
// There is not a way to specify the exact list of groups that a user is in, so
// you may want to send the inverse of the 'add_groups'
'remove_groups' => null,

// If the email has not been verified, set this to true
'require_activation' => false,

// username on Discourse if the user is new or
// if SiteSetting.sso_overrides_username is set
'username' => 'email',
],
],
```

The value of the properties for the `user` property can be one of 4 values...

1. `false` -- passed as set to Discourse
2. `true` -- passed as set to Discourse
3. `null` -- disables sending property to Discourse
4. a `string` -- name of a property on the `User` model

You can then add logic to the `User` model inside of [Accessors](https://laravel.com/docs/master/eloquent-mutators#defining-an-accessor) to provide the values for the properties configured for the user. For example, if you wanted any user with an email address that matched "yourdomain.tld" to be a moderator, then you could set the `moderator` property to a string like `discourse_moderator` and add the following to your `User` model...

```php
/**
* Is the user a Discourse moderator.
*
* @param string $value
* @return boolean
*/
public function getDiscourseModeratorAttribute($value)
{
return ends_with($this->email, "yourdomain.tld");
}
```

## Left to do

Expand Down

0 comments on commit a1f1255

Please sign in to comment.