Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
InstancyController
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 6
210
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 createUser
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
12
 updateUser
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 updateMembership
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getUserMembershipDetails
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 authenticateUser
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3namespace App\Http\Controllers\v1;
4
5use Illuminate\Support\Str;
6use Illuminate\Http\Request;
7use Illuminate\Http\JsonResponse;
8use App\Http\Controllers\Controller;
9use App\Http\Models\Admin\Company;
10use App\Http\Models\Admin\CompanyGroup;
11use App\Http\Models\Auth\User;
12use App\Http\Models\UserInfo;
13use App\Http\Services\InstancyServiceV2;
14use App\Services\FlyMsgAI\SecretsAWS;
15use App\Traits\SubscriptionTrait;
16use MongoDB\BSON\UTCDateTime;
17
18class InstancyController extends Controller
19{
20    use SubscriptionTrait;
21    /**
22     * The instancy service implementation.
23     *
24     * @var InstancyServiceV2
25     */
26    protected $instancyService;
27    protected $instancyDomainUrl;
28
29    /**
30     * Create a new controller instance.
31     *
32     * @return void
33     */
34    public function __construct(InstancyServiceV2 $instancyService)
35    {
36        $this->instancyDomainUrl = "https://ondemand.vengreso.com";
37
38        if (!isProduction() && !isLocalProduction()) {
39            $this->instancyDomainUrl = "https://ondemand.instancy.net";
40        }
41        $this->instancyService = $instancyService;
42    }
43
44    /**
45     * Function to create a instancy user
46     */
47    public function createUser(Request $request): JsonResponse
48    {
49        $user = User::firstWhere('email', $request->email);
50        $group = CompanyGroup::find($user->company_group_id);
51        $company = Company::find($user->company_id);
52
53        $groupId = false;
54        if ($company) {
55            $groupId = $company->instancy_id;
56        } elseif ($group) {
57            $groupId = $group->instancy_id;
58        }
59
60        $response = (new InstancyServiceV2())->createInstancyUser($request->email, $groupId);
61        return response()->json($response);
62    }
63
64    /**
65     * Function to update a instancy user
66     */
67    public function updateUser(Request $request): JsonResponse
68    {
69        $response = (new InstancyServiceV2())->updateMembership($request->email);
70        return response()->json($response);
71    }
72
73    /**
74     * Function to update the membership details
75     */
76    public function updateMembership(Request $request): JsonResponse
77    {
78        $response = (new InstancyServiceV2())->updateMembership($request->email, $request->end_date);
79        return response()->json($response);
80    }
81
82    /**
83     * Function to get the user membership details
84     */
85    public function getUserMembershipDetails(Request $request): JsonResponse
86    {
87        $response = (new InstancyServiceV2())->userMembershipDetails($request);
88        return response()->json($response);
89    }
90
91    /**
92     * Function to autheniticate the user
93     */
94    public function authenticateUser(Request $request): JsonResponse
95    {
96        $user = User::firstWhere('email', $request->Email);
97        $plan = $this->getCurrentPlan($user);
98
99        if (!$plan->has_fly_learning) {
100            return response()->json([
101                "message" => "User does not have access to fly learning"
102            ], 400);
103        }
104
105        $instancyService =  new InstancyServiceV2();
106        $response = $instancyService->authenticateUser($request->Email);
107        if ($instancyService->hasError($response)) {
108            return response()->json($response, 400);
109        }
110
111        $userInfo = UserInfo::firstWhere('email', $request->Email);
112        if ($userInfo) {
113            $userInfo->last_login_fly_learning = new UTCDateTime(now()->getTimestamp() * 1000);
114        }
115
116        try {
117            $redirect_url = $response["UserDetails"][0]["LearnerSSOURL"][0]["value"];
118        } catch (\Exception $e) {
119            $redirect_url = $this->instancyDomainUrl . '/SSO/SecureAuthKey/' . $response["UserDetails"][0]["UserSessionID"][0]['value'];
120        }
121
122        return response()->json([
123            "redirect_url" => $redirect_url
124        ]);
125    }
126}