I'm developing a small hand made web portal for a community and I want it to have a loggin system with IP.Board (easier for the end user).
I have the forum and the app on the same hosting.
For the loggin, the user clicks on a button and is redirected to this page:
<?php
require_once '../www/forum/init.php';
include_once 'includes/functions.php';
error_reporting(E_ALL);
session_start();
\IPS\Session\Front::i();
print_r( \IPS\Member::loggedIn());
if(\IPS\Member::loggedIn()->member_id) {
$name = \IPS\Member::loggedIn()->name;
if(checkUserExistance($name)==0){
//header("Location: ../index.php");
print("LOGED EXIT!!!!!!!!!!!!!!!!!!!!");
}else{
print("LOGED INNNN!!!!!!!!!!!!!!!!!!!!");
$_SESSION['authenticated'] = 'yes';
$_SESSION['user'] = $name;
$userphoto = \IPS\Member::loggedIn()->photo;
$result = getUserData($_SESSION['user']);
$_SESSION['isLeader'] = $result['isLeader'];
$_SESSION['isAdmin'] = $result['isAdmin'];
}
} else{
print("LOGED OUT!!!!!!!!!!!!!!!!!!!!");
$_SESSION['authenticated'] = 'no';
if(session_destroy()){ // Destroying All Sessions
//header("Location: index.php");
}
}
//echo "Auth by LOGIN";
?>
If is not logged in IP.Board session (forum), it goes back to index.php
For now im developing a basic version of it, more improvements will be done once I get this working.
As you can see I have a print for debuging some data.
On Edge everything works, but on Firefox or chrome I get a string of 32 characters, each time a diferent one, instead of getting the username.
Example of what i get in Firefox and Chrome.
ef5cd2de05387b9b01048efad2173efd
Does any one know why is this?
INFO: I followed: IP.Board SSO Documentation
INFO2: Forum post
I'm using IPS Community Suite as the "Master".
EDIT 1: Debug of \IPS\Member::loggedIn()
IPS\Member Object ( [nodeClass:protected] => IPS\awards\Cats
[_followData] => [_previousPhotoType:protected] => [_group] =>
[restrictions:protected] => [modPermissions:protected] =>
[calculatedLanguageId:protected] => [markers] => Array ( )
[markersResetTimes:protected] => Array ( ) [haveAllMarkers:protected]
=> [defaultStreamId:protected] => [changedCustomFields] => Array ( ) [previousName:protected] => [_socialGroups:protected] =>
[sessionData:protected] => [_lang:protected] => [_url:protected] =>
[profileFields] => [_reputationData:protected] =>
[_following:protected] => Array ( ) [reportCount:protected] =>
[ignorePreferences:protected] => [_ppdLimit:protected] =>
[_data:protected] => Array ( [member_group_id] => 2 [mgroup_others] =>
[joined] => 1483440989 [ip_address] => 83.36.150.111 [timezone] => UTC
[allow_admin_mails] => 1 [pp_photo_type] => [member_posts] => 0
[pp_main_photo] => [pp_thumb_photo] => [failed_logins] =>
[pp_reputation_points] => 0 [signature] => [auto_track] =>
{"content":0,"comments":0,"method":"immediate"} ) [_new:protected] =>
1 [changed] => Array ( [member_group_id] => 2 [mgroup_others] =>
[joined] => 1483440989 [ip_address] => 83.36.150.111 [timezone] => UTC
[allow_admin_mails] => 1 [pp_photo_type] => [member_posts] => 0 )
[skipCloneDuplication] => )
Well I recognise that this is over two years ago now, but I haverecently ran into the same problem using a localhost installation. In my case, when I tried in a blank new file it did the same problem but eventually fixed itself.
When I tried to actually integrate it with my site, it did this every single time. It turned out in my case that it was something to do with stripping bad UTF-8 characters.
I have absolutely no idea why this made any difference, but as soon as I took the code out that was stripping these characters out of GET, POST and most importantly, COOKIE, it started working perfectly.
For anyone doing this now, there's really nothing you can do other than trial and error in commenting out lines of code until you find it. IPS really aren't helpful at all with this kind of thing and leave you feeling like you're on your own with it (which you virtually are).
Make sure the url (domain part) to your system is the same as IPS, ie www.example.com not only example.com
example.com will give that hash, while www.example.com will not.
Spent some time before seeing this....
Edit: and that was not it at all. If I log out of the forum and in, maybe several times, it works in all browsers. I do not see a pattern, except trying several times (at least once). Sorry for poor answer!
Eirik
I decided to use the other option for SSO in IP.Board Te other option, sends the login request to the forum, and does not need to check the sessions. Forum API does it.
Related
I have implemented the Google API in PHP as a service and using the Google_Service_ServicePeople() to add a contact. That works and I am getting back a proper result as a paople object. In addition when I call the people_connections->listPeopleConnections method I am getting back the contacts that I have created in my tests. However, when I go to contacts.google.com no contact will be shown.
Maybe it is a missunderstanding from my site, but I thought that based on the appsettings on my account, the new contacts will be created (added) to my account, won't they?
$client = new Google_Client();
$client->setApplicationName ('VABS-CONTACT-TEST');
$client->setAuthConfig($_SERVER['DOCUMENT_ROOT'].'/includes/classes/Google/auth.json');
$client->addScope (Google_Service_Peopleservice::CONTACTS);
$peopleService = new Google_Service_PeopleService($client);
$person = new Google_Service_PeopleService_Person();
$name = new Google_Service_People_Name();
$name->setDisplayName ('FirstName LastName');
$name->setFamilyName ('LastName');
$name->setGivenName('FirstName');
$email = new Google_Service_People_EmailAddress();
$email->value = 'xxx#xxx.xx';
$person->setNames ($name);
$person->setEmailAddresses ($email);
$result = $peopleService->people->createContact ($person);
The response looks like:
Google_Service_PeopleService_Person Object
(
[collection_key:protected] => userDefined
[addressesType:protected] => Google_Service_PeopleService_Address
[addressesDataType:protected] => array
[ageRange] =>
[ageRangesType:protected] => Google_Service_PeopleService_AgeRangeType
[ageRangesDataType:protected] => array
[biographiesType:protected] => Google_Service_PeopleService_Biography
[biographiesDataType:protected] => array
[birthdaysType:protected] => Google_Service_PeopleService_Birthday
[birthdaysDataType:protected] => array
[braggingRightsType:protected] => Google_Service_PeopleService_BraggingRights
[braggingRightsDataType:protected] => array
[coverPhotosType:protected] => Google_Service_PeopleService_CoverPhoto
[coverPhotosDataType:protected] => array
[emailAddressesType:protected] => Google_Service_PeopleService_EmailAddress
[emailAddressesDataType:protected] => array
[etag] => %Eh8BAgMEBQYHCAkKCwwNDg8QERITFBUWFzUZNDciJScuGgwBAgMEBQYHCAkKCwwiDFFrVXd2SnRpTFZZPQ==
[eventsType:protected] => Google_Service_PeopleService_Event
[eventsDataType:protected] => array
[gendersType:protected] => Google_Service_PeopleService_Gender
.
.
.
.
(
)
[modelData:protected] => Array
(
[metadata] => Array
(
[sources] => Array
(
[0] => Array
(
[type] => CONTACT
[id] => 494c65970e1a12eb
[etag] => #QkUwvJtiLVY=
[updateTime] => 2018-04-04T13:58:27.710001Z
)
...
Using the
$peopleService->people_connections->listPeopleConnections('people/me',$options)
lists all the created contacts as expected.
But on my contacts.google.com page no contact will be shown. I am logged in as the same user I have created and granted access to the API.
Any ideas, hwy the contacts won't be shonw on contacts.google.com?
Many thanks!
After several tries it wasn't possible for me to get it solved. Therefore I have tried it now via the RapidWeb Solution. Now it is working and "the setup" with a guide - even though it tooks also 3 steps of getting the right account in place - is simple.
The main problem I had is to understand the logfic of OAuth2 and their possibilities to setup the correct OAuth2 Client.
In my case I needed to setup a Native Client (just choose "Other" as ApplicationType on the second screen in the Google API Console after creating a new OAuth2 ClientId)
Anyway. Many thanks for all who tried to help me! Much appreciated!
Cheers!
OK I am stumped.
I have tried numerous different approaches and I've spent the best part of a good few hours searching to no avail to my exact situation, that or I am tired and blind.
Here is the raw json pulled from a URI using file_get_contents():
{"id":"XXX","name":"Customer1","os":"CentOS Linux 7.3.1611 Core","cpu_type":"Intel(R) Xeon(R) CPU E3-1245 V2 # 3.40GHz","networking_v4":[{"addr":"xxx.xxx.xxx.xxx","if":"eth0"}],"networking_v6":[{"addr":"xxxx","if":"eth0"},{"addr":"xxxx","if":"eth0"}],"agent_version":0.96,"status":"up","last_update":1505949230,"first_update":1500588943,"notifications_count":8,"ip_whois":{"ip":"xxx.xxx.xxx.xxx","hostname":"xxx","city":"Garwood","region":"New Jersey","country":"US","loc":"xxx","org":"AS20473 Choopa, LLC","postal":"xxx"},"additional_fields":[{"value":"xxx","key":"Datacenter"},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""}]}
As you can see its a pretty simple request and I have every bit of data except those nested within networking_v4 and networking_v6.
I tried to access those like so:
'ipv4' => $json->networking_v4->addr,
'ipv4dev' => $json->networking_v4->if,
'ipv6' => $json->networking_v6->addr,
'ipv6dev' => $json->networking_v6->if,
Here is the full snapshot of code in its entirety:
$content = file_get_contents($url);
$json = json_decode($content);
$server_lastupd = $json->last_update;
$server_firstupd = $json->first_update;
$server = array(
'id' => $json->id,
'name' => $json->name,
'os' => $json->os,
'cputype' => $json->cpu_type,
'ipv4' => $json->networking_v4->addr,
'ipv4dev' => $json->networking_v4->if,
'ipv6' => $json->networking_v6->addr,
'ipv6dev' => $json->networking_v6->if,
'status' => $json->status,
'lastupd' => $json->$server_lastupd,
'firstupd' => $json->$server_firstupd,
'notifications' => $json->notifications_count,
'ip' => $json->ip_whois->ip,
'hostname' => $json->ip_whois->hostname,
'city' => $json->ip_whois->city,
'region' => $json->ip_whois->region,
'country' => $json->ip_whois->country,
'loc' => $json->ip_whois->loc,
'org' => $json->ip_whois->org,
'postal' => $json->ip_whois->postal,
'dctag' => $json->additonal_fields->dctag,
'source' => "XXX"
);
return $server;
So my issue is I appear to be unable to access the child content within networking_v4 and networking_v6.
Any help on this would be massively appreciated, its stumped me for the best part of 6 hours last night and a few more today, so I give in, someone please show me the light!
Many thanks :)
It looks like those are nested in arrays from the [{"key':"value"},{"key":"value"}] square brackets. have you tried
ipv4 => $json->networking_v4[0]->addr,
Try $json->networking_v4[0]->addr.
Both the networking_v4 and the networking_v6 keys point to arrays, so you need to pick which index you want to look at. The former only has one element, so it's easy to pick index 0, but the latter has multiple elements, so you'll need to figure out which one you want.
I was having a remote session with someone 2 days back for a web application demonstration, and suddenly, I don't know what he did, but my screen froze for 10 minutes and then when it got back to work, all my main original source files were encrypted.
I don't have any back up and it took so much to code all that files but now all my work has gone to waste. When I opened those files, it says "Encrypted by PHPMasterCrypt and when I visited that website, it says its one-way encryption and cannot be reverted back.
<?$__C44s='This program is encrypted by PHP MasterCrypt - phpMC v2.6.0. This encryption system has been developed by Subhash Bose. Visit http://programming.subhashbose.com/phpmc for using phpMC';$__v=1879;if(!function_exists('c___65gf')){function c___65gf($__44re,$__4bd7,$__hdh7){return substr($__44re.$__44re,$__4bd7%strlen($__44re),$__hdh7);}}$m__hes7j='==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';$s___g6='__';$__v++;$m__c7df2=create_function(base64_decode('JG5fX2hmNzQsJGxfMzQzag=='),base64_decode('cmV0dXJuIGNyZWF0ZV9mdW5jdGlvbigkbl9faGY3NCwkbF8zNDNqKTs='));$m__065a3=$m__c7df2(base64_decode('JGhfXzY0M2g='),base64_decode('cmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RycmV2KCRoX182NDNoKSk7'));$__C44s=base64_encode($__C44s);$m__a3e35=${'m'.$s___g6.substr(md5(c___65gf($__C44s,$__v,23)),8,5)}($m__065a3('=kjMmJ2XfRGJ'),$m__065a3('=sTKpkjMmJ2XfRGJoYXZyJHdzhSZ0FGbm5Wa6dGIuJXd0Vmc'));eval(strrev(${'m'.$s___g6.substr(md5(c___65gf($__C44s,($__v*3)*$__v,23)),8,5)}(${'m'.$s___g6.substr(md5(c___65gf($__C44s,$__v*$__v,23)),8,5)}(str_replace(md5($__C44s.'MC'),'',$m__hes7j)))));?>
I believe I have retrieved your code through sheer stubbornness.
<?php
require('mysql_func.php');
//ONLINE [REDACTED]
define('GAPS_SERVER', 'localhost'); // eg, localhost
define('GAPS_SERVER_USERNAME', 'root');
define('GAPS_SERVER_PASSWORD', '[REDACTED]');
define('GAPS_DATABASE', 'edaddy_irinfotech');
define('SITE_URL','http://localhost/edaddy');
define('SITE_ADMIN_URL','http://localhost/edaddy');
define('SITE_NAME','E-Daddy');
define('SITE_PAGE_REGISTRECTED','<div style="text-align:center;color:#FF0000" class="alert"><strong style="color:#FF0000">You do not have access to this page.</strong></div>');
//****** Table's Name of database ***********///
$SQLDB = array(
'CRM_MENU' => 'crm_menu',
'CRM_USERS' => 'crm_users',
'CRM_MODULE' => 'crm_module',
'CRM_CUSTOMER' => 'crm_customer',
'CRM_DETAILS' => 'crm_detail',
'CRM_CASE' => 'crm_case',
'CRM_SUBCRIPTION_TYPE' => 'crm_subcription_type',
'CRM_OPERATING_SYSTEM' => 'crm_operating_system',
'CRM_SYSTEM_CONFIG' => 'crm_system_config',
'CRM_RAM' => 'crm_ram',
'CRM_HDD' => 'crm_hdd',
'CRM_VERIFICATION_QUESTION' => 'crm_verification_question',
'CRM_REGISTERED_COMPUTER' => 'crm_registered_computers',
'CRM_CURRENCY' => 'crm_currency',
'CRM_COUNTRIES' => 'crm_countries',
'CRM_ZONES' => 'crm_zones',
'CRM_CASE_STATUS' => 'crm_case_status',
'CRM_TEAM_MASTER' => 'crm_team_master',
'CRM_COMPONENTS' => 'crm_components',
'CRM_CUSTOMER_CASE_TEMP' => 'crm_customer_case_temp',
'CRM_CUSTOMER_CASE' => 'crm_customer_case',
'CRM_TIMEZONE' => 'crm_timezone',
'CRM_CUSTOMER_NOTES' => 'crm_customer_notes',
'CRM_CASE_EDITED_DATE' => 'crm_case_edited_date',
'CRM_BREAK_MASTER' => 'crm_break_master',
'CRM_USER_TIME_SLOT' => 'crm_user_time_slot',
'CRM_SETTINGS' => 'crm_settings',
'CRM_CALL_TYPE' => 'crm_call_type',
'CRM_CALL_MASTER' => 'crm_call_master',
'CRM_CUSTOMER_CALLING_DATE' => 'crm_customer_calling_date',
'CRM_CUSTOMER_REACTION' => 'crm_customer_reaction',
'CRM_USER_RIGHT_MASTER' => 'crm_user_right_master',
'CRM_USER_RIGHT_CUSTOMER' => 'crm_user_right_customer',
'CRM_INTERNAL_EMAIL' => 'crm_internal_email',
'CRM_INTERNAL_EMAIL_USERS' => 'crm_internal_email_users',
'CRM_NOTICE_BOARD' => 'crm_notice_board',
'CRM_NOTICE_BOARD_USER' => 'crm_notice_board_user',
'CRM_INTERNAL_EMAIL_REPLY' => 'crm_internal_email_reply',
'CRM_REFUND_REQUEST' => 'crm_refund_request',
'CRM_CALL_DISPOSITION' => 'crm_call_disposition',
'CRM_KNOWLEDGE_MANAGEMENT' => 'crm_knowledge_management',
'CRM_RESOURCE_MANAGEMENT' => 'crm_resource_management',
'CRM_NEWSLETTER_SEND' => 'crm_newsletter_send',
'CRM_USER_EMPLOYMENT' => 'crm_user_employment',
'CRM_USER_ATTENDANCE' => 'crm_user_attendance',
'CRM_CAMPAIGN' => 'crm_campaign',
'CRM_CAMPAIGN_EXPECTED_RESPONSE' => 'crm_campaign_expected_response',
'CRM_CAMPAIGN_STATUS' => 'crm_campaign_status',
'CRM_CAMPAIGN_TYPE' => 'crm_campaign_type',
'CRM_LEAD' => 'crm_lead',
'CRM_LEAD_INDUSTRY' => 'crm_lead_industry',
'CRM_LEAD_RATING' => 'crm_lead_rating',
'CRM_LEAD_SOURCE' => 'crm_lead_source',
'CRM_LEAD_STATUS' => 'crm_lead_status',
'CRM_QA_MASTER' => 'crm_qa_master',
'CRM_QA_MASTER_TYPE' => 'crm_qa_master_type',
'CRM_QA_MASTER_USERS' => 'crm_qa_master_users',
'CRM_CASE_FEEDBACK' => 'crm_case_feedback',
'CRM_INTERNET_OPTION' => 'crm_internet_option',
'CRM_QUALITY_REMARK' => 'crm_quality_remark',
'CRM_CHARGE_BACK' => 'crm_charge_back',
'CRM_AVG_KEY' => 'crm_avg_key',
'CRM_CLEAROMIZE' => 'crm_clearomize_key',
'CRM_ANTISPYWARE' => 'crm_antispyware',
'CRM_ANTIHIJACKING' => 'crm_antihijacking',
'CRM_BACKUP_TOOL' => 'crm_backup_tool',
'CRM_OPEN_CASE' => 'crm_open_case',
'CRM_CALL_SCHEDULE' => 'crm_call_schedule',
'CRM_REQUEST_CHARGEBACK_REFUND' => 'crm_request_chargeback_refund',
'CRM_USER_PENDING_ATTANDENCE' => 'crm_user_pending_attandence',
'CRM_ATTENDANCE_MASTER' => 'crm_attendance_master',
'CRM_UNRELATED_CALLS' => 'crm_unrelated_calls',
);
define('ERROR_MESSAGE','<div id="login_error"> %s</div>');
define('SUBMIT_MESSAGE','<div class="message_div"> %s</div>');
define('RECORD_DELETE','<div id="login_error"><strong>DELETE</strong>: %s</div>');
define('RECORD_UPDATE','<div class="message_div"><strong>UPDATE</strong>: %s</div>');
define('RECORD_INSERT','<div class="message_div"><strong>INSERT</strong>: %s</div>');
define('RECORD_STATUS_CHANGE','<div class="message_div"><strong>STATUS</strong>: %s</div>');
$gaps_obj_1 = new gaps_sql();
$gaps_obj_1->gaps_connect();
$gaps_obj_2 = new gaps_sql();
$gaps_obj_2->gaps_connect();
$gaps_obj_3 = new gaps_sql();
$gaps_obj_3->gaps_connect();
error_reporting(0);
The process can be applied to any other files you have, but considering the time and effort involved I wouldn't be able to do it for free =/
On further review, I have succeeded in automating the process. I have created a tool that reverses this supposedly irreversible process.
You can find the tool here: http://thedarkworld.net/phpmc260.php The server has since been taken down, but I've re-created it in a JSFiddle.
and suddenly, I don't know what he did, but my screen froze for 10 minutes
Blind bet is that your app allows file uploads and this feature is very much broken in your code as you allow uploaded files to be reached directly if one knows the right url. I suggest to inspect upload folder however the uploaded PHP script that did the mess could self-remove too.
it says its one-way encryption and cannot be reverted back.
There's no one way encryption as it would be no point of such.
I don't have any back up and it took so much to code
"so much to code" and no backup, no VCS. Well...
My question relates to pulling data from a remote source and saving it to a local database. With the saveAll(), the parent data gets saved correctly, but not the child data.
protected function _saveLocal($_rekeyedData) {
//Set the invoice header and line items models
if (!isset($this->LocalHeader)) {
$this->loadModel('LocalHeader');
$this->LocalHeader->create();
// $this->LocalHeader->set($_rekeyedData);
if (!isset($this->LocalDetail)) {
$this->loadModel('LocalDetail');
$this->LocalDetail->create();
}
}
if ($this->LocalHeader->saveAll($_rekeyedData, array('validate' => 'first'))) {
$this->Session->setFlash('Your data has been saved.');
} else {
$this->Session->setFlash('Data load failed.');
}
debug( $this->LocalDetail->invalidFields() );
}
In this function, I load the models, then attempt to saveAll(). A sample record looks like this:
[1] => Array
(
[LocalHeader] => Array
(
[SOPNUMBE] => CR014076
[DUEDATE] => 2012-04-10 00:00:00
[DOCDATE] => 2012-04-10 00:00:00
[DOCAMNT] => 12000.00000
[SUBTOTAL] => 12000.00000
)
[LocalDetail] => Array
(
[0] => Array
(
[ITEMNMBR] => BASIC SERVICE
[QUANTITY] => 1.00000
[UOFM] => EA
[UNITPRCE] => 12000.00000
[TAXAMNT] => .00000
[CONTSTARTDTE] => 1900-01-01 00:00:00
[CONTENDDTE] => 1900-01-01 00:00:00
[SOPNUMBE] => CR014076
)
)
)
All that gets saved is the LocalHeader record. My hunch is that it has something to do with the array('validate' => 'first'). I think I need to do something separate like validateMany when using saveAll(), but I can't remember where I saw something like that or if I just made it up.
I've read many of the related questions in SO, but none of the offered solutions worked for me.
Any help is appreciated. Please feel free to ask if you have any questions.
EDIT:
This is the header model and this is the detail model.
I think the issue is that neither of those records exists yet. According to the docs
If neither of the associated model records exists in the system yet
(for example, you want to save a new User and their related Profile
records at the same time), you’ll need to first save the primary, or
parent model.
You can read more here with an example.
I'm developing my first Facebook app in PHP and was wondering if the page on Facebook that it's being viewed in can be detected by the app. I'm planning on displaying the app on several different pages and want the app to display something different for each of the pages. This way I would only the need the user to accept the permissions for one central app instead of several different ones.
Yes. There is signed_request (POST), with Page ID... You cannot get entire URL because request is going trough Facebook proxy. Here is the way how you can do it, later just serve content based on Page ID...
$signed_request = $_POST['signed_request'];
$response = Facebook::parse($signed_request);
$page_id = $response['page']['id'];
(this is just the part of my class)
class Facebook {
// Facebook signed request parser
public static function parse($signed)
{
list($encoded, $payload) = explode('.', $signed, 2);
$sig = Facebook::base64_url_decode($encoded);
$data = json_decode(Facebook::base64_url_decode($payload), true);
if(strtoupper($data['algorithm']) !== 'HMAC-SHA256'){
error_log('Unknown algorithm. Expected HMAC-SHA256');
return false;
}
return $data;
}
// Base64 decode for Facebook
private static function base64_url_decode($input)
{
return base64_decode(strtr($input, '-_', '+/'));
}
}
edit:
Like you have said, you need to authorize app only once per user, and you will be able to use it across all pages (I have hundreds of them). This is output of signed_request when user is "connected" to app.
Array
(
[algorithm] => HMAC-SHA256
[expires] => 0
[issued_at] => 1311062412
[oauth_token] =>
[page] => Array
(
[id] => 149715315100385
[liked] => 1
[admin] => 1
)
[user] => Array
(
[country] => ba
[locale] => en_US
[age] => Array
(
[min] => 21
)
)
[user_id] => 1368368917
)
You can see page->id, a user_id, also you will get token for accessing user info (for those you have permission).
You set this location in the developer application when you create your first app. Go to facebook.com/developers and create a new app and you will be able to set the location of your canvas application, which is then loaded in app.facebook.com/YOUR_APP_NAME.