1: <?php
2: namespace Opencart\Catalog\Controller\Api\Account;
3: /**
4: * Class Login
5: *
6: * @package Opencart\Catalog\Controller\Api\Account
7: */
8: class Login extends \Opencart\System\Engine\Controller {
9: /**
10: * Opencart\Catalog\Controller\Api\Account\Login.Index
11: *
12: * @Example
13: *
14: * $url = 'https://www.yourdomain.com/index.php?route=api/account/login&language=en-gb&store_id=0';
15: *
16: * $request_data = [
17: * 'username' => 'Default',
18: * 'key' => ''
19: * ];
20: *
21: * $curl = curl_init();
22: *
23: * curl_setopt($curl, CURLOPT_URL, $url);
24: * curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
25: * curl_setopt($curl, CURLOPT_HEADER, false);
26: * curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
27: * curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
28: * curl_setopt($curl, CURLOPT_TIMEOUT, 30);
29: * curl_setopt($curl, CURLOPT_POST, 1);
30: * curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data);
31: *
32: * $response = curl_exec($curl);
33: *
34: * $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
35: *
36: * curl_close($curl);
37: *
38: * if ($status == 200) {
39: * $api_token = json_decode($response, true);
40: *
41: * if (isset($api_token['api_token'])) {
42: *
43: * // You can now store the session cookie as a var in the your current session or some of persistent storage
44: * $session_id = $api_token['api_token'];
45: * }
46: * }
47: *
48: * $url = 'http://www.yourdomain.com/opencart-master/upload/index.php?route=api/sale/order.load&language=en-gb&store_id=0&order_id=1';
49: *
50: * $curl = curl_init();
51: *
52: * curl_setopt($curl, CURLOPT_URL, $url);
53: * curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
54: * curl_setopt($curl, CURLOPT_HEADER, false);
55: * curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
56: * curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
57: * curl_setopt($curl, CURLOPT_TIMEOUT, 30);
58: * curl_setopt($curl, CURLOPT_POST, 1);
59: * curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data);
60: *
61: * // Add the session cookie so we don't have to login again.
62: * curl_setopt($curl, CURLOPT_COOKIE, 'OCSESSID=' . $session_id);
63: *
64: * $response = curl_exec($curl);
65: *
66: * curl_close($curl);
67: */
68: public function index(): void {
69: $this->load->language('api/account/login');
70:
71: $json = [];
72:
73: $this->load->model('account/api');
74:
75: // Login with API Key
76: if (!empty($this->request->post['username']) && !empty($this->request->post['key'])) {
77: $api_info = $this->model_account_api->login($this->request->post['username'], $this->request->post['key']);
78: } else {
79: $api_info = [];
80: }
81:
82: if ($api_info) {
83: // Check if IP is allowed
84: $ip_data = [];
85:
86: $results = $this->model_account_api->getIps($api_info['api_id']);
87:
88: foreach ($results as $result) {
89: $ip_data[] = trim($result['ip']);
90: }
91:
92: if (!in_array($this->request->server['REMOTE_ADDR'], $ip_data)) {
93: $json['error'] = sprintf($this->language->get('error_ip'), $this->request->server['REMOTE_ADDR']);
94: }
95: } else {
96: $json['error'] = $this->language->get('error_key');
97: }
98:
99: if (!$json) {
100: $json['success'] = $this->language->get('text_success');
101:
102: $session = new \Opencart\System\Library\Session($this->config->get('session_engine'), $this->registry);
103: $session->start();
104:
105: $this->model_account_api->addSession($api_info['api_id'], $session->getId(), $this->request->server['REMOTE_ADDR']);
106:
107: $session->data['api_id'] = $api_info['api_id'];
108:
109: // Create Token
110: $json['api_token'] = $session->getId();
111: }
112:
113: $this->response->addHeader('Content-Type: application/json');
114: $this->response->setOutput(json_encode($json));
115: }
116: }
117: