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 App\Http\Controllers\Controller;
6use App\Http\Models\Admin\Company;
7use App\Http\Models\Admin\CompanyGroup;
8use App\Http\Models\Auth\User;
9use App\Http\Models\UserInfo;
10use App\Http\Services\InstancyServiceV2;
11use App\Traits\SubscriptionTrait;
12use Illuminate\Http\JsonResponse;
13use Illuminate\Http\Request;
14use MongoDB\BSON\UTCDateTime;
15
16class InstancyController extends Controller
17{
18    use SubscriptionTrait;
19
20    /**
21     * The instancy service implementation.
22     *
23     * @var InstancyServiceV2
24     */
25    protected $instancyService;
26
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
62        return response()->json($response);
63    }
64
65    /**
66     * Function to update a instancy user
67     */
68    public function updateUser(Request $request): JsonResponse
69    {
70        $response = (new InstancyServiceV2)->updateMembership($request->email);
71
72        return response()->json($response);
73    }
74
75    /**
76     * Function to update the membership details
77     */
78    public function updateMembership(Request $request): JsonResponse
79    {
80        $response = (new InstancyServiceV2)->updateMembership($request->email, $request->end_date);
81
82        return response()->json($response);
83    }
84
85    /**
86     * Function to get the user membership details
87     */
88    public function getUserMembershipDetails(Request $request): JsonResponse
89    {
90        $response = (new InstancyServiceV2)->userMembershipDetails($request);
91
92        return response()->json($response);
93    }
94
95    /**
96     * Function to autheniticate the user
97     */
98    public function authenticateUser(Request $request): JsonResponse
99    {
100        $user = User::firstWhere('email', $request->Email);
101        $plan = $this->getCurrentPlan($user);
102
103        if (! $plan->has_fly_learning) {
104            return response()->json([
105                'message' => 'User does not have access to fly learning',
106            ], 400);
107        }
108
109        $instancyService = new InstancyServiceV2;
110        $response = $instancyService->authenticateUser($request->Email);
111        if ($instancyService->hasError($response)) {
112            return response()->json($response, 400);
113        }
114
115        $userInfo = UserInfo::firstWhere('email', $request->Email);
116        if ($userInfo) {
117            $userInfo->last_login_fly_learning = new UTCDateTime(now()->getTimestamp() * 1000);
118        }
119
120        try {
121            $redirect_url = $response['UserDetails'][0]['LearnerSSOURL'][0]['value'];
122        } catch (\Exception $e) {
123            $redirect_url = $this->instancyDomainUrl.'/SSO/SecureAuthKey/'.$response['UserDetails'][0]['UserSessionID'][0]['value'];
124        }
125
126        return response()->json([
127            'redirect_url' => $redirect_url,
128        ]);
129    }
130}