├── LICENSE ├── README.md ├── apexplugin.json ├── grants └── grant_as_sys.sql ├── httpd └── httpd.conf customization ├── plugin_apex42 └── authentication_type_plugin_nl_s4s_oauth2.sql ├── plugin_apex50 └── authentication_type_plugin_nl_s4s_oauth2.sql ├── preview.png └── source ├── apex_oauth.sql └── s4sa_settings_data.sql /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 smart4solutions 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | - [What is apex_oauth?](#about) 2 | - [Documentation](#documentation) 3 | - [Download](#download) 4 | - [Installation](#installation) 5 | - [Into an existing application](#install-into-an-existing-application) 6 | - [Into a new application](#install-into-a-new-application) 7 | - [HTTPD configuration](#httpd) 8 | - [The settings table](#the-s4sa_settings-table) 9 | - [License](#license) 10 | 11 | 12 | #about 13 | PL/SQL packages enabling Google, Linkedin and Facebook login for apex. Apex-oauth does not rely on any tables. There is one table (S4SA_SETTINGS) that contains some settings you must review and change to reflect your specific situation. 14 | 15 | In my presentation at kscope 2015 I promised to release the oauth packages that will enable you to use Google, Facebook and Linked-in authentication in your own applications. I finally got around publishing them. 16 | 17 | Please leave your remarks at github, or consider to contribute to the development. You can also reach me at `r.martens at smart4solutions.nl` 18 | 19 | #documentation 20 | To enable your apex-application to use apex_oauth you need to register yourself at the appropriate sites: 21 | 22 | - Google: [Google developer console](https://console.developers.google.com/start) 23 | - Facebook: [Facebook developer console](https://developers.facebook.com/apps) 24 | - Linked-in: [Linkedin developer console](https://www.linkedin.com/developer/apps) 25 | 26 | There you will be able to create an application. The Provider (Google, Facebook etc.) will then provide you some codes which you must put in the s4a_settings table. 27 | 28 | # download 29 | It is recommended that you download a certified release (from the [releases](https://github.com/smart4solutions/apex_oauth/releases) folder). The files in the current repository are for the next release and should be considered unstable. 30 | 31 | # installation 32 | The product consists of a number of database-objects: 33 | - packages 34 | - tables 35 | - sequences 36 | - etc... 37 | 38 | Please follow directions below to complete your installation. 39 | 40 | ## install into an existing application 41 | 1. as sys: login into your database and execute the "`grant_as_sysdba.sql`" script. It will grant execute on the sys_http package to your parsing schema 42 | 2. in apex, login into your workspace 43 | 3. within the SQL Workshop: 44 | - upload and execute the "`apex_oauth.sql`" script which will create all database objects 45 | - upload and execute the "`s4a_settings_data.sql`" script which will create the settings in the s4sa_settings table 46 | - execute the follwing command: grant execute on `S4SG_AUTH_PCK` to `APEX_PUBLIC_USER` 47 | 4. import the plugin into your application 48 | 5. adjust the settings in the s4sa_settings table, they should reflect the settings in your developer console 49 | - `S4SA_GGL_API_KEY` 50 | - `S4SA_GGL_CLIENT_ID` 51 | - `S4SA_GGL_CLIENT_SECRET` 52 | - `S4SA_GGL_REDIRECT_URL` 53 | 6. Go to page 101 (the login-page) of your application 54 | - remove the username and password items 55 | - rename the login-button so it reflects the value of the `S4SA_GGL_LOGIN_REQUEST` record in your `S4SA_SETTINGS` table (default `GGL_LOGIN`) 56 | 57 | ## install into a new application 58 | 1. Create your application 59 | 2. follow the steps in "install into an existing application" 60 | 3. continue developing your application 61 | 62 | # httpd configuration 63 | It is highly advisable to use a everse proxy as described in my [blog](http://richardmartens.blogspot.nl/2015/07/making-https-webservice-requests-from.html "blogspot"). 64 | I have included the settings as I use them in my web-server setup. This prevents you from having to create an Oracle wallet. It also alows you to use Linked-in as the oauth provider. Since Linked-in uses a specific algorithm that is not supported below Oracle 11.2.0.3. 65 | 66 | # the S4SA_SETTINGS table 67 | This table is the only table in use. It contains the settings for the API calls being made: 68 | 69 | Code | Description 70 | ---- | ----------- 71 | `S4SA_GRACE_PERIOD` | This is the amount of seconds that a oauth session still has before redirecting to the login-page again 72 | `S4SA_WALLET_PATH` | The directory the oracle wallet is in when using https requests to the oauth provider 73 | `S4SA_WALLET_PWD` | the wallets password 74 | `S4SA_COLLECTION_NAME` | The name of the collection in which the users' details are stored 75 | `S4SA_GGL_LOGIN_REQUEST` | the name of the request for a google login 76 | `S4SA_FCB_LOGIN_REQUEST` | the name of the request for a facebook login 77 | `S4SA_LDI_LOGIN_REQUEST` | the name of the request for a linked-in login 78 | `S4SA_API_PREFIX` | All requests are prefixed with this. use http:// to bypass the reverse proxy 79 | `S4SA_GGL_API_KEY` | Google API key as found in the developer console 80 | `S4SA_GGL_CLIENT_ID` | Google client ID as found in the developer console 81 | `S4SA_GGL_CLIENT_SECRET` | Google Client secret as found in the developer console 82 | `S4SA_GGL_REDIRECT_URL` | The URL Google will redirect to 83 | `S4SA_GGL_EXTRAS` | Extra options for the google API 84 | `S4SA_GGL_SCOPE` | Google login-scope 85 | `S4SA_GGL_FORCE_APPROVAL` | Force approval? Y/N 86 | `S4SA_LDI_API_KEY` | Linked-in API key as found in the developer console 87 | `S4SA_LDI_CLIENT_ID` | Linked-in Client ID as found in the developer console 88 | `S4SA_LDI_CLIENT_SECRET` | Linked-in Client Secret as found in the developer console 89 | `S4SA_LDI_REDIRECT_URL` | Linked-in redirect URL 90 | `S4SA_LDI_EXTRAS` | Extra options for the Linked-in API 91 | `S4SA_LDI_SCOPE` | Linked-in scopes 92 | `S4SA_LDI_FORCE_APPROVAL` | Linked-in Force approval y/n 93 | `S4SA_FCB_CLIENT_ID` | Facebook Client ID as found in the developer console 94 | `S4SA_FCB_CLIENT_SECRET` | Facebook Client Secret as found in the developer console 95 | `S4SA_FCB_REDIRECT_URL` | Facebook redirection URI 96 | `S4SA_FCB_API_VERSION` | Facebook API version used 97 | `S4SA_FCB_EXTRAS` | Extra options for the Facebook API 98 | `S4SA_FCB_SCOPE` | Facebook scopes 99 | `S4SA_FCB_FORCE_APPROVAL` | Facebook force approval y/n 100 | 101 | # license 102 | This project is uses the [MIT license](LICENSE). 103 | -------------------------------------------------------------------------------- /apexplugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "smart4solutions apex_oauth", 3 | "version" : "0.1.0", 4 | "description" : "PL/SQL packages enabling Google, Linkedin and Facebook login for apex", 5 | "keywords" : ["oauth2", "google login", "facebook login", "linked-in login"], 6 | "homepage" : "https://github.com/smart4solutions/apex_oauth", 7 | "bugs" : { 8 | "url" : "https://github.com/smart4solutions/apex_oauth/issues", 9 | "email" : "r.martens@smart4solutions.nl" 10 | }, 11 | "license" : "MIT", 12 | "author" : { 13 | "name" : "Richard Martens", 14 | "email" : "r.martens@smart4solutions.nl", 15 | "url" : "http://richardmartens.blogspot.nl" 16 | }, 17 | "repository" : { 18 | "type" : "git", 19 | "url" : "https://github.com/smart4solutions/apex_oauth.git" 20 | }, 21 | "oracle" : { 22 | "versions" : ["11.2.0.1", "12.1.0.1"], 23 | "apex" : { 24 | "versions" : ["4.2.0", "5.0.0"], 25 | "plugin" : { 26 | "internalName" : "NL.S4S.OAUTH2", 27 | "type" : "authentication", 28 | "demo" : "http://dapex50.smart4apex.nl/ords/f?p=100", 29 | "previewImage" : "https://raw.githubusercontent.com/smart4solutions/apex_oauth/master/preview.png" 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /grants/grant_as_sys.sql: -------------------------------------------------------------------------------- 1 | grant execute on sys.utl_http to &schema; 2 | -------------------------------------------------------------------------------- /httpd/httpd.conf customization: -------------------------------------------------------------------------------- 1 | # If you want to use your own server as a reverse proxy, you can use these directives to proxy the API endpoints 2 | # This is not a full list of used endpoints. 3 | 4 | RewriteEngine On 5 | ProxyVia On 6 | 7 | ## proxy tbv linkedin 8 | ProxyRequests Off 9 | SSLProxyEngine On 10 | 11 | Order deny,allow 12 | Allow from all 13 | 14 | 15 | ############ 16 | # LINKEDIN # 17 | ############ 18 | ProxyPass /www.linkedin.com/ https://www.linkedin.com/ 19 | ProxyPassReverse /www.linkedin.com/ https://www.linkedin.com/ 20 | ProxyPass /api.linkedin.com/ https://api.linkedin.com/ 21 | ProxyPassReverse /api.linkedin.com/ https://api.linkedin.com/ 22 | ############ 23 | # GOOGLE # 24 | ############ 25 | ProxyPass /www.googleapis.com/ https://www.googleapis.com/ 26 | ProxyPassReverse /www.googleapis.com/ https://www.googleapis.com/ 27 | ProxyPass /apps-apis.google.com/ https://apps-apis.google.com/ 28 | ProxyPassReverse /apps-apis.google.com/ https://apps-apis.google.com/ 29 | ProxyPass /accounts.google.com/ https://accounts.google.com/ 30 | ProxyPassReverse /accounts.google.com/ https://accounts.google.com/ 31 | ProxyPass /www.google.com/ https://www.google.com/ 32 | ProxyPassReverse /www.google.com/ https://www.google.com/ 33 | ############ 34 | # FACEBOOK # 35 | ############ 36 | ProxyPass /graph.facebook.com/ https://graph.facebook.com/ 37 | ProxyPassReverse /graph.facebook.com/ https://graph.facebook.com/ -------------------------------------------------------------------------------- /plugin_apex42/authentication_type_plugin_nl_s4s_oauth2.sql: -------------------------------------------------------------------------------- 1 | set define off 2 | set verify off 3 | set feedback off 4 | WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK 5 | begin wwv_flow.g_import_in_progress := true; end; 6 | / 7 | 8 | -- AAAA PPPPP EEEEEE XX XX 9 | -- AA AA PP PP EE XX XX 10 | -- AA AA PP PP EE XX XX 11 | -- AAAAAAAAAA PPPPP EEEE XXXX 12 | -- AA AA PP EE XX XX 13 | -- AA AA PP EE XX XX 14 | -- AA AA PP EEEEEE XX XX 15 | prompt Set Credentials... 16 | 17 | begin 18 | 19 | -- Assumes you are running the script connected to SQL*Plus as the Oracle user APEX_040200 or as the owner (parsing schema) of the application. 20 | wwv_flow_api.set_security_group_id(p_security_group_id=>nvl(wwv_flow_application_install.get_workspace_id,63111607323168155)); 21 | 22 | end; 23 | / 24 | 25 | begin wwv_flow.g_import_in_progress := true; end; 26 | / 27 | begin 28 | 29 | select value into wwv_flow_api.g_nls_numeric_chars from nls_session_parameters where parameter='NLS_NUMERIC_CHARACTERS'; 30 | 31 | end; 32 | 33 | / 34 | begin execute immediate 'alter session set nls_numeric_characters=''.,'''; 35 | 36 | end; 37 | 38 | / 39 | begin wwv_flow.g_browser_language := 'en'; end; 40 | / 41 | prompt Check Compatibility... 42 | 43 | begin 44 | 45 | -- This date identifies the minimum version required to import this file. 46 | wwv_flow_api.set_version(p_version_yyyy_mm_dd=>'2012.01.01'); 47 | 48 | end; 49 | / 50 | 51 | prompt Set Application ID... 52 | 53 | begin 54 | 55 | -- SET APPLICATION ID 56 | wwv_flow.g_flow_id := nvl(wwv_flow_application_install.get_application_id,103); 57 | wwv_flow_api.g_id_offset := nvl(wwv_flow_application_install.get_offset,0); 58 | null; 59 | 60 | end; 61 | / 62 | 63 | prompt ...ui types 64 | -- 65 | 66 | begin 67 | 68 | null; 69 | 70 | end; 71 | / 72 | 73 | prompt ...plugins 74 | -- 75 | --application/shared_components/plugins/authentication_type/nl_s4s_oauth2 76 | 77 | begin 78 | 79 | wwv_flow_api.create_plugin ( 80 | p_id => 89822031284757322 + wwv_flow_api.g_id_offset 81 | ,p_flow_id => wwv_flow.g_flow_id 82 | ,p_plugin_type => 'AUTHENTICATION TYPE' 83 | ,p_name => 'NL.S4S.OAUTH2' 84 | ,p_display_name => 'S4S oAuth 2' 85 | ,p_supported_ui_types => 'DESKTOP:JQM_SMARTPHONE' 86 | ,p_session_sentry_function => '#OWNER#.s4sa_oauth_pck.auth_sentry' 87 | ,p_authentication_function => '#OWNER#.s4sa_oauth_pck.authenticate' 88 | ,p_substitute_attributes => true 89 | ,p_subscribe_plugin_settings => true 90 | ,p_version_identifier => '0.1' 91 | ,p_about_url => 'https://github.com/smart4solutions/apex_oauth' 92 | ); 93 | null; 94 | 95 | end; 96 | / 97 | 98 | commit; 99 | begin 100 | execute immediate 'begin sys.dbms_session.set_nls( param => ''NLS_NUMERIC_CHARACTERS'', value => '''''''' || replace(wwv_flow_api.g_nls_numeric_chars,'''''''','''''''''''') || ''''''''); end;'; 101 | end; 102 | / 103 | set verify on 104 | set feedback on 105 | set define on 106 | prompt ...done 107 | -------------------------------------------------------------------------------- /plugin_apex50/authentication_type_plugin_nl_s4s_oauth2.sql: -------------------------------------------------------------------------------- 1 | set define off verify off feedback off 2 | whenever sqlerror exit sql.sqlcode rollback 3 | -------------------------------------------------------------------------------- 4 | -- 5 | -- ORACLE Application Express (APEX) export file 6 | -- 7 | -- You should run the script connected to SQL*Plus as the Oracle user 8 | -- APEX_050000 or as the owner (parsing schema) of the application. 9 | -- 10 | -- NOTE: Calls to apex_application_install override the defaults below. 11 | -- 12 | -------------------------------------------------------------------------------- 13 | begin 14 | wwv_flow_api.import_begin ( 15 | p_version_yyyy_mm_dd=>'2013.01.01' 16 | ,p_release=>'5.0.0.00.31' 17 | ,p_default_workspace_id=>1679746812697720 18 | ,p_default_application_id=>102 19 | ,p_default_owner=>'SEPAPEX' 20 | ); 21 | end; 22 | / 23 | prompt --application/ui_types 24 | begin 25 | null; 26 | end; 27 | / 28 | prompt --application/shared_components/plugins/authentication_type/nl_s4s_oauth2 29 | begin 30 | wwv_flow_api.create_plugin( 31 | p_id=>wwv_flow_api.id(70500439850911113) 32 | ,p_plugin_type=>'AUTHENTICATION TYPE' 33 | ,p_name=>'NL.S4S.OAUTH2' 34 | ,p_display_name=>'S4S oAuth 2' 35 | ,p_category=>'MISC' 36 | ,p_supported_ui_types=>'DESKTOP' 37 | ,p_session_sentry_function=>'#OWNER#.s4sa_oauth_pck.auth_sentry' 38 | ,p_authentication_function=>'#OWNER#.s4sa_oauth_pck.authenticate' 39 | ,p_substitute_attributes=>true 40 | ,p_subscribe_plugin_settings=>true 41 | ,p_version_identifier=>'1.0' 42 | ); 43 | end; 44 | / 45 | begin 46 | wwv_flow_api.import_end(p_auto_install_sup_obj => nvl(wwv_flow_application_install.get_auto_install_sup_obj, false), p_is_component_import => true); 47 | commit; 48 | end; 49 | / 50 | set verify on feedback on define on 51 | prompt ...done 52 | -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smart4solutions/apex_oauth/5f8870dfc046b37468fe105179eaece2c56124ba/preview.png -------------------------------------------------------------------------------- /source/s4sa_settings_data.sql: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------- 2 | -- File created - november-06-2015 3 | -------------------------------------------------------- 4 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GRACE_PERIOD','300','This is the amount of seconds that a oauth session still has before redirecting to the login-page again'); 5 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_WALLET_PATH','file:/u01/app/oracle/product/11.2.0/xe/wallet_new/','The directory the oracle wallet is in when using https requests to the oauth provider'); 6 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_WALLET_PWD','secretpassword','the wallets password'); 7 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_COLLECTION_NAME','S4S_OAUTH2','The name of the collection in which the users'' details are stored'); 8 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_LOGIN_REQUEST','GGL_LOGIN','the name of the request for a google login'); 9 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_LOGIN_REQUEST','FCB_LOGIN','the name of the request for a facebook login'); 10 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_LOGIN_REQUEST','LDI_LOGIN','the name of the request for a linked-in login'); 11 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_API_PREFIX','http://revprox.local/','All requests are prefixed with this. use http:// to bypass the reverse proxy'); 12 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_API_KEY','AIzaSyBF926Tk5Q__ZC5H1fSUQSg7VOfJaiJo','Google API key as found in the developer console'); 13 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_CLIENT_ID','693589096014-9503r437up4otncmu96dc61jlp4nib.apps.googleusercontent.com','Google client ID as found in the developer console'); 14 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_CLIENT_SECRET','rwk7OkOQg-Fl_9NvFL9IZK','Google Client secret as found in the developer console'); 15 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_REDIRECT_URL','http://www.yourdomain.com/ords/sepapex.s4sg_auth_pck.oauth2callback','The URL Google will redirect to'); 16 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_EXTRAS',null,'Extra options for the google API'); 17 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_SCOPE','profile email https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/drive https://mail.google.com/ https://www.google.com/m8/feeds','Google login-scope'); 18 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_GGL_FORCE_APPROVAL','Y','Force approval? Y/N'); 19 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_API_KEY',null,'Linked-in API key as found in the developer console'); 20 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_CLIENT_ID','77uw6x8b02vz','Linked-in Client ID as found in the developer console'); 21 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_CLIENT_SECRET','0TjdvCqUDBLKJ2','Linked-in Client Secret as found in the developer console'); 22 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_REDIRECT_URL','http://www.yourdomain.com/ords/sepapex.s4sl_auth_pck.oauth2callback','Linked-in redirect URL'); 23 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_EXTRAS',null,'Extra options for the Linked-in API'); 24 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_SCOPE','r_basicprofile r_emailaddress','Linked-in scopes'); 25 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_LDI_FORCE_APPROVAL','Y','Linked-in Force approval y/n'); 26 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_CLIENT_ID','4392044057331','Facebook Client ID as found in the developer console'); 27 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_CLIENT_SECRET','9f077058dc231a70f9df44db981e38','Facebook Client Secret as found in the developer console'); 28 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_REDIRECT_URL','http://www.yourdomain.com/ords/sepapex.s4sf_auth_pck.oauth2callback','Facebook redirection URI'); 29 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_API_VERSION','v2.3','Facebook API version used'); 30 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_EXTRAS',null,'Extra options for the Facebook API'); 31 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_SCOPE','public_profile user_friends email user_about_me user_photos','Facebook scopes'); 32 | Insert into SEPAPEX.S4SA_SETTINGS (CODE,MEANING,DESCRIPTION) values ('S4SA_FCB_FORCE_APPROVAL','Y','Facebook force approval y/n'); 33 | --------------------------------------------------------------------------------