mirror of https://github.com/flarum/flarum
SSO material
parent
7d20722326
commit
6d28713ff6
41
readme.md
41
readme.md
|
@ -1,42 +1,11 @@
|
||||||
#### How to launch with one command?
|

|
||||||
|
## How to launch with one command?
|
||||||
|
|
||||||
* Step 1: `composer install`
|
* Step 1: `composer install`
|
||||||
* Step 2: `php -S localhost:9999 launch.php`
|
* Step 2: `php -S localhost:9999 launch.php`
|
||||||
|
|
||||||
`launch.php` is a custom script that gives you a reproducable development environment.
|
`launch.php` is a custom script that gives you a reproducable development environment.
|
||||||
##### By Ali Gajani
|
___
|
||||||
---
|
Last revision on 16/09/2017
|
||||||
|
@aligajani
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
**[Flarum](http://flarum.org) is free, open-source forum software** built with PHP and [Mithril.js](http://mithril.js.org). It is:
|
|
||||||
|
|
||||||
* **Simple**, with a responsive UI that is optimized for touch devices
|
|
||||||
* **Fast**, with a total JS payload size of ~130 KB gzipped
|
|
||||||
* **Extensible**, so you can tailor it to your use-case
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
> **Flarum is currently in beta and should not be used in production.** It is being developed openly on GitHub. Check out the [Roadmap](http://flarum.org/roadmap) to follow along with our progress.
|
|
||||||
|
|
||||||
You must have SSH access to a server with **PHP 5.5+** and **MySQL 5.5+**, and install [Composer](https://getcomposer.org).
|
|
||||||
|
|
||||||
```
|
|
||||||
composer create-project flarum/flarum . --stability=beta
|
|
||||||
```
|
|
||||||
|
|
||||||
Read the [Installation Guide](http://flarum.org/docs/installation) for more information.
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
Refer to the [FAQ](http://flarum.org/docs/faq), [Documentation](http://flarum.org/docs), and ask questions on the [Community Forum](http://discuss.flarum.org) or [Gitter Chat](https://gitter.im/flarum/flarum).
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Flarum is open-source and we would love your help building it! Please read the [Contributing Guide](https://github.com/flarum/flarum/blob/master/CONTRIBUTING.md) to learn how you can help.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
Copyright (c) 2015 Toby Zerner. Code released under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE).
|
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class Forum
|
||||||
|
{
|
||||||
|
const REMEMBER_ME_KEY = 'flarum_remember';
|
||||||
|
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->config = require __DIR__ . '/config.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call this method after your user is successfully authenticated.
|
||||||
|
*
|
||||||
|
* @param $username
|
||||||
|
* @param $email
|
||||||
|
*/
|
||||||
|
public function login($username, $email)
|
||||||
|
{
|
||||||
|
$password = $this->createPassword($username);
|
||||||
|
$token = $this->getToken($username, $password);
|
||||||
|
|
||||||
|
if (empty($token)) {
|
||||||
|
$this->signup($username, $password, $email);
|
||||||
|
$token = $this->getToken($username, $password);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setRememberMeCookie($token);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call this method after you logged out your user.
|
||||||
|
*/
|
||||||
|
public function logout()
|
||||||
|
{
|
||||||
|
$this->removeRememberMeCookie();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirects a user back to the forum.
|
||||||
|
*/
|
||||||
|
public function redirectToForum()
|
||||||
|
{
|
||||||
|
header('Location: ' . $this->config['flarum_url']);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createPassword($username)
|
||||||
|
{
|
||||||
|
return hash('sha256', $username . $this->config['password_token']);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getToken($username, $password)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'identification' => $username,
|
||||||
|
'password' => $password,
|
||||||
|
'lifetime' => $this->getLifetimeInSeconds(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->sendPostRequest('/api/token', $data);
|
||||||
|
|
||||||
|
return isset($response['token']) ? $response['token'] : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
private function signup($username, $password, $email)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
"data" => [
|
||||||
|
"type" => "users",
|
||||||
|
"attributes" => [
|
||||||
|
"username" => $username,
|
||||||
|
"password" => $password,
|
||||||
|
"email" => $email,
|
||||||
|
"avatarUrl" => "https://cyantificdsgn.files.wordpress.com/2009/11/spidey.png"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->sendPostRequest('/api/users', $data);
|
||||||
|
|
||||||
|
return isset($response['data']['id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function sendPostRequest($path, $data)
|
||||||
|
{
|
||||||
|
$data_string = json_encode($data);
|
||||||
|
|
||||||
|
$ch = curl_init($this->config['flarum_url'] . $path);
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'Content-Length: ' . strlen($data_string),
|
||||||
|
'Authorization: Token ' . $this->config['flarum_api_key'] . '; userId=1',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setRememberMeCookie($token)
|
||||||
|
{
|
||||||
|
$this->setCookie(self::REMEMBER_ME_KEY, $token, time() + $this->getLifetimeInSeconds());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function removeRememberMeCookie()
|
||||||
|
{
|
||||||
|
unset($_COOKIE[self::REMEMBER_ME_KEY]);
|
||||||
|
$this->setCookie(self::REMEMBER_ME_KEY, '', time() - 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setCookie($key, $token, $time)
|
||||||
|
{
|
||||||
|
setcookie($key, $token, $time, '/', $this->config['root_domain']);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLifetimeInSeconds()
|
||||||
|
{
|
||||||
|
return $this->config['lifetime_in_days'] * 60 * 60 * 24;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . '/Forum.php';
|
||||||
|
|
||||||
|
$users = [
|
||||||
|
'user' => [
|
||||||
|
'password' => 'password',
|
||||||
|
'email' => 'test@mailinator.com',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$username = empty($_POST['username']) ? '' : $_POST['username'];
|
||||||
|
$password = empty($_POST['password']) ? '' : $_POST['password'];
|
||||||
|
|
||||||
|
if (isset($users[$username]) && $users[$username]['password'] === $password) {
|
||||||
|
$email = $users[$username]['email'];
|
||||||
|
$forum = new Forum();
|
||||||
|
$forum->login($username, $email);
|
||||||
|
$forum->redirectToForum();
|
||||||
|
} elseif (!empty($username) || !empty($password)) {
|
||||||
|
echo 'Login failed';
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<h1>Login</h1>
|
||||||
|
|
||||||
|
<form method="post" action="auth.php">
|
||||||
|
<input type="text" name="username" placeholder="Username">
|
||||||
|
<input type="password" name="password" placeholder="Password">
|
||||||
|
<button type="submit">Login</button>
|
||||||
|
</form>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . '/Forum.php';
|
||||||
|
|
||||||
|
$forum = new Forum();
|
||||||
|
|
||||||
|
$forum->logout();
|
||||||
|
|
||||||
|
if ($_GET['forum']) {
|
||||||
|
$forum->redirectToForum();
|
||||||
|
}
|
Loading…
Reference in New Issue