1313 **/
1414
1515use App \Http \Controllers \GetAllTrait ;
16+ use App \Http \Controllers \Traits \RequestProcessor ;
17+ use App \Http \Controllers \UserGroupsValidationRulesFactory ;
1618use App \Http \Controllers \UserValidationRulesFactory ;
19+ use App \Http \Exceptions \HTTP403ForbiddenException ;
1720use App \Http \Utils \HTMLCleaner ;
1821use App \ModelSerializers \SerializerRegistry ;
1922use Auth \Repositories \IUserRepository ;
23+ use Illuminate \Http \JsonResponse ;
2024use Illuminate \Http \Request as LaravelRequest ;
25+ use Illuminate \Support \Facades \App ;
2126use Illuminate \Support \Facades \Auth ;
2227use Illuminate \Support \Facades \Request ;
2328use Illuminate \Support \Facades \Log ;
2732use models \exceptions \ValidationException ;
2833use OAuth2 \Builders \IdTokenBuilder ;
2934use OAuth2 \IResourceServerContext ;
35+ use OAuth2 \Models \IClient ;
3036use OAuth2 \Repositories \IClientRepository ;
3137use OAuth2 \ResourceServer \IUserService ;
3238use Utils \Http \HttpContentType ;
@@ -41,6 +47,8 @@ final class OAuth2UserApiController extends OAuth2ProtectedController
4147{
4248 use GetAllTrait;
4349
50+ use RequestProcessor;
51+
4452 protected function getAllSerializerType (): string
4553 {
4654 return SerializerRegistry::SerializerType_Private;
@@ -324,4 +332,34 @@ public function get($id)
324332 }
325333 }
326334
335+ /**
336+ * @param $user_id
337+ * @return JsonResponse|mixed
338+ */
339+ public function addUserToGroup ($ user_id ): mixed
340+ {
341+ return $ this ->processRequest (function () use ($ user_id ) {
342+ //check if it's a service app
343+ $ app_type = $ this ->resource_server_context ->getApplicationType ();
344+ if (App::environment () != "testing " && !empty ($ app_type ) && $ app_type != IClient::ApplicationType_Service) {
345+ throw new HTTP403ForbiddenException ("You are not allowed to perform this action. " );
346+ }
347+
348+ if (!Request::isJson ()) return $ this ->error400 ();
349+
350+ $ payload = Request::json ()->all ();
351+ // Creates a Validator instance and validates the data.
352+ $ validation = Validator::make ($ payload , UserGroupsValidationRulesFactory::build ($ payload ));
353+ if ($ validation ->fails ()) {
354+ $ ex = new ValidationException ();
355+ throw $ ex ->setMessages ($ validation ->messages ()->toArray ());
356+ }
357+ $ user_groups_payload = [
358+ "groups " => $ payload ["groups " ],
359+ ];
360+ $ this ->openid_user_service ->update (intval ($ user_id ), $ user_groups_payload );
361+ return $ this ->updated ();
362+ });
363+ }
364+
327365}
0 commit comments