first commit

This commit is contained in:
2026-04-20 13:11:14 +02:00
commit e0b63ca5f9
7793 changed files with 1844488 additions and 0 deletions

View File

@@ -0,0 +1,222 @@
<?php
namespace Lordicon;
class API {
private static $instance = null;
private $api_base_url = 'https://api.lordicon.com/v1/';
private $settings;
public function __construct() {
$this->settings = json_decode(get_option('lordicon_settings', '{}'));
}
public static function get_instance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function autologin() {
// jeśli mamy token w ustawieniach, zwracamy go
if (!empty($this->settings->token)) {
return array('token' => $this->settings->token);
}
// jeśli brak tokena - próbujemy zalogować jako guest
$response = $this->auth_guest();
if (!empty($response['data']['token'])) {
// zapisz nowy token w ustawieniach WP
$this->settings->token = $response['data']['token'];
update_option('lordicon_settings', json_encode($this->settings));
return array('token' => $this->settings->token);
}
// jeśli nie udało się pobrać tokena
return array('error' => $response['error'] ?? 'Autologin failed');
}
public function auth_guest() {
$url = $this->api_base_url . 'auth/' . Constants::app_name();
$args = array(
'headers' => array('Content-Type' => 'application/json'),
'body' => null,
'method' => 'POST',
'timeout' => 15,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function auth_start($email) {
$url = $this->api_base_url . 'auth/' . Constants::app_name();
$args = array(
'headers' => array('Content-Type' => 'application/json'),
'body' => json_encode(array('email' => $email)),
'method' => 'POST',
'timeout' => 15,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function auth_check($email, $code) {
$url = $this->api_base_url . 'auth/' . Constants::app_name();
$args = array(
'headers' => array('Content-Type' => 'application/json'),
'body' => json_encode(array('email' => $email, 'code' => $code)),
'method' => 'PATCH',
'timeout' => 15,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function status() {
$this->autologin();
$url = $this->api_base_url . 'status';
$token = $this->token;
if (!$token) {
return array('error' => 'Unauthorized');
}
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . ($token),
),
'method' => 'GET',
'timeout' => 5,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function variants() {
$this->autologin();
$url = $this->api_base_url . 'variants';
$token = $this->token;
if (!$token) {
return array('error' => 'Unauthorized');
}
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . ($token),
),
'method' => 'GET',
'timeout' => 5,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function icons($params) {
$this->autologin();
$url = $this->api_base_url . 'icons';
if (!empty($params)) {
$query_string = http_build_query($params);
$url .= '?' . $query_string;
}
$token = $this->token;
if (!$token) {
return array('error' => 'Unauthorized');
}
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . ($token),
),
'method' => 'GET',
'timeout' => 5,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
public function track($params) {
$this->autologin();
$url = $this->api_base_url . 'download/track';
$token = $this->token;
if (!$token) {
return array('error' => 'Unauthorized');
}
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . ($token),
),
'body' => json_encode($params),
'method' => 'POST',
'timeout' => 15,
);
$response = wp_remote_request($url, $args);
return $this->handle_response($response);
}
private function handle_response($response) {
if (is_wp_error($response)) {
return array('error' => $response->get_error_message());
}
$body_raw = wp_remote_retrieve_body($response);
$headers = wp_remote_retrieve_headers($response)->getAll();
$status_code = wp_remote_retrieve_response_code($response);
$body = json_decode($body_raw, true);
if (isset($body['error']) || isset($body['message'])) {
return array('error' => $body['message'] ?? $body['error']);
}
return array(
'data' => $body,
'headers' => $headers,
'status_code' => $status_code,
);
}
private function __clone() {}
public function __wakeup() {
throw new \Exception("Cannot unserialize singleton");
}
public function __get($property) {
if ($property === 'token') {
return $this->settings->token ?? null;
}
return null;
}
}