clientId = env('ESI_CLIENT_ID');
$this->secretKey = env('ESI_SECRET_KEY');
$this->useragent = env('ESI_USERAGENT');
$this->scope = env('ESI_SCOPES');
//$this->clientId = $fileEsi['client_id'];
//$this->secretKey = $fileEsi['secret'];
//$this->useragent = $fileEsi['useragent'];
} else {
$this->clientId = $client;
$this->secretKey = $secret;
$this->userAgent = $useragent;
}
}
public function GetCharacterId() {
return $this->characterId;
}
public function GetCharacterName() {
return $this->characterName;
}
public function GetCorporationId() {
return $this->corporationId;
}
public function GetCorporationName() {
return $this->corporationName;
}
public function GetAllianceId() {
return $this->allianceId;
}
public function GetAllianceName() {
return $this->allianceName;
}
public function GetAccessToken() {
return $this->accessToken;
}
public function GetRefreshToken() {
return $this->refreshToken;
}
public function GetRefreskTokenExpiry() {
return $this->refreshTokenExpiry;
}
public function SetAccessToken($access) {
$this->accessToken = $access;
}
public function SetRefreshtoken($refresh) {
$this->refreshToken = $refresh;
}
public function SetRefreshTokenExpiry($expire) {
$this->refreshTokenExpiry = $expire;
}
public function ESIStateMachine($state) {
switch($state) {
case 'new':
return $this->DisplayLoginButton();
break;
case 'eveonlinecallback':
$this->VerifyCallback();
if($this->logged == true) {
return 'logged';
} else {
return 'notlogged';
}
break;
default:
$this->UnsetState();
break;
}
}
public function VerifyCallback() {
if($this->CheckState() == 'okay') {
$this->RetrieveAccessToken();
$this->RetrieveCharacterId();
//Get all the information we might need, and store it
$char = $this->GetESIInfo($this->characterId, 'Character', $this->useragent);
$this->characterName = $char['name'];
$corp = $this->GetESIInfo($char['corporation_id'], 'Corporation', $this->useragent);
$this->corporationId = $char['corporation_id'];
$this->corporationName = $corp['name'];
if(isset($corp['alliance_id'])) {
$ally = $this->GetESIInfo($corp['alliance_id'], 'Alliance', $this->useragent);
$this->allianceId = $corp['alliance_id'];
$this->allianceName = $ally['name'];
}
} else {
$this->logged = false;
}
if($this->characterId != null) {
$this->logged = true;
} else {
$this->logged = false;
}
}
public function DisplayLoginButton($state) {
$html = "";
$html .= "
";
$html .= "
";
$html .= "
";
$html .= "
";
return $html;
}
public function CheckState($newState) {
if($newState != session('state')) {
$this->UnsetState();
return false;
} else {
return true;
}
}
public function UnsetState() {
Session::forget('state');
}
public function RetrieveCharacterId() {
$url = 'https://login.eveonline.com/oauth/verify';
$header = 'Authorization: Bearer ' . $this->accessToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
$data = json_decode($result, true);
$this->characterId = $data['CharacterID'];
$this->characterName = $data['CharacterName'];
$this->tokenType = $data['TokenType'];
}
public function RetrieveAccessToken() {
Session::forget('key');
$url = 'https://login.eveonline.com/oauth/token';
$header = 'Authorization: Basic ' . base64_encode($this->clientId . ':' . $this->secretKey);
$fields_string='';
$fields = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code']
);
foreach($fields as $key => $value) {
$fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string . '&');
//Initialize the curl channel
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
curl_close($ch);
$data = json_decode($result, true);
$this->accessToken = $data['access_token'];
$this->refreshToken = $data['refresh_token'];
$this->refreshTokenExpiry = time() + $data['expires_in'];
}
public function RefreshAccess() {
$url = 'https://login.eveonline.com/oauth/token';
$header = 'Authorization: Basic ' . base64_encode($this->clientId . ':' . $this->secretKey);
$fields_string = '';
$fields = array(
'grant_type' => 'refresh_token',
'refresh_token' => $this->refreshToken
);
foreach($fields as $key => $value) {
$fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');
//Initialize the cURL connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
//Get the resultant data from the curl call in an array format
$data = json_decode($result, true);
//Modify the variables of the class
$this->refreshToken = $data['refresh_token'];
$this->refreshTokenExpiry = now() + $data['expires_in'];
$this->accessToken = $data['access_token'];
}
public function GetESIInfo($id, $type, $useragent = null) {
if($useragent == null) {
$useragent = $this->useragent;
}
$url = $this->BuildSingleUrl($type, $id);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$result = curl_exec($ch);
//Check for a curl error
if(curl_error($ch)) {
return null;
} else {
curl_close($ch);
$data = json_decode($result, true);
return $data;
}
}
private function BuildSingleUrl($type, $id) {
$firstPart = 'https://esi.tech.ccp.is/latest/';
$lastPart = '/?datasource=tranquility';
if($type == 'Character') {
$url = $firstPart . 'characters/' . $id . $lastPart;
} else if ($type == 'Corporation') {
$url = $firstPart . 'corporations/' . $id . $lastPart;
} else if ($type == 'Alliance') {
$url = $firstPart . 'alliances/' . $id . $lastPart;
}
return $url;
}
}