mirror of
https://github.com/wavelog/wavelog.git
synced 2026-03-22 10:24:14 +00:00
93 lines
2.9 KiB
PHP
93 lines
2.9 KiB
PHP
<?php
|
|
|
|
class Dcl_model extends CI_Model {
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Function: dcl_keys
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Returns all dcl_keys for a selected user via the $user_id parameter
|
|
|
|
|
*/
|
|
function dcl_keys($user_id) {
|
|
$this->load->model('user_options_model');
|
|
return $this->user_options_model->get_options('dcl', array('option_name'=>'dcl_key'), $user_id)->result();
|
|
}
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Function: find_key
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Returns all dcl_keys for a selected user via the $user_id parameter which match also to the $callsign
|
|
|
|
|
*/
|
|
|
|
function find_key($callsign, $user_id) {
|
|
$this->load->model('user_options_model');
|
|
$userkeys=$this->user_options_model->get_options('dcl', array('option_name'=>'dcl_key','option_key'=>'key'), $user_id)->result();
|
|
foreach ($userkeys as $raw_key) {
|
|
$skey=json_decode($raw_key->option_value, true);
|
|
if (isset($skey['Callsigns']) && is_array($skey['Callsigns'])) {
|
|
foreach ($skey['Callsigns'] as $item) {
|
|
if (isset($item['callsign']) && strtoupper($item['callsign']) === strtoupper($callsign)) {
|
|
$key['token']=$skey['UserKeys']['token'];
|
|
$key['vf']=strtotime($item['startDate']);
|
|
$key['vt']=strtotime($item['endDate'] ?? '2099-12-31');
|
|
return $key;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
function store_key($key) {
|
|
$this->load->model('user_options_model');
|
|
$this->user_options_model->set_option('dcl', 'dcl_key', array('key'=>$key));
|
|
}
|
|
|
|
function delete_key() {
|
|
$this->user_options_model->del_option('dcl', 'dcl_key',array('option_key' => 'key'));
|
|
}
|
|
|
|
function get_dcl_info($token) {
|
|
if (($token ?? '') != '') {
|
|
try {
|
|
$dclUrl = 'https://dings.dcl.darc.de/api/getuserinfo/'.$token;
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $dclUrl);
|
|
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: application/json' , "Authorization: Bearer ".$token));
|
|
curl_setopt($ch, CURLOPT_USERAGENT, 'Wavelog DCL Connector');
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
|
|
$rawdcldata = curl_exec($ch);
|
|
curl_close($ch);
|
|
if (strlen($rawdcldata)>100) {
|
|
$dcldata=json_decode($rawdcldata);
|
|
return $dcldata;
|
|
}
|
|
} catch (Exception $e) {
|
|
return false;
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function check_dcl_sig($string,$sig) {
|
|
try {
|
|
$sig = sodium_base642bin($sig, SODIUM_BASE64_VARIANT_URLSAFE);
|
|
$public_key=sodium_base642bin('nV46R47wlLDOJAkSs5RT00wzgz3z98uZFxjo3FSkxeg=',SODIUM_BASE64_VARIANT_URLSAFE);
|
|
return sodium_crypto_sign_verify_detached($sig, $string, $public_key);
|
|
} catch (Exception $e) {
|
|
log_message("Error","DCL: Error while checking signature: ".$e);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
?>
|