Created
December 21, 2016 06:55
-
-
Save huacnlee/f89bbe4b8350ba75435a2160ae5884a9 to your computer and use it in GitHub Desktop.
WordPress Page Template for SSO with Homeland
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Fork from: https://gist.github.com/adamcapriola/11300529 | |
$sso_secret = 'meow'; | |
$homeland_url = 'http://your-homeland-app.com'; // Note: No trailing slash! | |
if ( ! is_user_logged_in() ) { | |
// Preserve sso and sig parameters | |
$redirect = add_query_arg(); | |
// Change %0A to %0B so it's not stripped out in wp_sanitize_redirect | |
$redirect = str_replace( '%0A', '%0B', $redirect ); | |
// Build login URL | |
$login = wp_login_url( $redirect ); | |
// Redirect to login | |
wp_redirect( $login ); | |
exit; | |
} | |
// Logged in to WordPress, now try to log in to Discourse with WordPress user information | |
else { | |
// Payload and signature | |
$payload = $_GET['sso']; | |
$sig = $_GET['sig']; | |
// Change %0B back to %0A | |
$payload = urldecode( str_replace( '%0B', '%0A', urlencode( $payload ) ) ); | |
// Check for helper class | |
// https://github.com/ArmedGuy/discourse_sso_php | |
if ( ! class_exists( 'Discourse_SSO' ) ) { | |
// Error message | |
echo( 'Helper class is not properly included.' ); | |
// Terminate | |
exit; | |
} | |
// Validate signature | |
$sso = new Discourse_SSO( $sso_secret ); | |
if ( ! ( $sso->validate( $payload, $sig ) ) ) { | |
// Error message | |
echo( 'Invalid request.' ); | |
// Terminate | |
exit; | |
} | |
// Nonce | |
$nonce = $sso->getNonce( $payload ); | |
// Current user info | |
get_currentuserinfo(); | |
// Map information | |
$params = array( | |
'nonce' => $nonce, | |
'name' => $current_user->display_name, | |
'username' => $current_user->user_login, | |
'email' => $current_user->user_email, | |
'about_me' => $current_user->description, | |
'external_id' => $current_user->ID | |
); | |
// Build login string | |
$q = $sso->buildLoginString( $params ); | |
// Redirect back to Homeland | |
wp_redirect( $homeland_url . '/auth/sso/login?' . $q ); | |
exit; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment