forked from chargebee/customer-portal-php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAuth.php
140 lines (125 loc) · 5.32 KB
/
Auth.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
/**
* Authentication module uses Chargebee's portal login and
* sets the subscription and portal session IDs in cookies.
*/
class Auth {
/*
* Activates the portal session and sets a cookie after the customer logs in to Chargebee's portal.
*/
private function authenticate($configData, $params) {
$result = ChargeBee_PortalSession::activate($params['cb_auth_session_id'], array(
"token" => $params['cb_auth_session_token']));
$linked_customers = $result->portalSession()->linkedCustomers;
$cb_customer_email = $linked_customers[0]->email;
$customerId = $result->portalSession()->customerId;
$listOfSubscription = ChargeBee_Subscription::subscriptionsForCustomer($customerId);
foreach ($listOfSubscription as $value) {
$subscriptionDetails[] = $value;
}
$subscriptionDetails = $subscriptionDetails[0];
$subscription = $subscriptionDetails->subscription();
$this->setSubscriptionId($subscription->id);
setcookie('cb_portal_session_id',
$params['cb_auth_session_id'],
time() + 60 *60,
$configData['COOKIE_PATH'],
$configData['COOKIE_DOMAIN'],
$configData['COOKIE_SECURE'],
$configData['COOKIE_HTTPONLY']
);
}
/*
* Sets the subscription ID in cookie.
*/
public function setSubscriptionCookie($configData){
setcookie('cb_subscription_id',
$this->subscriptionId,
time() + 60 *60,
$configData['COOKIE_PATH'],
$configData['COOKIE_DOMAIN'],
$configData['COOKIE_SECURE'],
$configData['COOKIE_HTTPONLY']
);
}
public function setSubscriptionId($subscriptionId){
$this->subscriptionId = $subscriptionId;
}
public function getSessionSubscriptionId(){
return $subscriptionId = isset($_COOKIE['cb_subscription_id']) ? $_COOKIE['cb_subscription_id'] : null;
}
/*
* If the params 'cb_auth_session_id' and 'cb_auth_session_token' are set, then it is
* considered as a redirection from Chargebee's portal login page.
* Activate portal session API should be invoked after redirection. 'cb_auth_session_id' is Chargebee's portal session ID.
*/
public function authenticateSession($params, $configData){
if (isset($params['cb_auth_session_id']) && isset($params['cb_auth_session_token']) && !$this->isLoggedIn()) {
try {
$this->authenticate($configData, $params);
$this->setSubscriptionCookie($configData);
$request_url = explode("://", $configData['SITE_URL'])[0] . "://" .
explode("://", $configData['SITE_URL'])[1] . $_SERVER["REQUEST_URI"];
$redirect_url = removeQueryArg(
array(
"auth_session_id",
"auth_session_token",
"action",
"do"
), $request_url);
header('Location: ' . $redirect_url);
exit;
} catch (Exception $e) {
try {
ChargeBee_PortalSession::logout($params['cb_auth_session_id']);
} catch (ChargeBee_APIError $e) {
error_log("Error from ChargeBee: " . json_encode($e->getJSONObject()));
}
if ($e instanceof ChargeBee_APIError) {
error_log("Error : Couldn't authenticate the customer. Error msg from ChargeBee " .
json_encode($e->getJSONObject()));
} else {
error_log("Exception : " . $e->getMessage());
}
}
}
}
/*
* Logs out the customer and calls Chargebee's portal seesion logout API.
* Unsets the subscription and portal session IDs.
*/
public function logout($configData) {
$cb_portal_session_id = isset($_COOKIE['cb_portal_session_id']) ? filter_input(INPUT_COOKIE, 'cb_portal_session_id') : null;
if (isset($cb_portal_session_id)) {
try {
ChargeBee_PortalSession::logout($cb_portal_session_id);
} catch (ChargeBee_APIError $e) {
error_log("Error from ChargeBee : " . json_encode($e->getJSONObject()));
}
}
setcookie('cb_portal_session_id', false, time() - 3600, $configData['COOKIE_PATH'],
$configData['COOKIE_DOMAIN'], $configData['COOKIE_SECURE'], $configData['COOKIE_HTTPONLY']);
unset($_COOKIE['cb_portal_session_id']);
header('Location: ' . $configData['SITE_URL']."/".$configData['APP_PATH']);
exit;
}
/*
* Checks if the user is logged in to portal.
*/
public function isLoggedIn() {
$cb_portal_session_id = isset($_COOKIE['cb_portal_session_id']) ? $_COOKIE['cb_portal_session_id'] : null;
if (isset($cb_portal_session_id)) {
return true;
}
return false;
}
/*
* Retrieves Chargebee's portal session ID from cookie.
*/
public function getPortalSessionId() {
if (isset($_COOKIE['cb_portal_session_id'])) {
return filter_input(INPUT_COOKIE, 'cb_portal_session_id');
}
return false;
}
}