daevin 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (536) hide show
  1. package/Daevin_test/.editorconfig +15 -0
  2. package/Daevin_test/.env.example +92 -0
  3. package/Daevin_test/.gitattributes +10 -0
  4. package/Daevin_test/CODE_OF_CONDUCT.md +3 -0
  5. package/Daevin_test/CONTRIBUTING.md +3 -0
  6. package/Daevin_test/LICENSE +21 -0
  7. package/Daevin_test/README.md +314 -0
  8. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/ApiLoginProxyForWebClientAction.php +52 -0
  9. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/ApiLogoutAction.php +23 -0
  10. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/ApiRefreshProxyForWebClientAction.php +47 -0
  11. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/ForgotPasswordAction.php +43 -0
  12. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/GetAuthenticatedUserAction.php +19 -0
  13. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/RegisterUserAction.php +39 -0
  14. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/ResetPasswordAction.php +61 -0
  15. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/SendVerificationEmailAction.php +19 -0
  16. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/VerifyEmailAction.php +43 -0
  17. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/WebLoginAction.php +46 -0
  18. package/Daevin_test/app/Containers/AppSection/Authentication/Actions/WebLogoutAction.php +17 -0
  19. package/Daevin_test/app/Containers/AppSection/Authentication/Classes/LoginCustomAttribute.php +97 -0
  20. package/Daevin_test/app/Containers/AppSection/Authentication/Configs/appSection-authentication.php +117 -0
  21. package/Daevin_test/app/Containers/AppSection/Authentication/Exceptions/EmailNotVerifiedException.php +12 -0
  22. package/Daevin_test/app/Containers/AppSection/Authentication/Exceptions/InvalidEmailVerificationDataException.php +12 -0
  23. package/Daevin_test/app/Containers/AppSection/Authentication/Exceptions/InvalidResetPasswordTokenException.php +12 -0
  24. package/Daevin_test/app/Containers/AppSection/Authentication/Exceptions/LoginFailedException.php +12 -0
  25. package/Daevin_test/app/Containers/AppSection/Authentication/Exceptions/RefreshTokenMissingException.php +12 -0
  26. package/Daevin_test/app/Containers/AppSection/Authentication/Mails/ForgotPassword.php +32 -0
  27. package/Daevin_test/app/Containers/AppSection/Authentication/Mails/Templates/forgot-password.blade.php +73 -0
  28. package/Daevin_test/app/Containers/AppSection/Authentication/Middlewares/RedirectIfAuthenticated.php +35 -0
  29. package/Daevin_test/app/Containers/AppSection/Authentication/Notifications/EmailVerified.php +26 -0
  30. package/Daevin_test/app/Containers/AppSection/Authentication/Notifications/PasswordReset.php +26 -0
  31. package/Daevin_test/app/Containers/AppSection/Authentication/Notifications/VerifyEmail.php +49 -0
  32. package/Daevin_test/app/Containers/AppSection/Authentication/Notifications/Welcome.php +25 -0
  33. package/Daevin_test/app/Containers/AppSection/Authentication/Providers/AuthServiceProvider.php +76 -0
  34. package/Daevin_test/app/Containers/AppSection/Authentication/Providers/MainServiceProvider.php +32 -0
  35. package/Daevin_test/app/Containers/AppSection/Authentication/Providers/MiddlewareServiceProvider.php +19 -0
  36. package/Daevin_test/app/Containers/AppSection/Authentication/README.md +1 -0
  37. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/CallOAuthServerTask.php +36 -0
  38. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/CreatePasswordResetTokenTask.php +14 -0
  39. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/CreateUserByCredentialsTask.php +34 -0
  40. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/LoginTask.php +14 -0
  41. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/MakeRefreshCookieTask.php +25 -0
  42. package/Daevin_test/app/Containers/AppSection/Authentication/Tasks/SendVerificationEmailTask.php +16 -0
  43. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Stubs/oauth-private.key +51 -0
  44. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Stubs/oauth-public.key +14 -0
  45. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/TestCase.php +18 -0
  46. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/CreatePasswordResetTokenTaskTest.php +27 -0
  47. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/CreateUserByCredentialsTaskTest.php +42 -0
  48. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/ForgotPasswordActionTest.php +28 -0
  49. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/LoginCustomAttributeTest.php +48 -0
  50. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/RedirectIfAuthenticatedMiddlewareTest.php +44 -0
  51. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/RegisterUserActionTest.php +64 -0
  52. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/ResetPasswordActionTest.php +83 -0
  53. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/SendVerificationEmailTaskTest.php +40 -0
  54. package/Daevin_test/app/Containers/AppSection/Authentication/Tests/Unit/WebLoginActionTest.php +75 -0
  55. package/Daevin_test/app/Containers/AppSection/Authentication/Traits/AuthenticationTrait.php +25 -0
  56. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/ForgotPasswordController.php +24 -0
  57. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/GetAuthenticatedUserController.php +24 -0
  58. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/LoginProxyForWebClientController.php +33 -0
  59. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/LogoutController.php +25 -0
  60. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/RefreshProxyForWebClientController.php +35 -0
  61. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/RegisterUserController.php +24 -0
  62. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/ResetPasswordController.php +30 -0
  63. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/SendVerificationEmailController.php +22 -0
  64. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Controllers/VerifyEmailController.php +26 -0
  65. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/ForgotPasswordRequest.php +50 -0
  66. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/GetAuthenticatedUserRequest.php +45 -0
  67. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/LoginProxyPasswordGrantRequest.php +57 -0
  68. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/LogoutRequest.php +51 -0
  69. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/RefreshProxyRequest.php +51 -0
  70. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/RegisterUserRequest.php +61 -0
  71. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/ResetPasswordRequest.php +55 -0
  72. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/SendVerificationEmailRequest.php +56 -0
  73. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Requests/VerifyEmailRequest.php +51 -0
  74. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/ForgotPassword.v1.public.php +26 -0
  75. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/GetAuthenticatedUser.v1.private.php +23 -0
  76. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/LoginProxyForWebClient.v1.public.php +30 -0
  77. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/LoginUsingCredentialGrant.v1.public.php +29 -0
  78. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/LoginUsingPasswordGrant.v1.private.php +31 -0
  79. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/Logout.v1.public.php +26 -0
  80. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/RefreshProxyForWebClient.v1.public.php +29 -0
  81. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/RegisterUser.v1.private.php +38 -0
  82. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/ResetPassword.v1.public.php +37 -0
  83. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/SendVerificationEmail.v1.public.php +32 -0
  84. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Routes/VerifyEmail.v1.public.php +35 -0
  85. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/ApiTestCase.php +74 -0
  86. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/ApiLoginProxyForWebClientTest.php +129 -0
  87. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/ApiLogoutTest.php +28 -0
  88. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/ApiRefreshProxyForWebClientTest.php +86 -0
  89. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/ForgotPasswordTest.php +56 -0
  90. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/GetAuthenticatedUserTest.php +76 -0
  91. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/RegisterUserTest.php +208 -0
  92. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/ResetPasswordTest.php +79 -0
  93. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/SendVerificationEmailTest.php +95 -0
  94. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/Stubs/oauth-private.key +51 -0
  95. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/Stubs/oauth-public.key +14 -0
  96. package/Daevin_test/app/Containers/AppSection/Authentication/UI/API/Tests/Functional/VerifyEmailTest.php +84 -0
  97. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Controllers/LoginController.php +39 -0
  98. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Controllers/LogoutController.php +25 -0
  99. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Requests/LoginRequest.php +54 -0
  100. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Requests/LogoutRequest.php +50 -0
  101. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Routes/GetLogin.v1.public.php +8 -0
  102. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Routes/PostLogin.v1.public.php +8 -0
  103. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Routes/PostLogout.php +7 -0
  104. package/Daevin_test/app/Containers/AppSection/Authentication/UI/WEB/Views/login.blade.php +121 -0
  105. package/Daevin_test/app/Containers/AppSection/Authentication/composer.json +11 -0
  106. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/AssignRolesToUserAction.php +32 -0
  107. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/AttachPermissionsToRoleAction.php +31 -0
  108. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/AttachPermissionsToUserAction.php +31 -0
  109. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/CreatePermissionAction.php +22 -0
  110. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/CreateRoleAction.php +22 -0
  111. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/DeleteRoleAction.php +22 -0
  112. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/DetachPermissionsFromRoleAction.php +30 -0
  113. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/DetachPermissionsFromUserAction.php +31 -0
  114. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/FindPermissionAction.php +22 -0
  115. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/FindRoleAction.php +22 -0
  116. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/GetAllPermissionsAction.php +21 -0
  117. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/GetAllRolesAction.php +21 -0
  118. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/GetRolePermissionsAction.php +23 -0
  119. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/GetUserPermissionsAction.php +23 -0
  120. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/GetUserRolesAction.php +23 -0
  121. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/RevokeRolesFromUserAction.php +40 -0
  122. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/SyncPermissionsOnRoleAction.php +33 -0
  123. package/Daevin_test/app/Containers/AppSection/Authorization/Actions/SyncUserRolesAction.php +33 -0
  124. package/Daevin_test/app/Containers/AppSection/Authorization/Configs/appSection-authorization.php +24 -0
  125. package/Daevin_test/app/Containers/AppSection/Authorization/Configs/permission.php +161 -0
  126. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Factories/PermissionFactory.php +19 -0
  127. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Factories/RoleFactory.php +28 -0
  128. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Migrations/2016_12_29_201047_create_permission_tables.php +141 -0
  129. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Migrations/2017_04_22_122453_add_extra_fields_to_permissions_tale.php +30 -0
  130. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Migrations/2017_04_22_122522_add_extra_fields_to_roles_table.php +30 -0
  131. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Repositories/PermissionRepository.php +19 -0
  132. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Repositories/RoleRepository.php +19 -0
  133. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Seeders/AuthorizationDefaultUsersSeeder_4.php +36 -0
  134. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Seeders/AuthorizationGivePermissionsToRolesSeeder_3.php +24 -0
  135. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Seeders/AuthorizationPermissionsSeeder_1.php +27 -0
  136. package/Daevin_test/app/Containers/AppSection/Authorization/Data/Seeders/AuthorizationRolesSeeder_2.php +21 -0
  137. package/Daevin_test/app/Containers/AppSection/Authorization/Models/Permission.php +27 -0
  138. package/Daevin_test/app/Containers/AppSection/Authorization/Models/Role.php +27 -0
  139. package/Daevin_test/app/Containers/AppSection/Authorization/Providers/MainServiceProvider.php +27 -0
  140. package/Daevin_test/app/Containers/AppSection/Authorization/README.md +1 -0
  141. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/AssignRolesToUserTask.php +21 -0
  142. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/CreatePermissionTask.php +41 -0
  143. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/CreateRoleTask.php +41 -0
  144. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/DeleteRoleTask.php +35 -0
  145. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/DetachPermissionsFromRoleTask.php +24 -0
  146. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/DetachPermissionsFromUserTask.php +24 -0
  147. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/FindPermissionTask.php +49 -0
  148. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/FindRoleTask.php +49 -0
  149. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/GetAllPermissionsTask.php +40 -0
  150. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/GetAllRolesTask.php +40 -0
  151. package/Daevin_test/app/Containers/AppSection/Authorization/Tasks/RevokeRoleFromUserTask.php +21 -0
  152. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/TestCase.php +18 -0
  153. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/CreatePermissionTaskTest.php +29 -0
  154. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/CreateRoleTaskTest.php +29 -0
  155. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/DeleteRoleTaskTest.php +36 -0
  156. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/FindPermissionTaskTest.php +44 -0
  157. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/FindRoleTaskTest.php +44 -0
  158. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/PermissionFactoryTest.php +22 -0
  159. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/PermissionMigrationTest.php +95 -0
  160. package/Daevin_test/app/Containers/AppSection/Authorization/Tests/Unit/RoleFactoryTest.php +33 -0
  161. package/Daevin_test/app/Containers/AppSection/Authorization/Traits/AuthorizationTrait.php +11 -0
  162. package/Daevin_test/app/Containers/AppSection/Authorization/Traits/IsResourceOwnerTrait.php +19 -0
  163. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/AssignRolesToUserController.php +26 -0
  164. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/AttachPermissionsToRoleController.php +26 -0
  165. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/AttachPermissionsToUserController.php +27 -0
  166. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/CreateRoleController.php +27 -0
  167. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/DeleteRoleController.php +26 -0
  168. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/DetachPermissionsFromRoleController.php +26 -0
  169. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/DetachPermissionsFromUserController.php +26 -0
  170. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/FindPermissionController.php +26 -0
  171. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/FindRoleController.php +26 -0
  172. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/GetAllPermissionsController.php +28 -0
  173. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/GetAllRolesController.php +28 -0
  174. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/GetRolePermissionsController.php +26 -0
  175. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/GetUserPermissionsController.php +26 -0
  176. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/GetUserRolesController.php +27 -0
  177. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/RevokeRolesFromUserController.php +26 -0
  178. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/SyncPermissionOnRoleController.php +26 -0
  179. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Controllers/SyncUserRolesController.php +26 -0
  180. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/AssignRolesToUserRequest.php +48 -0
  181. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/AttachPermissionsToRoleRequest.php +48 -0
  182. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/AttachPermissionsToUserRequest.php +53 -0
  183. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/CreateRoleRequest.php +47 -0
  184. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/DeleteRoleRequest.php +45 -0
  185. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/DetachPermissionsFromRoleRequest.php +48 -0
  186. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/DetachPermissionsFromUserRequest.php +53 -0
  187. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/FindPermissionRequest.php +45 -0
  188. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/FindRoleRequest.php +45 -0
  189. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/GetAllPermissionsRequest.php +45 -0
  190. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/GetAllRolesRequest.php +45 -0
  191. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/GetRolePermissionsRequest.php +51 -0
  192. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/GetUserPermissionsRequest.php +51 -0
  193. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/GetUserRolesRequest.php +51 -0
  194. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/RevokeRolesFromUserRequest.php +48 -0
  195. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/SyncPermissionsOnRoleRequest.php +48 -0
  196. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Requests/SyncUserRolesRequest.php +48 -0
  197. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/AssignRolesToUser.v1.private.php +29 -0
  198. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/AttachPermissionsToRole.v1.private.php +29 -0
  199. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/AttachPermissionsToUser.v1.private.php +27 -0
  200. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/CreateRole.v1.private.php +25 -0
  201. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/DeleteRole.v1.private.php +28 -0
  202. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/DetachPermissionsFromRole.v1.private.php +29 -0
  203. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/DetachPermissionsFromUser.v1.private.php +27 -0
  204. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/FindPermission.v1.private.php +23 -0
  205. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/FindRole.v1.private.php +23 -0
  206. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/GetAllPermissions.v1.private.php +21 -0
  207. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/GetAllRoles.v1.private.php +21 -0
  208. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/GetRolePermissions.v1.private.php +25 -0
  209. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/GetUserPermissions.v1.private.php +25 -0
  210. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/GetUserRoles.v1.private.php +25 -0
  211. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/RevokeRolesFromUser.v1.private.php +29 -0
  212. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/SyncPermissionOnRole.v1.private.php +26 -0
  213. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/SyncUserRoles.v1.private.php +27 -0
  214. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/_permission.v1.public.php +25 -0
  215. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/_role.v1.public.php +43 -0
  216. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Routes/_userPermissions.v1.public.php +48 -0
  217. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/ApiTestCase.php +15 -0
  218. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/AssignRolesToUserTest.php +71 -0
  219. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/AttachPermissionToUserTest.php +114 -0
  220. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/AttachPermissionsToRoleTest.php +115 -0
  221. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/CreateRoleTest.php +65 -0
  222. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/DeleteRoleTest.php +40 -0
  223. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/DetachPermissionFromUserTest.php +120 -0
  224. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/DetachPermissionsFromRoleTest.php +115 -0
  225. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/FindPermissionTest.php +42 -0
  226. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/FindRoleTest.php +42 -0
  227. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/GetAllPermissionsTest.php +30 -0
  228. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/GetAllRolesTest.php +32 -0
  229. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/GetRolePermissionsTest.php +39 -0
  230. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/GetUserPermissionsTest.php +40 -0
  231. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/GetUserRolesTest.php +40 -0
  232. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/RevokeRolesFromUserTest.php +115 -0
  233. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/SyncPermissionsOnRoleTest.php +92 -0
  234. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Tests/Functional/SyncUserRolesTest.php +93 -0
  235. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Transformers/PermissionTransformer.php +28 -0
  236. package/Daevin_test/app/Containers/AppSection/Authorization/UI/API/Transformers/RoleTransformer.php +34 -0
  237. package/Daevin_test/app/Containers/AppSection/Authorization/UI/WEB/Controllers/UnauthorizedController.php +19 -0
  238. package/Daevin_test/app/Containers/AppSection/Authorization/UI/WEB/Requests/UnauthorizedRequest.php +49 -0
  239. package/Daevin_test/app/Containers/AppSection/Authorization/UI/WEB/Routes/GetUnauthorized.php +7 -0
  240. package/Daevin_test/app/Containers/AppSection/Authorization/UI/WEB/Views/unauthorized.blade.php +43 -0
  241. package/Daevin_test/app/Containers/AppSection/Authorization/composer.json +11 -0
  242. package/Daevin_test/app/Containers/AppSection/Posts/Actions/CreatePostsAction.php +26 -0
  243. package/Daevin_test/app/Containers/AppSection/Posts/Actions/DeletePostsAction.php +18 -0
  244. package/Daevin_test/app/Containers/AppSection/Posts/Actions/FindPostsByIdAction.php +18 -0
  245. package/Daevin_test/app/Containers/AppSection/Posts/Actions/GetAllPostsAction.php +23 -0
  246. package/Daevin_test/app/Containers/AppSection/Posts/Actions/UpdatePostsAction.php +26 -0
  247. package/Daevin_test/app/Containers/AppSection/Posts/Configs/appSection-posts.php +14 -0
  248. package/Daevin_test/app/Containers/AppSection/Posts/Data/Factories/PostsFactory.php +22 -0
  249. package/Daevin_test/app/Containers/AppSection/Posts/Data/Migrations/2023_2_19_55939_create_posts_migration.php +30 -0
  250. package/Daevin_test/app/Containers/AppSection/Posts/Data/Repositories/PostsRepository.php +17 -0
  251. package/Daevin_test/app/Containers/AppSection/Posts/Models/Posts.php +42 -0
  252. package/Daevin_test/app/Containers/AppSection/Posts/Posts.json +7 -0
  253. package/Daevin_test/app/Containers/AppSection/Posts/README.md +194 -0
  254. package/Daevin_test/app/Containers/AppSection/Posts/Tasks/CreatePostsTask.php +34 -0
  255. package/Daevin_test/app/Containers/AppSection/Posts/Tasks/DeletePostsTask.php +35 -0
  256. package/Daevin_test/app/Containers/AppSection/Posts/Tasks/FindPostsByIdTask.php +33 -0
  257. package/Daevin_test/app/Containers/AppSection/Posts/Tasks/GetAllPostsTask.php +31 -0
  258. package/Daevin_test/app/Containers/AppSection/Posts/Tasks/UpdatePostsTask.php +33 -0
  259. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Controllers/Controller.php +94 -0
  260. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Requests/CreatePostsRequest.php +54 -0
  261. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Requests/DeletePostsRequest.php +54 -0
  262. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Requests/FindPostsByIdRequest.php +53 -0
  263. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Requests/GetAllPostsRequest.php +54 -0
  264. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Requests/UpdatePostsRequest.php +56 -0
  265. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Routes/CreatePostsRoute.v1.private.php +52 -0
  266. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Routes/DeletePostsRoute.v1.private.php +31 -0
  267. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Routes/FindPostsByIdRoute.v1.private.php +52 -0
  268. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Routes/GetAllPostsRoute.v1.private.php +74 -0
  269. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Routes/UpdatePostsRoute.v1.private.php +52 -0
  270. package/Daevin_test/app/Containers/AppSection/Posts/UI/API/Transformers/PostsTransformer.php +49 -0
  271. package/Daevin_test/app/Containers/AppSection/Posts/composer.json +7 -0
  272. package/Daevin_test/app/Containers/AppSection/User/Actions/CreateAdminAction.php +39 -0
  273. package/Daevin_test/app/Containers/AppSection/User/Actions/DeleteUserAction.php +22 -0
  274. package/Daevin_test/app/Containers/AppSection/User/Actions/FindUserByIdAction.php +22 -0
  275. package/Daevin_test/app/Containers/AppSection/User/Actions/GetAllUsersAction.php +21 -0
  276. package/Daevin_test/app/Containers/AppSection/User/Actions/UpdateUserAction.php +33 -0
  277. package/Daevin_test/app/Containers/AppSection/User/Actions/UpdateUserPasswordAction.php +35 -0
  278. package/Daevin_test/app/Containers/AppSection/User/Configs/appSection-user.php +5 -0
  279. package/Daevin_test/app/Containers/AppSection/User/Data/Factories/UserFactory.php +44 -0
  280. package/Daevin_test/app/Containers/AppSection/User/Data/Migrations/2000_01_01_000001_create_users_table.php +34 -0
  281. package/Daevin_test/app/Containers/AppSection/User/Data/Migrations/2000_01_01_000002_create_password_resets_table.php +28 -0
  282. package/Daevin_test/app/Containers/AppSection/User/Data/Repositories/UserRepository.php +21 -0
  283. package/Daevin_test/app/Containers/AppSection/User/Data/Seeders/UserPermissionsSeeder_1.php +26 -0
  284. package/Daevin_test/app/Containers/AppSection/User/Models/User.php +58 -0
  285. package/Daevin_test/app/Containers/AppSection/User/Notifications/PasswordUpdatedNotification.php +28 -0
  286. package/Daevin_test/app/Containers/AppSection/User/Providers/MainServiceProvider.php +39 -0
  287. package/Daevin_test/app/Containers/AppSection/User/README.md +1 -0
  288. package/Daevin_test/app/Containers/AppSection/User/Tasks/DeleteUserTask.php +35 -0
  289. package/Daevin_test/app/Containers/AppSection/User/Tasks/FindUserByEmailTask.php +28 -0
  290. package/Daevin_test/app/Containers/AppSection/User/Tasks/FindUserByIdTask.php +31 -0
  291. package/Daevin_test/app/Containers/AppSection/User/Tasks/GetAllUsersTask.php +26 -0
  292. package/Daevin_test/app/Containers/AppSection/User/Tasks/UpdateUserTask.php +42 -0
  293. package/Daevin_test/app/Containers/AppSection/User/Tests/TestCase.php +18 -0
  294. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/CreateAdminActionTest.php +50 -0
  295. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/DeleteUserTaskTest.php +35 -0
  296. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/FindUserByIdTaskTest.php +35 -0
  297. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/PasswordResetsMigrationTest.php +28 -0
  298. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/UpdateUserTaskTest.php +52 -0
  299. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/UserFactoryTest.php +36 -0
  300. package/Daevin_test/app/Containers/AppSection/User/Tests/Unit/UsersMigrationTest.php +34 -0
  301. package/Daevin_test/app/Containers/AppSection/User/UI/API/Controllers/DeleteUserController.php +26 -0
  302. package/Daevin_test/app/Containers/AppSection/User/UI/API/Controllers/FindUserByIdController.php +26 -0
  303. package/Daevin_test/app/Containers/AppSection/User/UI/API/Controllers/GetAllUsersController.php +28 -0
  304. package/Daevin_test/app/Containers/AppSection/User/UI/API/Controllers/UpdateUserController.php +30 -0
  305. package/Daevin_test/app/Containers/AppSection/User/UI/API/Controllers/UpdateUserPasswordController.php +30 -0
  306. package/Daevin_test/app/Containers/AppSection/User/UI/API/Requests/DeleteUserRequest.php +48 -0
  307. package/Daevin_test/app/Containers/AppSection/User/UI/API/Requests/FindUserByIdRequest.php +45 -0
  308. package/Daevin_test/app/Containers/AppSection/User/UI/API/Requests/GetAllUsersRequest.php +45 -0
  309. package/Daevin_test/app/Containers/AppSection/User/UI/API/Requests/UpdateUserPasswordRequest.php +56 -0
  310. package/Daevin_test/app/Containers/AppSection/User/UI/API/Requests/UpdateUserRequest.php +50 -0
  311. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/DeleteUser.v1.private.php +26 -0
  312. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/FindUserById.v1.private.php +24 -0
  313. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/GetAllUsers.v1.private.php +23 -0
  314. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/UpdateUser.v1.private.php +27 -0
  315. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/UpdateUserPassword.v1.private.php +36 -0
  316. package/Daevin_test/app/Containers/AppSection/User/UI/API/Routes/_user.v1.public.php +25 -0
  317. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/ApiTestCase.php +15 -0
  318. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/Functional/DeleteUserTest.php +50 -0
  319. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/Functional/FindUserByIdTest.php +80 -0
  320. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/Functional/GetAllUsersTest.php +88 -0
  321. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/Functional/UpdateUserPasswordTest.php +126 -0
  322. package/Daevin_test/app/Containers/AppSection/User/UI/API/Tests/Functional/UpdateUserTest.php +80 -0
  323. package/Daevin_test/app/Containers/AppSection/User/UI/API/Transformers/UserTransformer.php +52 -0
  324. package/Daevin_test/app/Containers/AppSection/User/UI/CLI/Commands/CreateAdminCommand.php +37 -0
  325. package/Daevin_test/app/Containers/AppSection/User/composer.json +7 -0
  326. package/Daevin_test/app/Containers/AppSection/Users/Actions/CreateUsersAction.php +26 -0
  327. package/Daevin_test/app/Containers/AppSection/Users/Actions/DeleteUsersAction.php +18 -0
  328. package/Daevin_test/app/Containers/AppSection/Users/Actions/FindUsersByIdAction.php +18 -0
  329. package/Daevin_test/app/Containers/AppSection/Users/Actions/GetAllUsersAction.php +23 -0
  330. package/Daevin_test/app/Containers/AppSection/Users/Actions/UpdateUsersAction.php +26 -0
  331. package/Daevin_test/app/Containers/AppSection/Users/Configs/appSection-users.php +14 -0
  332. package/Daevin_test/app/Containers/AppSection/Users/Data/Factories/UsersFactory.php +22 -0
  333. package/Daevin_test/app/Containers/AppSection/Users/Data/Migrations/2023_2_19_55939_create_users_migration.php +31 -0
  334. package/Daevin_test/app/Containers/AppSection/Users/Data/Repositories/UsersRepository.php +17 -0
  335. package/Daevin_test/app/Containers/AppSection/Users/Models/Users.php +44 -0
  336. package/Daevin_test/app/Containers/AppSection/Users/README.md +194 -0
  337. package/Daevin_test/app/Containers/AppSection/Users/Tasks/CreateUsersTask.php +34 -0
  338. package/Daevin_test/app/Containers/AppSection/Users/Tasks/DeleteUsersTask.php +35 -0
  339. package/Daevin_test/app/Containers/AppSection/Users/Tasks/FindUsersByIdTask.php +33 -0
  340. package/Daevin_test/app/Containers/AppSection/Users/Tasks/GetAllUsersTask.php +31 -0
  341. package/Daevin_test/app/Containers/AppSection/Users/Tasks/UpdateUsersTask.php +33 -0
  342. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Controllers/Controller.php +94 -0
  343. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Requests/CreateUsersRequest.php +55 -0
  344. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Requests/DeleteUsersRequest.php +54 -0
  345. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Requests/FindUsersByIdRequest.php +53 -0
  346. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Requests/GetAllUsersRequest.php +54 -0
  347. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Requests/UpdateUsersRequest.php +57 -0
  348. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Routes/CreateUsersRoute.v1.private.php +53 -0
  349. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Routes/DeleteUsersRoute.v1.private.php +31 -0
  350. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Routes/FindUsersByIdRoute.v1.private.php +53 -0
  351. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Routes/GetAllUsersRoute.v1.private.php +75 -0
  352. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Routes/UpdateUsersRoute.v1.private.php +53 -0
  353. package/Daevin_test/app/Containers/AppSection/Users/UI/API/Transformers/UsersTransformer.php +49 -0
  354. package/Daevin_test/app/Containers/AppSection/Users/Users.json +7 -0
  355. package/Daevin_test/app/Containers/AppSection/Users/composer.json +7 -0
  356. package/Daevin_test/app/Ship/Broadcasts/channels.php +16 -0
  357. package/Daevin_test/app/Ship/Commands/HelloWorldCommand.php +32 -0
  358. package/Daevin_test/app/Ship/Commands/closures.php +19 -0
  359. package/Daevin_test/app/Ship/Configs/apiato.php +185 -0
  360. package/Daevin_test/app/Ship/Configs/debugbar.php +275 -0
  361. package/Daevin_test/app/Ship/Configs/fractal.php +43 -0
  362. package/Daevin_test/app/Ship/Configs/hashids.php +54 -0
  363. package/Daevin_test/app/Ship/Configs/ide-helper.php +319 -0
  364. package/Daevin_test/app/Ship/Configs/notification.php +16 -0
  365. package/Daevin_test/app/Ship/Configs/repository.php +250 -0
  366. package/Daevin_test/app/Ship/Contracts/MustVerifyEmail.php +14 -0
  367. package/Daevin_test/app/Ship/Criterias/CreatedTodayCriteria.php +15 -0
  368. package/Daevin_test/app/Ship/Criterias/GroupByCriteria.php +21 -0
  369. package/Daevin_test/app/Ship/Criterias/IsNullCriteria.php +21 -0
  370. package/Daevin_test/app/Ship/Criterias/NotNullCriteria.php +21 -0
  371. package/Daevin_test/app/Ship/Criterias/OrderByCreationDateAscendingCriteria.php +14 -0
  372. package/Daevin_test/app/Ship/Criterias/OrderByCreationDateDescendingCriteria.php +14 -0
  373. package/Daevin_test/app/Ship/Criterias/OrderByFieldCriteria.php +37 -0
  374. package/Daevin_test/app/Ship/Criterias/OrderByNameCriteria.php +14 -0
  375. package/Daevin_test/app/Ship/Criterias/OrderByUpdateDateAscendingCriteria.php +14 -0
  376. package/Daevin_test/app/Ship/Criterias/OrderByUpdateDateDescendingCriteria.php +14 -0
  377. package/Daevin_test/app/Ship/Criterias/ThisBetweenDatesCriteria.php +21 -0
  378. package/Daevin_test/app/Ship/Criterias/ThisEqualThatCriteria.php +20 -0
  379. package/Daevin_test/app/Ship/Criterias/ThisLikeThatCriteria.php +35 -0
  380. package/Daevin_test/app/Ship/Criterias/ThisUserCriteria.php +19 -0
  381. package/Daevin_test/app/Ship/Events/.gitkeep +0 -0
  382. package/Daevin_test/app/Ship/Exceptions/CreateResourceFailedException.php +12 -0
  383. package/Daevin_test/app/Ship/Exceptions/DeleteResourceFailedException.php +12 -0
  384. package/Daevin_test/app/Ship/Exceptions/EmailIsMissedException.php +12 -0
  385. package/Daevin_test/app/Ship/Exceptions/Handlers/ExceptionsHandler.php +107 -0
  386. package/Daevin_test/app/Ship/Exceptions/InternalErrorException.php +12 -0
  387. package/Daevin_test/app/Ship/Exceptions/NotAuthorizedResourceException.php +12 -0
  388. package/Daevin_test/app/Ship/Exceptions/NotFoundException.php +12 -0
  389. package/Daevin_test/app/Ship/Exceptions/NotImplementedException.php +12 -0
  390. package/Daevin_test/app/Ship/Exceptions/UnsupportedFractalSerializerException.php +12 -0
  391. package/Daevin_test/app/Ship/Exceptions/UpdateResourceFailedException.php +12 -0
  392. package/Daevin_test/app/Ship/Exceptions/ValidationFailedException.php +12 -0
  393. package/Daevin_test/app/Ship/Generators/CustomStubs/.gitkeep +0 -0
  394. package/Daevin_test/app/Ship/Helpers/helpers.php +12 -0
  395. package/Daevin_test/app/Ship/Kernels/ConsoleKernel.php +46 -0
  396. package/Daevin_test/app/Ship/Kernels/HttpKernel.php +113 -0
  397. package/Daevin_test/app/Ship/Listeners/.gitkeep +0 -0
  398. package/Daevin_test/app/Ship/Mails/.gitkeep +0 -0
  399. package/Daevin_test/app/Ship/Mails/Templates/.gitkeep +0 -0
  400. package/Daevin_test/app/Ship/Middlewares/Authenticate.php +16 -0
  401. package/Daevin_test/app/Ship/Middlewares/EncryptCookies.php +17 -0
  402. package/Daevin_test/app/Ship/Middlewares/PreventRequestsDuringMaintenance.php +17 -0
  403. package/Daevin_test/app/Ship/Middlewares/TrimStrings.php +19 -0
  404. package/Daevin_test/app/Ship/Middlewares/TrustHosts.php +20 -0
  405. package/Daevin_test/app/Ship/Middlewares/TrustProxies.php +28 -0
  406. package/Daevin_test/app/Ship/Middlewares/VerifyCsrfToken.php +17 -0
  407. package/Daevin_test/app/Ship/Migrations/2017_09_12_174826_create_notifications_table.php +35 -0
  408. package/Daevin_test/app/Ship/Migrations/2019_08_19_000000_create_failed_jobs_table.php +36 -0
  409. package/Daevin_test/app/Ship/Migrations/2021_03_01_150940_create_jobs_table.php +39 -0
  410. package/Daevin_test/app/Ship/Notifications/.gitkeep +0 -0
  411. package/Daevin_test/app/Ship/Parents/Actions/Action.php +10 -0
  412. package/Daevin_test/app/Ship/Parents/Actions/SubAction.php +10 -0
  413. package/Daevin_test/app/Ship/Parents/Commands/ConsoleCommand.php +10 -0
  414. package/Daevin_test/app/Ship/Parents/Controllers/ApiController.php +10 -0
  415. package/Daevin_test/app/Ship/Parents/Controllers/WebController.php +10 -0
  416. package/Daevin_test/app/Ship/Parents/Criterias/Criteria.php +10 -0
  417. package/Daevin_test/app/Ship/Parents/Events/Event.php +10 -0
  418. package/Daevin_test/app/Ship/Parents/Exceptions/Exception.php +10 -0
  419. package/Daevin_test/app/Ship/Parents/Factories/Factory.php +10 -0
  420. package/Daevin_test/app/Ship/Parents/Jobs/Job.php +25 -0
  421. package/Daevin_test/app/Ship/Parents/Listeners/Listener.php +10 -0
  422. package/Daevin_test/app/Ship/Parents/Mails/Mail.php +10 -0
  423. package/Daevin_test/app/Ship/Parents/Middlewares/Middleware.php +10 -0
  424. package/Daevin_test/app/Ship/Parents/Models/Model.php +11 -0
  425. package/Daevin_test/app/Ship/Parents/Models/UserModel.php +17 -0
  426. package/Daevin_test/app/Ship/Parents/Notifications/Notification.php +10 -0
  427. package/Daevin_test/app/Ship/Parents/Policies/Policy.php +26 -0
  428. package/Daevin_test/app/Ship/Parents/Providers/AuthServiceProvider.php +20 -0
  429. package/Daevin_test/app/Ship/Parents/Providers/BroadcastServiceProvider.php +26 -0
  430. package/Daevin_test/app/Ship/Parents/Providers/EventServiceProvider.php +40 -0
  431. package/Daevin_test/app/Ship/Parents/Providers/MainServiceProvider.php +24 -0
  432. package/Daevin_test/app/Ship/Parents/Providers/MiddlewareServiceProvider.php +16 -0
  433. package/Daevin_test/app/Ship/Parents/Providers/RouteServiceProvider.php +24 -0
  434. package/Daevin_test/app/Ship/Parents/Repositories/Repository.php +10 -0
  435. package/Daevin_test/app/Ship/Parents/Requests/Request.php +10 -0
  436. package/Daevin_test/app/Ship/Parents/Seeders/Seeder.php +10 -0
  437. package/Daevin_test/app/Ship/Parents/Tasks/Task.php +10 -0
  438. package/Daevin_test/app/Ship/Parents/Tests/PhpUnit/TestCase.php +51 -0
  439. package/Daevin_test/app/Ship/Parents/Transformers/Transformer.php +25 -0
  440. package/Daevin_test/app/Ship/Parents/Values/Value.php +9 -0
  441. package/Daevin_test/app/Ship/Providers/RouteServiceProvider.php +35 -0
  442. package/Daevin_test/app/Ship/Providers/ShipProvider.php +44 -0
  443. package/Daevin_test/app/Ship/Seeders/SeedDeploymentData.php +18 -0
  444. package/Daevin_test/app/Ship/Seeders/SeedTestingData.php +18 -0
  445. package/Daevin_test/app/Ship/Tests/TestCase.php +10 -0
  446. package/Daevin_test/app/Ship/composer.json +21 -0
  447. package/Daevin_test/artisan +53 -0
  448. package/Daevin_test/bootstrap/app.php +55 -0
  449. package/Daevin_test/bootstrap/cache/.gitignore +2 -0
  450. package/Daevin_test/composer.json +112 -0
  451. package/Daevin_test/composer.lock +12696 -0
  452. package/Daevin_test/config/app.php +206 -0
  453. package/Daevin_test/config/auth.php +117 -0
  454. package/Daevin_test/config/broadcasting.php +67 -0
  455. package/Daevin_test/config/cache.php +110 -0
  456. package/Daevin_test/config/cors.php +34 -0
  457. package/Daevin_test/config/database.php +151 -0
  458. package/Daevin_test/config/filesystems.php +76 -0
  459. package/Daevin_test/config/hashing.php +52 -0
  460. package/Daevin_test/config/logging.php +119 -0
  461. package/Daevin_test/config/mail.php +117 -0
  462. package/Daevin_test/config/queue.php +93 -0
  463. package/Daevin_test/config/services.php +34 -0
  464. package/Daevin_test/config/session.php +201 -0
  465. package/Daevin_test/config/view.php +36 -0
  466. package/Daevin_test/database/factories/ModelFactory.php +4 -0
  467. package/Daevin_test/database/migrations/.gitkeep +0 -0
  468. package/Daevin_test/database/seeders/DatabaseSeeder.php +24 -0
  469. package/Daevin_test/lang/ar/auth.php +19 -0
  470. package/Daevin_test/lang/ar/pagination.php +19 -0
  471. package/Daevin_test/lang/ar/passwords.php +22 -0
  472. package/Daevin_test/lang/ar/validation.php +149 -0
  473. package/Daevin_test/lang/en/auth.php +20 -0
  474. package/Daevin_test/lang/en/pagination.php +19 -0
  475. package/Daevin_test/lang/en/passwords.php +22 -0
  476. package/Daevin_test/lang/en/validation.php +169 -0
  477. package/Daevin_test/lang/es/auth.php +19 -0
  478. package/Daevin_test/lang/es/pagination.php +19 -0
  479. package/Daevin_test/lang/es/passwords.php +22 -0
  480. package/Daevin_test/lang/es/validation.php +149 -0
  481. package/Daevin_test/lang/fa/auth.php +18 -0
  482. package/Daevin_test/lang/fa/pagination.php +17 -0
  483. package/Daevin_test/lang/fa/passwords.php +20 -0
  484. package/Daevin_test/lang/fa/validation.php +182 -0
  485. package/Daevin_test/lang/fr/auth.php +19 -0
  486. package/Daevin_test/lang/fr/pagination.php +19 -0
  487. package/Daevin_test/lang/fr/passwords.php +22 -0
  488. package/Daevin_test/lang/fr/validation.php +149 -0
  489. package/Daevin_test/package-lock.json +10031 -0
  490. package/Daevin_test/package.json +19 -0
  491. package/Daevin_test/php_cs.dist.php +39 -0
  492. package/Daevin_test/phpspec.yml +5 -0
  493. package/Daevin_test/phpunit.xml +38 -0
  494. package/Daevin_test/psalm.dist.xml +18 -0
  495. package/Daevin_test/public/.htaccess +21 -0
  496. package/Daevin_test/public/favicon.ico +0 -0
  497. package/Daevin_test/public/index.php +55 -0
  498. package/Daevin_test/public/robots.txt +2 -0
  499. package/Daevin_test/public/web.config +28 -0
  500. package/Daevin_test/resources/css/app.css +0 -0
  501. package/Daevin_test/resources/js/app.js +1 -0
  502. package/Daevin_test/resources/js/bootstrap.js +28 -0
  503. package/Daevin_test/resources/views/.gitkeep +0 -0
  504. package/Daevin_test/server.php +21 -0
  505. package/Daevin_test/storage/app/.gitignore +3 -0
  506. package/Daevin_test/storage/app/public/.gitignore +2 -0
  507. package/Daevin_test/storage/debugbar/.gitignore +2 -0
  508. package/Daevin_test/storage/framework/cache/.gitignore +2 -0
  509. package/Daevin_test/storage/framework/sessions/.gitignore +2 -0
  510. package/Daevin_test/storage/framework/testing/.gitignore +2 -0
  511. package/Daevin_test/storage/framework/views/.gitignore +2 -0
  512. package/Daevin_test/storage/logs/.gitignore +2 -0
  513. package/Daevin_test/webpack.mix.js +17 -0
  514. package/bin/classes/Apiato/index.js +208 -0
  515. package/bin/classes/Containers/Action.js +169 -0
  516. package/bin/classes/Containers/ComposerJSON.js +27 -0
  517. package/bin/classes/Containers/Config.js +39 -0
  518. package/bin/classes/Containers/Controller.js +120 -0
  519. package/bin/classes/Containers/Factory.js +47 -0
  520. package/bin/classes/Containers/Migration.js +80 -0
  521. package/bin/classes/Containers/Model.js +126 -0
  522. package/bin/classes/Containers/ReadMe.js +212 -0
  523. package/bin/classes/Containers/Repository.js +54 -0
  524. package/bin/classes/Containers/Request.js +341 -0
  525. package/bin/classes/Containers/Route.js +336 -0
  526. package/bin/classes/Containers/Task.js +225 -0
  527. package/bin/classes/Containers/Transformer.js +94 -0
  528. package/bin/classes/Helpers.js +150 -0
  529. package/bin/classes/tes.js +0 -0
  530. package/bin/constants.js +11 -0
  531. package/bin/core/output.json +13 -0
  532. package/bin/core/schemaToSql.js +118 -0
  533. package/bin/core/sqlToSchema.js +206 -0
  534. package/bin/index.js +103 -0
  535. package/dbconfig.json +74 -0
  536. package/package.json +39 -0
@@ -0,0 +1,208 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\API\Tests\Functional;
4
+
5
+ use App\Containers\AppSection\Authentication\Notifications\VerifyEmail;
6
+ use App\Containers\AppSection\Authentication\Notifications\Welcome;
7
+ use App\Containers\AppSection\Authentication\UI\API\Tests\ApiTestCase;
8
+ use App\Containers\AppSection\User\Models\User;
9
+ use Illuminate\Support\Facades\Notification;
10
+ use Illuminate\Testing\Fluent\AssertableJson;
11
+
12
+ /**
13
+ * Class RegisterUserTest.
14
+ *
15
+ * @group authentication
16
+ * @group api
17
+ */
18
+ class RegisterUserTest extends ApiTestCase
19
+ {
20
+ protected string $endpoint = 'post@v1/register';
21
+
22
+ protected bool $auth = false;
23
+
24
+ protected array $access = [
25
+ 'permissions' => '',
26
+ 'roles' => '',
27
+ ];
28
+
29
+ public function testGivenEmailVerificationEnabled_RegisterNewUserWithCredentials(): void
30
+ {
31
+ config(['appSection-authentication.require_email_verification' => true]);
32
+ config(['appSection-authentication.allowed-verify-email-urls' => 'http://some.test/known/url']);
33
+
34
+ $data = [
35
+ 'email' => 'apiato@mail.test',
36
+ 'password' => 's3cr3tPa$$',
37
+ 'verification_url' => 'http://some.test/known/url',
38
+ ];
39
+
40
+ $response = $this->makeCall($data);
41
+
42
+ $response->assertStatus(200);
43
+ $response->assertJson(
44
+ fn (AssertableJson $json) => $json->has('data')
45
+ ->where('data.email', $data['email'])
46
+ ->etc()
47
+ );
48
+ }
49
+
50
+ public function testGivenEmailVerificationDisabled_RegisterNewUserWithCredentials(): void
51
+ {
52
+ config(['appSection-authentication.require_email_verification' => false]);
53
+ $data = [
54
+ 'email' => 'apiato@mail.test',
55
+ 'password' => 's3cr3tPa$$',
56
+ ];
57
+
58
+ $response = $this->makeCall($data);
59
+
60
+ $response->assertStatus(200);
61
+ $response->assertJson(
62
+ fn (AssertableJson $json) => $json->has('data')
63
+ ->where('data.email', $data['email'])
64
+ ->etc()
65
+ );
66
+ }
67
+
68
+ public function testRegisterNewUserUsingGetVerb(): void
69
+ {
70
+ $response = $this->endpoint('get@v1/register')->makeCall();
71
+
72
+ $response->assertStatus(405);
73
+ $response->assertJson(
74
+ fn (AssertableJson $json) => $json->has('message')
75
+ ->where('message', 'The GET method is not supported for route v1/register. Supported methods: POST.')
76
+ ->etc()
77
+ );
78
+ }
79
+
80
+ public function testRegisterExistingUser(): void
81
+ {
82
+ $userDetails = [
83
+ 'email' => 'apiato@mail.test',
84
+ 'password' => 'secret',
85
+ ];
86
+
87
+ $this->getTestingUser($userDetails);
88
+
89
+ $data = [
90
+ 'email' => $userDetails['email'],
91
+ 'password' => $userDetails['password'],
92
+ ];
93
+
94
+ $response = $this->makeCall($data);
95
+
96
+ $response->assertStatus(422);
97
+ $response->assertJson(
98
+ fn (AssertableJson $json) => $json->has('errors')
99
+ ->where('errors.email.0', 'The email has already been taken.')
100
+ ->etc()
101
+ );
102
+ }
103
+
104
+ public function testRegisterNewUserWithoutData(): void
105
+ {
106
+ $data = [];
107
+
108
+ $response = $this->makeCall($data);
109
+
110
+ $response->assertStatus(422);
111
+
112
+ if (config('appSection-authentication.require_email_verification')) {
113
+ $response->assertJson(
114
+ fn (AssertableJson $json) => $json->hasAll(['message', 'errors' => 3])
115
+ ->has(
116
+ 'errors',
117
+ fn (AssertableJson $json) => $json->where('email.0', 'The email field is required.')
118
+ ->where('password.0', 'The password field is required.')
119
+ ->where('verification_url.0', 'The verification url field is required.')
120
+ )
121
+ );
122
+ } else {
123
+ $response->assertJson(
124
+ fn (AssertableJson $json) => $json->hasAll(['message', 'errors' => 2])
125
+ ->has(
126
+ 'errors',
127
+ fn (AssertableJson $json) => $json->where('email.0', 'The email field is required.')
128
+ ->where('password.0', 'The password field is required.')
129
+ )
130
+ );
131
+ }
132
+ }
133
+
134
+ public function testRegisterNewUserWithInvalidEmail(): void
135
+ {
136
+ $data = [
137
+ 'email' => 'missing-at.test',
138
+ ];
139
+
140
+ $response = $this->makeCall($data);
141
+
142
+ $response->assertStatus(422);
143
+ $response->assertJson(
144
+ fn (AssertableJson $json) => $json->has('errors')
145
+ ->where('errors.email.0', 'The email must be a valid email address.')
146
+ ->etc()
147
+ );
148
+ }
149
+
150
+ public function testRegisterNewUserWithInvalidPassword(): void
151
+ {
152
+ $data = [
153
+ 'password' => '((((()))))',
154
+ ];
155
+
156
+ $response = $this->makeCall($data);
157
+
158
+ $response->assertStatus(422);
159
+ $response->assertJson(
160
+ fn (AssertableJson $json) => $json->has('errors')
161
+ ->has(
162
+ 'errors.password',
163
+ fn (AssertableJson $json) => $json
164
+ ->where('0', 'The password must contain at least one uppercase and one lowercase letter.')
165
+ ->where('1', 'The password must contain at least one letter.')
166
+ ->where('2', 'The password must contain at least one number.')
167
+ )
168
+ ->etc()
169
+ );
170
+ }
171
+
172
+ public function testRegisterNewUserWithNotAllowedVerificationUrl(): void
173
+ {
174
+ config(['appSection-authentication.require_email_verification' => true]);
175
+
176
+ $data = [
177
+ 'email' => 'test@test.test',
178
+ 'password' => 's3cr3tPa$$',
179
+ 'verification_url' => 'http://notallowed.test/wrong/hopyfuly/noone/make/a/route/like/this',
180
+ ];
181
+
182
+ $response = $this->makeCall($data);
183
+
184
+ $response->assertStatus(422);
185
+ $response->assertJson(
186
+ fn (AssertableJson $json) => $json->hasAll(['message', 'errors' => 1])
187
+ ->where('errors.verification_url.0', 'The selected verification url is invalid.')
188
+ );
189
+ }
190
+
191
+ public function testGivenEmailVerificationDisabled_ShouldNotSendVerificationEmail(): void
192
+ {
193
+ config(['appSection-authentication.require_email_verification' => false]);
194
+
195
+ Notification::fake();
196
+ $data = [
197
+ 'email' => 'test@test.test',
198
+ 'password' => 's3cr3tPa$$',
199
+ 'verification_url' => config('appSection-authentication.allowed-verify-email-urls')[0],
200
+ ];
201
+
202
+ $response = $this->makeCall($data);
203
+ $registeredUser = User::find($this->decode($response->json()['data']['id']));
204
+ $response->assertStatus(200);
205
+ Notification::assertSentTo($registeredUser, Welcome::class);
206
+ Notification::assertNotSentTo($registeredUser, VerifyEmail::class);
207
+ }
208
+ }
@@ -0,0 +1,79 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\API\Tests\Functional;
4
+
5
+ use App\Containers\AppSection\Authentication\Tasks\CreatePasswordResetTokenTask;
6
+ use App\Containers\AppSection\Authentication\UI\API\Tests\ApiTestCase;
7
+ use Illuminate\Testing\Fluent\AssertableJson;
8
+
9
+ /**
10
+ * Class ResetPasswordTest.
11
+ *
12
+ * @group authentication
13
+ * @group api
14
+ */
15
+ class ResetPasswordTest extends ApiTestCase
16
+ {
17
+ protected string $endpoint = 'post@v1/password/reset';
18
+
19
+ protected array $access = [
20
+ 'permissions' => '',
21
+ 'roles' => '',
22
+ ];
23
+
24
+ public function testResetPassword(): void
25
+ {
26
+ $this->getTestingUser([
27
+ 'email' => 'someone@something.test',
28
+ 'password' => 'old pass',
29
+ ]);
30
+ $token = app(CreatePasswordResetTokenTask::class)->run($this->testingUser);
31
+ $data = [
32
+ 'email' => $this->testingUser->email,
33
+ 'password' => 's3cr3tPa$$',
34
+ 'token' => $token,
35
+ ];
36
+
37
+ $response = $this->makeCall($data);
38
+
39
+ $response->assertStatus(204);
40
+ }
41
+
42
+ public function testResetPasswordWithInvalidEmail(): void
43
+ {
44
+ $data = [
45
+ 'email' => 'missing-at.test',
46
+ ];
47
+
48
+ $response = $this->makeCall($data);
49
+
50
+ $response->assertStatus(422);
51
+ $response->assertJson(
52
+ fn(AssertableJson $json) => $json->has('errors')
53
+ ->where('errors.email.0', 'The email must be a valid email address.')
54
+ ->etc()
55
+ );
56
+ }
57
+
58
+ public function testResetPasswordWithInvalidPassword(): void
59
+ {
60
+ $data = [
61
+ 'password' => '((((()))))',
62
+ ];
63
+
64
+ $response = $this->makeCall($data);
65
+
66
+ $response->assertStatus(422);
67
+ $response->assertJson(
68
+ fn(AssertableJson $json) => $json->has('errors')
69
+ ->has(
70
+ 'errors.password',
71
+ fn(AssertableJson $json) => $json
72
+ ->where('0', 'The password must contain at least one uppercase and one lowercase letter.')
73
+ ->where('1', 'The password must contain at least one letter.')
74
+ ->where('2', 'The password must contain at least one number.')
75
+ )
76
+ ->etc()
77
+ );
78
+ }
79
+ }
@@ -0,0 +1,95 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\API\Tests\Functional;
4
+
5
+ use App\Containers\AppSection\Authentication\Notifications\VerifyEmail;
6
+ use App\Containers\AppSection\Authentication\UI\API\Tests\ApiTestCase;
7
+ use App\Containers\AppSection\User\Models\User;
8
+ use Illuminate\Support\Facades\Notification;
9
+ use Illuminate\Testing\Fluent\AssertableJson;
10
+
11
+ /**
12
+ * Class SendVerificationEmailTest.
13
+ *
14
+ * @group authentication
15
+ * @group api
16
+ */
17
+ class SendVerificationEmailTest extends ApiTestCase
18
+ {
19
+ protected string $endpoint = 'post@v1/email/verification-notification';
20
+
21
+ protected array $access = [
22
+ 'permissions' => '',
23
+ 'roles' => '',
24
+ ];
25
+
26
+ public function testGivenEmailVerificationEnabled_SendVerificationEmail(): void
27
+ {
28
+ if (!config('appSection-authentication.require_email_verification')) {
29
+ $this->markTestSkipped();
30
+ }
31
+ Notification::fake();
32
+ $this->testingUser = User::factory()->unverified()->create();
33
+
34
+ $data = [
35
+ 'verification_url' => config('appSection-authentication.allowed-verify-email-urls')[0],
36
+ ];
37
+
38
+ $response = $this->makeCall($data);
39
+
40
+ $response->assertStatus(202);
41
+ Notification::assertSentTo($this->testingUser, VerifyEmail::class);
42
+ }
43
+
44
+ public function testSendingWithoutRequiredData_ShouldThrowError(): void
45
+ {
46
+ if (!config('appSection-authentication.require_email_verification')) {
47
+ $this->markTestSkipped();
48
+ }
49
+ $data = [];
50
+
51
+ $response = $this->makeCall($data);
52
+
53
+ $response->assertStatus(422);
54
+
55
+ $response->assertJson(
56
+ fn (AssertableJson $json) => $json->hasAll(['message', 'errors' => 1])
57
+ ->has(
58
+ 'errors',
59
+ fn (AssertableJson $json) => $json->where('verification_url.0', 'The verification url field is required.')
60
+ )
61
+ );
62
+ }
63
+
64
+ public function testRegisterNewUserWithNotAllowedVerificationUrl(): void
65
+ {
66
+ if (!config('appSection-authentication.require_email_verification')) {
67
+ $this->markTestSkipped();
68
+ }
69
+ $data = [
70
+ 'email' => 'test@test.test',
71
+ 'password' => 's3cr3tPa$$',
72
+ 'name' => 'Bruce Lee',
73
+ 'verification_url' => 'http://notallowed.test/wrong',
74
+ ];
75
+
76
+ $response = $this->makeCall($data);
77
+
78
+ $response->assertStatus(422);
79
+ $response->assertJson(
80
+ fn (AssertableJson $json) => $json->hasAll(['message', 'errors' => 1])
81
+ ->where('errors.verification_url.0', 'The selected verification url is invalid.')
82
+ );
83
+ }
84
+
85
+ public function testGivenEmailVerificationIsDisabled_ShouldThrow404(): void
86
+ {
87
+ if (config('appSection-authentication.require_email_verification')) {
88
+ $this->markTestSkipped();
89
+ }
90
+ $response = $this->makeCall([]);
91
+
92
+ $response->assertStatus(404);
93
+
94
+ }
95
+ }
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,14 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv6s9sNcaJW+yq0VmvAJV
3
+ RLcspSLXGbm5e9IsNYA5gwyD2HJe+15Yk0xtkdrJvFZJdZ9NgaBKthsjJiDwrD57
4
+ 4KEJR1ZzlohkjtWyY3dp+tYs06oQvRBGWeLok4x8iZeG1EDcL6cYiM56pT2tCFd5
5
+ E/7t0LhGf14SKoBnEqM3Kl+TVNQr9mXmsRh9Xqy/KgqvscXpQUa/q35MbNJ6ztj8
6
+ DPLhLwN9Lu2nX7TCgPdaakCQjeHOpcNNiR4cDN8DbOF3l0WVi4IVyrCM+7SVE0B9
7
+ bWSCr31/yDgFzn/+o6LB743mOBLb7VDwuiQyIra1BNt5w1w+rmJCd0uu+Ux2+36p
8
+ xxnQMXtfPuzCPt/qTo8CVUcoq/YJCxHCekracIEMiELKxZYvh+TahMYTTbnu+Xmo
9
+ 5/btnt3iNNYW/z2MAXGcStIPek8zCKHhAN1DCe96T6SzHgC8Rw1v3zRTfLGm1IPI
10
+ Nr4hB5qiISLg6jhBHH1UqoPzKvCMPQ9UkBvey5IJBGAaubpTKsaWoG0HWdi/34EW
11
+ 7ba/G2h45bVaXbSIOBzOXrRDZYUqbCimsEe4xi/yMsYJAyW9rRhxs5R15uS43MlX
12
+ vwV7oBagxbk+r2aw3JJeWBfJa0UJbjh1kX5rH3BsVkONeJBsfcLC6nwkePSfaDa5
13
+ MEA9E4S0uJMODlJ6jhdwUrUCAwEAAQ==
14
+ -----END PUBLIC KEY-----
@@ -0,0 +1,84 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\API\Tests\Functional;
4
+
5
+ use App\Containers\AppSection\Authentication\Notifications\EmailVerified;
6
+ use App\Containers\AppSection\Authentication\UI\API\Tests\ApiTestCase;
7
+ use App\Containers\AppSection\User\Models\User;
8
+ use Illuminate\Support\Facades\Notification;
9
+ use Illuminate\Support\Facades\URL;
10
+
11
+ /**
12
+ * Class VerifyEmailTest.
13
+ *
14
+ * @group authentication
15
+ * @group api
16
+ */
17
+ class VerifyEmailTest extends ApiTestCase
18
+ {
19
+ protected string $endpoint = 'post@v1/email/verify/{id}/{hash}';
20
+
21
+ protected array $access = [
22
+ 'roles' => '',
23
+ 'permissions' => '',
24
+ ];
25
+
26
+ public function testVerifyEmail(): void
27
+ {
28
+ Notification::fake();
29
+ $unverifiedUser = User::factory()->unverified()->create();
30
+ $hashedEmail = sha1($unverifiedUser->getEmailForVerification());
31
+ // enable email verification
32
+ config(['appSection-authentication.require_email_verification' => true]);
33
+ $url = URL::temporarySignedRoute(
34
+ 'verification.verify',
35
+ now()->addMinutes(30),
36
+ [
37
+ 'id' => $unverifiedUser->getHashedKey(),
38
+ 'hash' => $hashedEmail,
39
+ ]
40
+ );
41
+
42
+ $match = [];
43
+ $expires = $match[preg_match('/expires=(.*?)&/', $url, $match)];
44
+ $signature = $match[preg_match('/signature=(.*)/', $url, $match)];
45
+
46
+ $response = $this->injectId($unverifiedUser->id)
47
+ ->injectId($hashedEmail, skipEncoding: true, replace: '{hash}')
48
+ ->endpoint($this->endpoint . "?expires=$expires&signature=$signature")
49
+ ->makeCall();
50
+
51
+ $response->assertStatus(200);
52
+ $unverifiedUser->refresh();
53
+ $this->assertTrue($unverifiedUser->hasVerifiedEmail());
54
+ Notification::assertSentTo($unverifiedUser, EmailVerified::class);
55
+ }
56
+
57
+ public function testVerifyEmailShouldNotBeAcceptedIfRoutesSignatureIsNotVerified(): void
58
+ {
59
+ Notification::fake();
60
+ $unverifiedUser = User::factory()->unverified()->create();
61
+ $hashedEmail = sha1($unverifiedUser->getEmailForVerification());
62
+ // enable email verification
63
+ config(['appSection-authentication.require_email_verification' => true]);
64
+ $url = URL::temporarySignedRoute(
65
+ 'verification.verify',
66
+ now()->addMinutes(30),
67
+ [
68
+ 'id' => $unverifiedUser->getHashedKey(),
69
+ 'hash' => $hashedEmail,
70
+ ]
71
+ );
72
+
73
+ $match = [];
74
+ $expires = $match[preg_match('/expires=(.*?)&/', $url, $match)];
75
+ $signature = 'invalid_sig';
76
+
77
+ $response = $this->injectId($unverifiedUser->id)
78
+ ->injectId($hashedEmail, skipEncoding: true, replace: '{hash}')
79
+ ->endpoint($this->endpoint . "?expires=$expires&signature=$signature")
80
+ ->makeCall();
81
+
82
+ $response->assertStatus(403);
83
+ }
84
+ }
@@ -0,0 +1,39 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\WEB\Controllers;
4
+
5
+ use App\Containers\AppSection\Authentication\Actions\WebLoginAction;
6
+ use App\Containers\AppSection\Authentication\UI\WEB\Requests\LoginRequest;
7
+ use App\Ship\Parents\Controllers\WebController;
8
+ use App\Ship\Providers\RouteServiceProvider;
9
+ use Exception;
10
+ use Illuminate\Contracts\Foundation\Application;
11
+ use Illuminate\Contracts\View\Factory;
12
+ use Illuminate\Contracts\View\View;
13
+ use Illuminate\Http\RedirectResponse;
14
+
15
+ class LoginController extends WebController
16
+ {
17
+ /**
18
+ * @return Factory|View|Application
19
+ */
20
+ public function showLoginPage(): Factory|View|Application
21
+ {
22
+ return view('appSection@authentication::login');
23
+ }
24
+
25
+ /**
26
+ * @param LoginRequest $request
27
+ * @return RedirectResponse
28
+ */
29
+ public function login(LoginRequest $request): RedirectResponse
30
+ {
31
+ try {
32
+ app(WebLoginAction::class)->run($request);
33
+ } catch (Exception $e) {
34
+ return redirect()->route(RouteServiceProvider::LOGIN)->with('login', $e->getMessage());
35
+ }
36
+
37
+ return redirect()->intended();
38
+ }
39
+ }
@@ -0,0 +1,25 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\WEB\Controllers;
4
+
5
+ use App\Containers\AppSection\Authentication\Actions\WebLogoutAction;
6
+ use App\Containers\AppSection\Authentication\UI\WEB\Requests\LogoutRequest;
7
+ use App\Ship\Parents\Controllers\WebController;
8
+ use App\Ship\Providers\RouteServiceProvider;
9
+ use Illuminate\Contracts\Foundation\Application;
10
+ use Illuminate\Http\RedirectResponse;
11
+ use Illuminate\Routing\Redirector;
12
+
13
+ class LogoutController extends WebController
14
+ {
15
+ /**
16
+ * @param LogoutRequest $request
17
+ * @return Redirector|Application|RedirectResponse
18
+ */
19
+ public function logout(LogoutRequest $request): Redirector|Application|RedirectResponse
20
+ {
21
+ app(WebLogoutAction::class)->run();
22
+
23
+ return redirect()->route(RouteServiceProvider::HOME);
24
+ }
25
+ }
@@ -0,0 +1,54 @@
1
+ <?php
2
+
3
+ namespace App\Containers\AppSection\Authentication\UI\WEB\Requests;
4
+
5
+ use App\Containers\AppSection\Authentication\Classes\LoginCustomAttribute;
6
+ use App\Ship\Parents\Requests\Request as ParentRequest;
7
+
8
+ class LoginRequest extends ParentRequest
9
+ {
10
+ /**
11
+ * Define which Roles and/or Permissions has access to this request.
12
+ */
13
+ protected array $access = [
14
+ 'permissions' => null,
15
+ 'roles' => null,
16
+ ];
17
+
18
+ /**
19
+ * Id's that needs decoding before applying the validation rules.
20
+ */
21
+ protected array $decode = [
22
+
23
+ ];
24
+
25
+ /**
26
+ * Defining the URL parameters (`/stores/999/items`) allows applying
27
+ * validation rules on them and allows accessing them like request data.
28
+ */
29
+ protected array $urlParameters = [
30
+
31
+ ];
32
+
33
+ /**
34
+ * Get the validation rules that apply to the request.
35
+ */
36
+ public function rules(): array
37
+ {
38
+ $rules = [
39
+ 'password' => 'required|min:3|max:30',
40
+ ];
41
+
42
+ return LoginCustomAttribute::mergeValidationRules($rules);
43
+ }
44
+
45
+ /**
46
+ * Determine if the user is authorized to make this request.
47
+ */
48
+ public function authorize(): bool
49
+ {
50
+ return $this->check([
51
+ 'hasAccess',
52
+ ]);
53
+ }
54
+ }