PluginProbe
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! / 2.0.0
Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! v2.0.0
3.7.5 3.7.4 3.7.3 3.7.2 1-final 3.7.1 3.7.0 3.6.8 3.6.7 3.6.6 3.6.5 3.6.4 3.6.3 3.6.2 3.6.1 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.10 All 111 releases
templately / includes / API / Login.php

Login.php in Templately – Elementor & Gutenberg Template Library: 6500+ Free & Pro Ready Templates And Cloud! 2.0.0, at includes/API/Login.php

177 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Templately\API;
4
5 use WP_REST_Request;
6 use Templately\Utils\Helper;
7 use Templately\Utils\Options;
8
9 class Login extends API {
10 public function permission_check( WP_REST_Request $request ) {
11 $this->request = $request;
12 return true;
13 }
14
15 public function register_routes() {
16 $this->post( 'login', [ $this, 'login' ] );
17 $this->post( 'logout', [ $this, 'logout' ] );
18 $this->get( 'is-signed', [ $this, 'is_signed' ] );
19 }
20
21 public function login(){
22 $errors = [];
23 $_ip = Helper::get_ip();
24 $_site_url = home_url( '/' );
25
26 $global_signin = (bool) $this->get_param( 'global_signin', false );
27 $viaAPI = (bool) $this->get_param( 'viaAPI', false );
28 $email = $this->get_param( 'email', '', 'sanitize_email' );
29 $password = $this->get_param( 'password' );
30
31 $funcArgs = [
32 'ip' => $_ip,
33 'site_url' => $_site_url,
34 ];
35
36 if( $viaAPI ) {
37 $api_key = $this->get_param( 'api_key' );
38 $funcArgs['api_key'] = $api_key;
39
40 if ( empty( $api_key ) ) {
41 $errors['api_key'] = __( 'API Key field cannot be empty.', 'templately' );
42 }
43 } else {
44 $funcArgs['email'] = $email;
45 $funcArgs['password'] = $password;
46
47 if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
48 $errors['email'] = __( 'Make sure you have given a valid email address.', 'templately' );
49 }
50
51 if ( empty( $password ) ) {
52 $errors['password'] = __( 'Password field cannot be empty.', 'templately' );
53 }
54 }
55
56 if( ! empty( $errors ) ) {
57 return $this->error( 'login_error', $errors, 'login', 400 );
58 }
59
60 $query = 'status, message, user{ id, name, first_name, last_name, display_name, email, profile_photo, joined, is_verified, api_key, plan, plan_expire_at, my_cloud{ limit, usages, last_pushed }, favourites{ id, type } }';
61
62 $response = $this->http()->mutation(
63 $viaAPI ? 'connectWithApiKey' : 'connect',
64 $query,
65 $funcArgs
66 )->post();
67
68 if ( $global_signin && ! Login::is_globally_signed() ) {
69 Options::set_global_login();
70 }
71
72 if ( ! empty( $response['user']['api_key'] ) ) {
73 $this->utils('options')->set( 'api_key', $response['user']['api_key'] );
74 unset( $response['user']['api_key'] );
75 }
76
77 $meta = [
78 'is_globally_signed' => Login::is_globally_signed(),
79 'signed_as_global' => Login::signed_as_global(),
80 ];
81
82 if( ! empty( $response['user']['my_cloud']['last_pushed'] ) ) {
83 $_cloud_activity = unserialize( $response['user']['my_cloud']['last_pushed'] );
84 $this->utils('options')->set( 'cloud_activity', $_cloud_activity );
85 $meta['cloud_activity'] = $_cloud_activity;
86 unset( $response['user']['my_cloud']['last_pushed'] );
87 }
88
89 if( ! empty( $response['user']['favourites'] ) ) {
90 $_favourites = $this->utils('helper')->normalizeFavourites( $response['user']['favourites'] );
91 $this->utils('options')->set('favourites', $_favourites);
92
93 unset( $response['user']['favourites'] );
94 $meta['favourites'] = $_favourites;
95 }
96
97 $this->utils('options')->set('user', $response['user']);
98 $response['user']['meta'] = $this->user_meta( $meta );
99
100 return $response;
101 }
102
103 public function logout(){
104 // Remove All Metas
105 $this->utils('options')
106 ->remove('user')
107 ->remove('favourites')
108 ->remove('cloud_activity')
109 ->remove('api_key')
110 ->remove('global_login');
111
112 if( $this->utils('options')->whoami() === 'global' ) {
113 $this->utils('options')->remove_global_login();
114 }
115
116 $global_user_id = $this->utils('options')->is_global();
117 if( $global_user_id !== $this->utils('options')->current_user_id() ) {
118 $global_user = $this->utils('options')->get( 'user', false, $global_user_id );
119
120 if( ! empty( $global_user ) ) {
121 $global_user['meta'] = $this->user_meta();
122 }
123 }
124
125 $response = [
126 'status' => 'success',
127 'message' => __( 'Logged out.', 'templately' ),
128 ];
129
130 if( ! empty( $global_user ) ) {
131 $response['global_user'] = $global_user;
132 }
133
134 return $response;
135 }
136
137 public static function is_signed(){
138 $_response = [
139 'status' => 'success'
140 ];
141
142 $_user = (new static)->utils( 'options' )->get('user', null);
143
144 if( ! is_null( $_user ) ) {
145 $_user['meta'] = self::get_instance()->user_meta();
146 }
147
148 if( empty( $_user ) ) {
149 $_response['status'] = 'error';
150 }
151
152 $_response['user'] = $_user;
153
154 return $_response;
155 }
156
157 private function user_meta( $meta = [] ){
158 $_meta = [
159 'link_account' => self::utils( 'options' )->link_account(),
160 'unlink_account' => self::utils( 'options' )->unlink_account(),
161 'is_globally_signed' => Login::is_globally_signed(),
162 'signed_as_global' => Login::signed_as_global(),
163 'starred' => self::utils('options')->get('favourites'),
164 'cloud_activity' => self::utils( 'options' )->get('cloud_activity'),
165 'has_api' => rest_sanitize_boolean( self::utils( 'options' )->get('api_key' ) ),
166 ];
167
168 return array_merge( $_meta, $meta );
169 }
170
171 public static function is_globally_signed(){
172 return rest_sanitize_boolean( ( new static )->utils('options')->is_globally_signed() );
173 }
174 public static function signed_as_global(){
175 return rest_sanitize_boolean( ( new static )->utils('options')->signed_as_global() );
176 }
177 }