2010-05-19 02:39:56 +09:00
< ? php
2020-06-08 18:25:01 +09:00
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
2010-05-19 02:39:56 +09:00
/**
* OpenID bridge administration panel
*
* @ category Settings
2020-06-08 18:25:01 +09:00
* @ package GNUsocial
2010-05-19 02:39:56 +09:00
* @ author Zach Copley < zach @ status . net >
* @ copyright 2010 StatusNet , Inc .
2020-06-08 18:25:01 +09:00
* @ license https :// www . gnu . org / licenses / agpl . html GNU AGPL v3 or later
2010-05-19 02:39:56 +09:00
*/
2020-06-08 18:25:01 +09:00
defined ( 'GNUSOCIAL' ) || die ();
2010-05-19 02:39:56 +09:00
/**
* Administer global OpenID settings
*
2020-06-08 18:25:01 +09:00
* @ category Admin
* @ package GNUsocial
* @ author Zach Copley < zach @ status . net >
* @ license https :// www . gnu . org / licenses / agpl . html GNU AGPL v3 or later
2010-05-19 02:39:56 +09:00
*/
class OpenidadminpanelAction extends AdminPanelAction
{
/**
* Returns the page title
*
* @ return string page title
*/
2020-06-08 18:25:01 +09:00
public function title ()
2010-05-19 02:39:56 +09:00
{
2011-04-28 03:37:44 +09:00
// TRANS: Title for OpenID bridge administration page.
2020-06-08 18:25:01 +09:00
return _m ( 'TITLE' , 'OpenID Settings' );
2010-05-19 02:39:56 +09:00
}
/**
* Instructions for using this form .
*
* @ return string instructions
*/
2020-06-08 18:25:01 +09:00
public function getInstructions ()
2010-05-19 02:39:56 +09:00
{
2011-04-28 03:37:44 +09:00
// TRANS: Page instructions.
2010-05-19 02:39:56 +09:00
return _m ( 'OpenID settings' );
}
/**
* Show the OpenID admin panel form
*
* @ return void
*/
2020-06-08 18:25:01 +09:00
public function showForm ()
2010-05-19 02:39:56 +09:00
{
$form = new OpenIDAdminPanelForm ( $this );
$form -> show ();
return ;
}
/**
* Save settings from the form
*
* @ return void
*/
2020-06-08 18:25:01 +09:00
public function saveSettings ()
2010-05-19 02:39:56 +09:00
{
static $settings = array (
'openid' => array ( 'trusted_provider' , 'required_team' )
);
static $booleans = array (
2010-05-29 08:52:17 +09:00
'openid' => array ( 'append_username' ),
2010-05-19 02:39:56 +09:00
'site' => array ( 'openidonly' )
);
$values = array ();
foreach ( $settings as $section => $parts ) {
foreach ( $parts as $setting ) {
$values [ $section ][ $setting ]
= $this -> trimmed ( $setting );
}
}
foreach ( $booleans as $section => $parts ) {
foreach ( $parts as $setting ) {
$values [ $section ][ $setting ]
= ( $this -> boolean ( $setting )) ? 1 : 0 ;
}
}
// This throws an exception on validation errors
$this -> validate ( $values );
// assert(all values are valid);
$config = new Config ();
2020-06-08 18:25:01 +09:00
$config -> query ( 'START TRANSACTION' );
2010-05-19 02:39:56 +09:00
foreach ( $settings as $section => $parts ) {
foreach ( $parts as $setting ) {
Config :: save ( $section , $setting , $values [ $section ][ $setting ]);
}
}
foreach ( $booleans as $section => $parts ) {
foreach ( $parts as $setting ) {
Config :: save ( $section , $setting , $values [ $section ][ $setting ]);
}
}
$config -> query ( 'COMMIT' );
return ;
}
2020-06-08 18:25:01 +09:00
public function validate ( & $values )
2010-05-19 02:39:56 +09:00
{
// Validate consumer key and secret (can't be too long)
if ( mb_strlen ( $values [ 'openid' ][ 'trusted_provider' ]) > 255 ) {
$this -> clientError (
2011-04-28 03:37:44 +09:00
// TRANS: Client error displayed when OpenID provider URL is too long.
_m ( 'Invalid provider URL. Maximum length is 255 characters.' )
2010-05-19 02:39:56 +09:00
);
}
if ( mb_strlen ( $values [ 'openid' ][ 'required_team' ]) > 255 ) {
$this -> clientError (
2011-04-28 03:37:44 +09:00
// TRANS: Client error displayed when Launchpad team name is too long.
_m ( 'Invalid team name. Maximum length is 255 characters.' )
2010-05-19 02:39:56 +09:00
);
}
}
}
class OpenIDAdminPanelForm extends AdminForm
{
/**
* ID of the form
*
* @ return int ID of the form
*/
2020-06-08 18:25:01 +09:00
public function id ()
2010-05-19 02:39:56 +09:00
{
return 'openidadminpanel' ;
}
/**
* class of the form
*
* @ return string class of the form
*/
2020-06-08 18:25:01 +09:00
public function formClass ()
2010-05-19 02:39:56 +09:00
{
return 'form_settings' ;
}
/**
* Action of the form
*
* @ return string URL of the action
*/
2020-06-08 18:25:01 +09:00
public function action ()
2010-05-19 02:39:56 +09:00
{
return common_local_url ( 'openidadminpanel' );
}
/**
* Data elements of the form
*
* @ return void
*
* @ todo Some of the options could prevent users from logging in again .
* Make sure that the acting administrator has a valid OpenID matching ,
* or more carefully warn folks .
*/
2020-06-08 18:25:01 +09:00
public function formData ()
2010-05-19 02:39:56 +09:00
{
$this -> out -> elementStart (
'fieldset' ,
array ( 'id' => 'settings_openid' )
);
2011-04-28 03:37:44 +09:00
// TRANS: Fieldset legend.
2020-06-08 18:25:01 +09:00
$this -> out -> element ( 'legend' , null , _m ( 'LEGEND' , 'Trusted provider' ));
$this -> out -> element (
'p' ,
'form_guide' ,
2011-04-28 03:37:44 +09:00
// TRANS: Form guide.
2010-05-19 02:39:56 +09:00
_m ( 'By default, users are allowed to authenticate with any OpenID provider. ' .
'If you are using your own OpenID service for shared sign-in, ' .
2020-06-08 18:25:01 +09:00
'you can restrict access to only your own users here.' )
);
2010-05-19 02:39:56 +09:00
$this -> out -> elementStart ( 'ul' , 'form_data' );
$this -> li ();
$this -> input (
'trusted_provider' ,
2011-04-28 03:37:44 +09:00
// TRANS: Field label.
2010-05-19 02:39:56 +09:00
_m ( 'Provider URL' ),
2011-04-28 03:37:44 +09:00
// TRANS: Field title.
2010-05-19 02:39:56 +09:00
_m ( 'All OpenID logins will be sent to this URL; other providers may not be used.' ),
'openid'
);
$this -> unli ();
2010-05-29 08:52:17 +09:00
$this -> li ();
$this -> out -> checkbox (
2011-04-28 03:37:44 +09:00
// TRANS: Checkbox label.
2020-06-08 18:25:01 +09:00
'append_username' ,
_m ( 'Append a username to base URL' ),
2010-05-29 08:52:17 +09:00
( bool ) $this -> value ( 'append_username' , 'openid' ),
2011-04-28 03:37:44 +09:00
// TRANS: Checkbox title.
2010-05-29 08:52:17 +09:00
_m ( 'Login form will show the base URL and prompt for a username to add at the end. Use when OpenID provider URL should be the profile page for individual users.' ),
'true'
);
$this -> unli ();
2010-05-19 02:39:56 +09:00
$this -> li ();
$this -> input (
'required_team' ,
2011-04-28 03:37:44 +09:00
// TRANS: Field label.
_m ( 'Required team' ),
// TRANS: Field title.
2010-05-19 02:39:56 +09:00
_m ( 'Only allow logins from users in the given team (Launchpad extension).' ),
'openid'
);
$this -> unli ();
$this -> out -> elementEnd ( 'ul' );
$this -> out -> elementEnd ( 'fieldset' );
$this -> out -> elementStart (
'fieldset' ,
array ( 'id' => 'settings_openid-options' )
);
2011-04-28 03:37:44 +09:00
// TRANS: Fieldset legend.
2020-06-08 18:25:01 +09:00
$this -> out -> element ( 'legend' , null , _m ( 'LEGEND' , 'Options' ));
2010-05-19 02:39:56 +09:00
$this -> out -> elementStart ( 'ul' , 'form_data' );
$this -> li ();
$this -> out -> checkbox (
2011-04-28 03:37:44 +09:00
// TRANS: Checkbox label.
2020-06-08 18:25:01 +09:00
'openidonly' ,
_m ( 'Enable OpenID-only mode' ),
2010-05-19 02:39:56 +09:00
( bool ) $this -> value ( 'openidonly' , 'site' ),
2011-04-28 03:37:44 +09:00
// TRANS: Checkbox title.
2010-10-16 21:15:02 +09:00
_m ( 'Require all users to login via OpenID. Warning: disables password authentication for all users!' ),
2010-05-19 02:39:56 +09:00
'true'
);
$this -> unli ();
$this -> out -> elementEnd ( 'ul' );
$this -> out -> elementEnd ( 'fieldset' );
}
/**
* Action elements
*
* @ return void
*/
2020-06-08 18:25:01 +09:00
public function formActions ()
2010-05-19 02:39:56 +09:00
{
2011-04-28 03:37:44 +09:00
// TRANS: Button text to save OpenID settings.
2020-06-08 18:25:01 +09:00
$this -> out -> submit (
'submit' ,
_m ( 'BUTTON' , 'Save' ),
'submit' ,
null ,
// TRANS: Button title to save OpenID settings.
_m ( 'Save OpenID settings.' )
);
2010-05-19 02:39:56 +09:00
}
}