Hi there
I am busy trying to integrate www.oneall.com with RB private cloud, OneAll basically an all in one endpoint for 120+ social media sites.
Based on this post it is suggested we can use the HTTP Get and HTTP POST triggers to achieve OAuth2 authentication:
https://community.progress.com/community_groups/rollbase/f/25/t/14158.aspx#
All OAuth 2 require server side token processing and authentication which require a redirect url (callback handler).
With OneAll this has been simplified somewhat but still requires server side code to process the returned token and JSON response.
I have written and Object script using rbv_api.sendJSONRequest to send my connection requests:
var token; var siteDomain = 'https://sub.api.oneall.com'; var publicKey = '114696e7'; var privateKey = '701489da-'; var siteAuth = publicKey + ":" + privateKey; var encodedSiteAuth = "MTE0Njk2ZTctODMyZC00Mm"; rbv_api.println(encodedSiteAuth); //var url = siteDomain + "/connections/" + token + ".json"; var url = siteDomain + "/connections/a51cd9c5-df0c-467d-a5fc-deccfb883d38.json"; var data = null; var method = "GET"; var contentType = "application/json; charset=UTF-8"; var header = { "Authorization" : "Basic " + encodedSiteAuth }; var request = rbv_api.sendJSONRequest(url, null, method, contentType, null, null, header); rbv_api.println(request); var dj = JSON.parse(request); //Extract data var data = dj.response.result.data; var userId; var userToken; var identityToken; //Check for plugin if (data.plugin.key === 'social_login'){ //Operation successful if (data.plugin.data.status === 'success'){ //The user_token uniquely identifies the user //that has connected with his social network account userToken = data.user.user_token; //The identity_token uniquely identifies the social network account //that the user has used to connect with identityToken = data.user.identity.identity_token; // 1) Check if you have a userID for this token in your database //userId = GetUserIdForUserToken(userToken); // 1a) If the userID is empty then this is the first time that this user // has connected with a social network account on your website if (userId === null){ // 1a1) Create a new user account and store it in your database // Optionally display a form to collect more data about the user. //userId = {The ID of the user that you have created} // 1a2) Attach the user_token to the userID of the created account. //LinkUserTokenToUserId (userToken, userId); } // 1b) If you DO have an userID for the user_token then this user has // already connected before else{ // 1b1) The account already exists } // 2) You have either created a new user or read the details of an existing // user from your database. In both cases you should now have a $user_id // 2a) Create a Single Sign On session // $sso_session_token = GenerateSSOSessionToken ($user_token, $identity_token); // If you would like to use Single Sign on then you should now call our API // to generate a new SSO Session: http://docs.oneall.com/api/resources/sso/ // 2b) Login this user // You now need to login this user, exactly like you would login a user // after a traditional (username/password) login (i.e. set cookies, setup // the session) and forward him to another page (i.e. his account dashboard) } } else if (data.plugin.key === 'social_link'){ //Operation successfull if (data.plugin.data.status === 'success'){ //Identity linked if (data.plugin.data.action === 'link_identity'){ //The identity <identity_token> has been linked to the user <user_token> userToken = data.user.user_token; identityToken = data.user.identity.identity_token; //Next Step: // 1] Get _your_ userid from _your_ SESSION DATA // 2] Check if the userid is linked to this user_token: GetUserIdForUserToken($user_token) // 2.1] If not linked, tie the <user_token> to this userid : LinkUserTokenToUserId(user_token, user_id) // 3] Redirect the user to the account linking page } //Identity Unlinked else if (data.plugin.data.action === 'unlink_identity'){ //The identity <identity_token> has been unlinked from the user <user_token> userToken = data.user.user_token; identityToken = data.user.identity.identity_token; //Next Step: // 1] At your convenience // 2] Redirect the user to the account linking page } } }
On the client side (this is the initial authentication), we have the following provided by OneAll:
<!-- The plugin will be embedded into this div //-->
<div id="oa_social_login_container"></div>
<script type="text/javascript">
<!-- The user_token of the currently logged in user //-->
var user_token = '';
var _oneall = _oneall || [];
_oneall.push(['social_link', 'set_providers', ['facebook', 'google', 'linkedin', 'twitter']]);
_oneall.push(['social_link', 'set_callback_uri', window.location.href]); //this would normally be a callback url
_oneall.push(['social_link', 'set_user_token', user_token]);
_oneall.push(['social_link', 'do_render_ui', 'oa_social_login_container']);
</script>
One the user authenticates the user is supposed to be redirected to a callback url with the api token in the url, now effectively we dont have a call back url as the serverside code is in an object script. How can I pass the authenticated token through to the Object script to process the requested JSON?
http://docs.oneall.com/api/
Even if you used the HTTP Get trigger how are you supposed to pass the returned token back into the trigger for OAUth 2 authentication?
Hi Byron,
You want to pass the token generated client-side to an object script trigger. Is this your question?
The simplest way is to save the data on a record so the object script can access the value. This can either be:
1. Passing the value to a field and auto-submitting the form.
2. Use Client-side AJAX API such as rbf_createRecord() or rbf_updateRecord() to save the data.
Regards,
Godfrey