diff --git a/app/Helpers/ConfigHelper.php b/app/Helpers/ConfigHelper.php index be02b83..b2ee231 100644 --- a/app/Helpers/ConfigHelper.php +++ b/app/Helpers/ConfigHelper.php @@ -123,8 +123,11 @@ class ConfigHelper 'smtp_port' => 25, 'smtp_username' => '', 'social_facebook_login' => false, + 'social_twitter_login' => false, 'social_user_profiles' => false, - 'theme' => 'default' + 'theme' => 'default', + 'twitter_app_id' => '', + 'twitter_app_secret' => '', ); } @@ -171,4 +174,10 @@ class ConfigHelper return $config; } + + public function isSocialMediaLoginEnabled() + { + return $this->get('social_facebook_login') || + $this->get('social_twitter_login'); + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/DefaultController.php b/app/Http/Controllers/Admin/DefaultController.php index 5dd439c..8553d1c 100644 --- a/app/Http/Controllers/Admin/DefaultController.php +++ b/app/Http/Controllers/Admin/DefaultController.php @@ -38,7 +38,8 @@ class DefaultController extends Controller $this->passwordSettingKeys = [ 'smtp_password', - 'facebook_app_secret' + 'facebook_app_secret', + 'twitter_app_secret' ]; } @@ -229,6 +230,7 @@ class DefaultController extends Controller 'restrict_original_download', 'smtp_encryption', 'social_facebook_login', + 'social_twitter_login', 'social_user_profiles' ]; $updateKeys = [ @@ -244,6 +246,8 @@ class DefaultController extends Controller 'smtp_username', 'smtp_password', 'theme', + 'twitter_app_id', + 'twitter_app_secret', 'recaptcha_site_key', 'recaptcha_secret_key', 'analytics_code' diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 88cd5f1..177a782 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -8,7 +8,9 @@ use App\Http\Controllers\Controller; use App\User; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; +use Laravel\Socialite\One\TwitterProvider; use Laravel\Socialite\Two\FacebookProvider; +use League\OAuth1\Client\Server\Twitter as TwitterServer; use Socialite; class LoginController extends Controller @@ -126,6 +128,17 @@ class LoginController extends Controller return $socialite->driver('facebook')->redirect(); } + /** + * Redirect the user to the Twitter authentication page. + * + * @return \Illuminate\Http\Response + */ + public function redirectToTwitter() + { + $socialite = $this->setSocialiteConfigs(); + return $socialite->driver('twitter')->redirect(); + } + /** * Obtain the user information from Facebook. * @@ -192,6 +205,17 @@ class LoginController extends Controller return $socialite->buildProvider(FacebookProvider::class, $config); } ); + $socialite->extend( + 'twitter', + function ($app) use ($socialite) { + $config = [ + 'identifier' => UserConfig::get('twitter_app_id'), + 'secret' => decrypt(UserConfig::get('twitter_app_secret')), + 'callback_uri' => route('login_callback.twitter') + ]; + return new TwitterProvider($app['request'], new TwitterServer($config)); + } + ); return $socialite; } diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index 922cc10..83e362a 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -212,7 +212,8 @@ return [ 'security_allow_self_registration' => 'Allow self-registration', 'security_allow_self_registration_description' => 'With this option enabled, users can sign up for their own accounts. You can grant permissions to accounts to allow users to upload their own photos or manage yours.', 'social_facebook' => 'Facebook', - 'social_tab' => 'Social' + 'social_tab' => 'Social', + 'social_twitter' => 'Twitter' ], 'select_all_action' => 'Select all', 'select_all_album_active' => 'Any action you select in the list below will apply to all photos in this album.', diff --git a/resources/lang/en/forms.php b/resources/lang/en/forms.php index 09808d8..5cc99ed 100644 --- a/resources/lang/en/forms.php +++ b/resources/lang/en/forms.php @@ -49,6 +49,10 @@ return [ 'settings_social_facebook_app_secret' => 'Facebook App Secret:', 'settings_social_facebook_login' => 'Allow login/registration with a Facebook account.', 'settings_social_facebook_login_help' => 'With this option enabled, users can register (if enabled) and login with their Facebook account.', + 'settings_social_twitter_app_id' => 'Twitter App ID:', + 'settings_social_twitter_app_secret' => 'Twitter App Secret:', + 'settings_social_twitter_login' => 'Allow login/registration with a Twitter account', + 'settings_social_twitter_login_help' => 'With this option enabled, users can register (if enabled) and login with their Twitter account.', 'settings_social_user_profiles' => 'Enable public user profiles', 'settings_social_user_profiles_help' => 'Display public pages for users showing their albums, cameras used and activity.', 'storage_access_key_label' => 'Access key:', diff --git a/resources/views/themes/base/admin/settings.blade.php b/resources/views/themes/base/admin/settings.blade.php index 4710d11..94fe8bf 100644 --- a/resources/views/themes/base/admin/settings.blade.php +++ b/resources/views/themes/base/admin/settings.blade.php @@ -327,6 +327,7 @@
+ {{-- Facebook --}}
@@ -339,7 +340,7 @@
- +
- + @if ($errors->has('facebook_app_secret')) @@ -370,6 +371,53 @@
+ +
+ + {{-- Twitter --}} +
+
+ +
+ +
+
+ + @lang('admin.settings.social_twitter') + + +
+ + +
+ +
+ + + + @if ($errors->has('twitter_app_id')) +
+ {{ $errors->first('twitter_app_id') }} +
+ @endif +
+ +
+ + + + @if ($errors->has('twitter_app_secret')) +
+ {{ $errors->first('twitter_app_secret') }} +
+ @endif +
+
+
+
diff --git a/resources/views/themes/base/partials/login.blade.php b/resources/views/themes/base/partials/login.blade.php index 3fd6848..542302d 100644 --- a/resources/views/themes/base/partials/login.blade.php +++ b/resources/views/themes/base/partials/login.blade.php @@ -1,8 +1,8 @@ @if (!$is_sso) -

@lang('auth.social_login')

-

- -

+ @if (UserConfig::isSocialMediaLoginEnabled()) +

@lang('auth.social_login')

+ @include(Theme::viewName('partials.social_login_providers')) + @endif

@lang('auth.email_password_login')

@else diff --git a/resources/views/themes/base/partials/register.blade.php b/resources/views/themes/base/partials/register.blade.php index 7c6e3cc..c9b3704 100644 --- a/resources/views/themes/base/partials/register.blade.php +++ b/resources/views/themes/base/partials/register.blade.php @@ -1,8 +1,8 @@ @if (!$is_sso) -

@lang('auth.social_register')

-

- -

+ @if (UserConfig::isSocialMediaLoginEnabled()) +

@lang('auth.social_register')

+ @include(Theme::viewName('partials.social_login_providers')) + @endif

@lang('auth.email_password_register')

@else diff --git a/resources/views/themes/base/partials/social_login_providers.blade.php b/resources/views/themes/base/partials/social_login_providers.blade.php new file mode 100644 index 0000000..927c19b --- /dev/null +++ b/resources/views/themes/base/partials/social_login_providers.blade.php @@ -0,0 +1,8 @@ +

+ @if (UserConfig::get('social_facebook_login')) + + @endif + @if (UserConfig::get('social_twitter_login')) + + @endif +

\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3521f5a..d6cecc2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -78,6 +78,8 @@ Route::group(['prefix' => 'install'], function () { Route::get('login/facebook', 'Auth\LoginController@redirectToFacebook')->name('login.facebook'); Route::get('login/facebook/callback', 'Auth\LoginController@handleFacebookCallback')->name('login_callback.facebook'); Route::get('login/sso', 'Auth\LoginController@showLoginFormSso')->name('auth.login_sso'); +Route::get('login/twitter', 'Auth\LoginController@redirectToTwitter')->name('login.twitter'); +Route::get('login/twitter/callback', 'Auth\LoginController@handleTwitterCallback')->name('login_callback.twitter'); Route::get('register/sso', 'Auth\RegisterController@showRegistrationFormSso')->name('auth.register_sso'); // Gallery