reasonableframework/route/api.socialhub.php

191 lines
4.7 KiB
PHP
Raw Normal View History

2018-09-26 15:43:31 +00:00
<?php
/**
* @file api.socialhub.php
* @date 2018-09-26
* @author Go Namhyeon <gnh1201@gmail.com>
* @brief SocialHub API (refactoring from SocioRouter API)
*/
loadHelper("hybridauth.lnk");
loadHelper("hybridauth.dbt");
$provider = get_requested_value("provider");
$action = get_requested_value("action");
$redirect_url = get_requested_value("redirect_url");
2018-09-26 16:46:58 +00:00
$user_id = get_requested_value("user_id");
2018-09-26 16:54:21 +00:00
2018-09-26 15:43:31 +00:00
$connection_id = get_requested_value("connection_id");
2018-09-26 16:06:21 +00:00
$message = get_requested_value("message");
2018-09-26 15:43:31 +00:00
2018-09-26 16:46:58 +00:00
$api_session_id = get_session("api_session_id");
$session_data = array();
2018-09-26 17:28:16 +00:00
if(!empty($api_session_id)) {
2018-09-26 16:46:58 +00:00
$fr = read_storage_file($api_session_id, array(
"storage_type" => "session"
));
if(!$fr) {
2018-09-26 17:37:46 +00:00
$api_session_id = ""; // renew api session id
2018-09-26 16:46:58 +00:00
} else {
$session_data = json_decode($fr);
2018-09-26 17:37:46 +00:00
$provider = get_property_value("provider", $session_data);
$action = get_property_value("action", $session_data);
$redirect_url = get_property_value("redirect_url", $session_data);
$user_id = get_property_value("user_id", $session_data);
$connection_id = get_property_value("connection_id", $session_data);
$message = get_property_value("message", $session_data);
2018-09-26 16:46:58 +00:00
}
}
2018-09-26 17:28:16 +00:00
if(empty($provider)) {
set_error("provider is required field.");
show_errors();
}
2018-09-26 15:56:51 +00:00
$hauth_adapter = null;
$hauth_session = null;
2018-09-26 16:06:21 +00:00
$hauth_profile = null;
2018-09-26 15:56:51 +00:00
2018-09-26 15:43:31 +00:00
// load library
2018-09-26 19:49:21 +00:00
$configfile = hybridauth_load($provider);
2018-09-26 15:43:31 +00:00
if(!$configfile) {
set_error("can not load hybridauth library");
show_errors();
}
$hauth = new Hybrid_Auth($configfile);
// try session restore
$session_flag = false;
2018-09-26 17:37:46 +00:00
if(!empty($connection_id)) {
2018-09-26 15:56:51 +00:00
$hauth_session = get_stored_hybridauth_session($connection_id);
2018-09-26 15:43:31 +00:00
if(!empty($hauth_session)) {
try {
$hauth->restoreSessionData($hauth_session);
$session_flag = true;
} catch(Exception $e) {
2018-09-26 20:01:38 +00:00
set_error("maybe, your connection is broken.");
show_errors();
2018-09-26 15:43:31 +00:00
}
}
}
2018-09-26 17:28:16 +00:00
// check hybridauth request
2018-09-26 19:49:21 +00:00
if(hybridauth_check_redirect()) {
if($hauth->isConnectedWith($provider)) {
$hauth_session = $hauth->getSessionData();
$connection_id = store_hybridauth_session($hauth_session, $user_id);
if($connection_id) {
$session_flag = true;
}
2018-09-26 15:56:51 +00:00
}
2018-09-26 17:28:16 +00:00
}
2018-09-26 15:56:51 +00:00
2018-09-26 17:28:16 +00:00
// save session
$api_session_id = get_hashed_text(make_random_id(32));
$session_data = array(
2018-09-26 17:37:46 +00:00
"api_session_id" => $api_session_id,
2018-09-26 17:28:16 +00:00
"provider" => $provider,
"action" => $action,
"redirect_url" => $redirect_url,
"user_id" => $user_id,
"connection_id" => $connection_id,
2018-09-26 17:37:46 +00:00
"message" => $message
2018-09-26 17:28:16 +00:00
);
$fw = write_storage_file(json_encode($session_data), array(
"storage_type" => "session",
"filename" => $api_session_id
));
if(!$fw) {
set_error("maybe, your storage is write-protected.");
show_errors();
} else {
set_session("api_session_id", $api_session_id);
}
2018-09-26 19:49:21 +00:00
if(hybridauth_check_redirect()) {
hybridauth_process();
}
2018-09-26 17:28:16 +00:00
// try authenticate
try {
if(!$session_flag) {
$hauth_adapter = $hauth->authenticate($provider);
} else {
$hauth_adapter = $hauth->getAdapter($provider);
2018-09-26 15:43:31 +00:00
}
2018-09-26 19:59:28 +00:00
$session_flag = true;
2018-09-26 17:28:16 +00:00
} catch(Exception $e) {
2018-09-26 19:59:28 +00:00
$hauth_adapter = $hauth->authenticate($provider);
2018-09-26 15:56:51 +00:00
}
2018-09-26 15:43:31 +00:00
2018-09-26 15:56:51 +00:00
if(!$session_flag) {
// if failed authenticate
redirect_uri(get_route_link("api.socialhub", array(
"provider" => $provider,
"action" => $action,
"redirect_url" => $redirect_url,
2018-09-26 16:50:32 +00:00
"user_id" => $user_id,
"connection_id" => $connection_id
2018-09-26 15:56:51 +00:00
), false));
2018-09-26 15:43:31 +00:00
}
2018-09-26 17:37:46 +00:00
// get user profile
$hauth_profile = $hauth_adapter->getUserProfile();
2018-09-26 15:43:31 +00:00
// do action
2018-09-26 16:06:21 +00:00
$context = array();
2018-09-26 15:43:31 +00:00
switch($action) {
case "inbound":
break;
case "outbound":
2018-09-26 20:25:53 +00:00
$response = socialhub_send_message($provider, $hauth_adapter, $message);
$object_id = socialhub_parse_object_id($provider, $response);
$context = array(
"success" => !(!$object_id),
"message" => "Have a nice day",
"user_id" => $user_id,
"provider" => $provider,
"object_id" => $object_id
);
2018-09-26 15:43:31 +00:00
break;
case "new":
2018-09-26 20:25:53 +00:00
$context = array(
"success" => true,
"message" => "Authenticated",
"user_id" => $user_id,
"provider" => $provider,
"profile" => $hauth_profile,
);
2018-09-26 15:43:31 +00:00
break;
case "login":
2018-09-26 16:06:21 +00:00
$context = array(
"success" => true,
"message" => "Authenticated",
"user_id" => $user_id,
"provider" => $provider,
"profile" => $hauth_profile,
);
2018-09-26 15:43:31 +00:00
break;
2018-09-26 20:25:53 +00:00
case "bgworker":
$response = socialhub_send_message($provider, $hauth_adapter, $message);
$object_id = socialhub_parse_object_id($provider, $response);
$context = array(
"success" => !(!$object_id),
"message" => "Have a nice day",
"id" => $user_id,
"connection" => $connection_id,
"provider" => $provider,
"object_id" => $object_id
);
break;
2018-09-26 19:53:42 +00:00
case "cancel": // listen cancel authenticated callback
break;
case "delete": // listen delete ping
break;
2018-09-26 17:28:16 +00:00
default:
set_error("Unknown action");
show_errors();
2018-09-26 15:43:31 +00:00
}
2018-09-26 17:28:16 +00:00
2018-09-26 20:25:53 +00:00
header("Content-Type: application/json");
2018-09-26 19:59:28 +00:00
echo json_encode($context);