AuthController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <?php
  2. namespace app\controllers;
  3. use app\models\entity\Companies;
  4. use Yii;
  5. use app\models\entity\Accounts;
  6. use app\models\entity\FaceFeature;
  7. use yii\web\UnauthorizedHttpException;
  8. class AuthController extends MainController
  9. {
  10. public function beforeAction($action)
  11. {
  12. parent::beforeAction($action);
  13. $key = Yii::$app->request->headers->get('uuid-key');
  14. $this->checkAuth($key);
  15. \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
  16. return true;
  17. }
  18. //todo: Перенести на corp
  19. public function actionLogin()
  20. {
  21. $return = [];
  22. $accountsEntity = Accounts::find()->all();
  23. /** @var Accounts $acc */
  24. foreach($accountsEntity as $acc) {
  25. if (null == $acc->faceFeature->face_feature) {
  26. continue;
  27. }
  28. $return[] = ['id' =>$acc->id ,'face_feature'=> $acc->faceFeature->face_feature];
  29. }
  30. return $return;
  31. }
  32. public function actionRegistration()
  33. {
  34. $post = Yii::$app->request->post();
  35. $accountsEntity = Accounts::findOne([
  36. 'login' => $post['login'],
  37. 'password' => md5($post['password'])
  38. ]);
  39. $this->log($_POST);
  40. if (null == $accountsEntity) return "Авторизация не пройдена";
  41. $this->createFaceFeature($accountsEntity->id, $post['face_feature'], $post['token_device']);
  42. return $accountsEntity->id;
  43. }
  44. public function actionRegistrationid()
  45. {
  46. $post = Yii::$app->request->post();
  47. $accountsEntity = Accounts::findOne([
  48. 'id' => $post['id']
  49. ]);
  50. if (null == $accountsEntity) return "Авторизация не пройдена";
  51. $this->createFaceFeature($accountsEntity->id, $post['face_feature'], $post['token_device']);
  52. return $accountsEntity->id;
  53. }
  54. /**
  55. * Проверяет является ли пользователь администратором
  56. *
  57. * @param $face_feature
  58. * @param $token_device
  59. * @return string
  60. */
  61. public function actionIsadmin()
  62. {
  63. $post = Yii::$app->request->post();
  64. $ff = FaceFeature::findOne([
  65. 'face_feature' => $post['face_feature'],
  66. 'token_device' => $post['token_device']
  67. ]);
  68. $user = Accounts::findOne(['id' => $ff->id_account]);
  69. if ($user->isAdmin()) {
  70. return 'true';
  71. } else {
  72. return 'false';
  73. }
  74. }
  75. /**
  76. * Возвращает информацию по всем пользователям, относящимся к компании пользователся с $login и $pass
  77. *
  78. * @param $login
  79. * @param $pass
  80. * @param $token_device
  81. * @return array
  82. * @throws UnauthorizedHttpException
  83. */
  84. public function actionUsers()
  85. {
  86. $post = Yii::$app->request->post();
  87. $user = Accounts::findOne([
  88. 'login' => $post['login'],
  89. 'password' => md5($post['pass'])
  90. ]);
  91. //uuid используется в beforeAction() надо проверить нужно ли в этой апишке
  92. if (!$user) {
  93. throw new UnauthorizedHttpException('Такого пользователя нет!');
  94. } else {
  95. if ( !$user->isAdmin() ) {
  96. throw new UnauthorizedHttpException('Не достаточно прав.');
  97. }
  98. }
  99. $company = Companies::findOne(['id' => $user->company_id]);
  100. $response = [];
  101. $users = Accounts::findAll(['company' => $company->id]);
  102. foreach ($users as $user) {
  103. $response[$company->name][] = [
  104. 'userId' => $user->id,
  105. 'userName' => $user->name,
  106. 'faceFuture' => $user->getFaceFeature()->one()->face_feature
  107. ];
  108. }
  109. return $response;//$this->asJson()
  110. }
  111. /**
  112. * Возвращает информацию по всем пользователям, сгруппированые по компаниям
  113. *
  114. * @param $login
  115. * @param $pass
  116. * @param $token_device
  117. * @return array
  118. * @throws UnauthorizedHttpException
  119. */
  120. public function actionUsersinfo()
  121. {
  122. $post = Yii::$app->request->post();
  123. $user = Accounts::findOne([
  124. 'login' => $post['login'],
  125. 'password' => md5($post['pass'])
  126. ]);
  127. //uuid используется в beforeAction() надо проверить нужно ли в этой апишке
  128. if (!$user) {
  129. throw new UnauthorizedHttpException('Такого пользователя нет!');
  130. } else {
  131. if ( !$user->isAdmin() ) {
  132. throw new UnauthorizedHttpException('Не достаточно прав.');
  133. }
  134. }
  135. $companyArray = [];
  136. $resultArray = [];
  137. $users = Accounts::find()->all();
  138. foreach ($users as $user) {
  139. $companyArray[$user->companies->name][] = [
  140. 'user_id' => $user->id,
  141. 'user_name' => $user->name,
  142. 'user_ff' => $user->getFaceFeatureCurrent($user->id)['face_feature']//$user->getFaceFeature()->one()->face_feature
  143. ];
  144. }
  145. foreach ($companyArray as $key => $user) {
  146. //var_dump($user);
  147. $resultArray[] = ['company_name' => $key, "persons" => $user ];
  148. }
  149. return $resultArray;//$this->asJson()
  150. }
  151. /**
  152. * Возвращает информацию по всем пользователям, в компании администратора
  153. *
  154. * @param $login
  155. * @param $pass
  156. * @param $token_device
  157. * @return array
  158. * @throws UnauthorizedHttpException
  159. */
  160. public function actionUserinfocompany()
  161. {
  162. $post = Yii::$app->request->post();
  163. $user = Accounts::findOne([
  164. 'login' => $post['login'],
  165. 'password' => md5($post['pass'])
  166. ]);
  167. //uuid используется в beforeAction() надо проверить нужно ли в этой апишке
  168. if (!$user) {
  169. throw new UnauthorizedHttpException('Такого пользователя нет!');
  170. } else {
  171. if ( !$user->isAdmin() ) {
  172. throw new UnauthorizedHttpException('Не достаточно прав.');
  173. }
  174. }
  175. $companyArray = [];
  176. $resultArray = [];
  177. $users = Accounts::find()->where(['company' => $user->company ])->all();
  178. foreach ($users as $user) {
  179. $companyArray[$user->companies->name][] = [
  180. 'user_id' => $user->id,
  181. 'user_name' => $user->name,
  182. 'user_ff' => $user->getFaceFeatureCurrent($user->id)['face_feature']//$user->getFaceFeature()->one()->face_feature
  183. ];
  184. }//die();
  185. foreach ($companyArray as $key => $user) {
  186. $resultArray[] = ['company_name' => $key, "persons" => $user ];
  187. }
  188. return $users;//$resultArray;//$this->asJson()
  189. }
  190. /**
  191. * Добавление ff администратором
  192. *
  193. * @param $login_admin
  194. * @param $$pass_admin
  195. * @param $token_device
  196. * @param $login
  197. * @param $ffstr
  198. * @return array
  199. * @throws UnauthorizedHttpException
  200. */
  201. public function actionAddnewff()
  202. {
  203. $post = Yii::$app->request->post();
  204. $user = Accounts::findOne([
  205. 'login' => $post['login_admin'],
  206. 'password' => md5($post['pass_admin'])
  207. ]);
  208. //uuid используется в beforeAction() надо проверить нужно ли в этой апишке
  209. if (!$user) {
  210. throw new UnauthorizedHttpException('Такого пользователя нет!');
  211. } else {
  212. if ( !$user->isAdmin() ) {
  213. throw new UnauthorizedHttpException('Не достаточно прав.');
  214. }
  215. }
  216. $userObj = Accounts::findOne(['id' => $post['user_id']]);
  217. $companyArray = [];
  218. $faceFeatureEntity = new FaceFeature();
  219. $faceFeatureEntity->face_feature = $post['ffstr'];
  220. $faceFeatureEntity->id_account = $userObj->id;
  221. $faceFeatureEntity->token_device = $post['token_device'];
  222. if($faceFeatureEntity->save() ) {
  223. return ['message' => "Добавление face feature прошло успешно."];
  224. }
  225. return $faceFeatureEntity->errors;//$this->asJson()
  226. }
  227. public function log($post)
  228. {
  229. $file = $_SERVER['DOCUMENT_ROOT'].'/people.txt';
  230. // Открываем файл для получения существующего содержимого
  231. $current = file_get_contents($file);
  232. // Добавляем нового человека в файл
  233. $current .= json_encode($post)."\n";
  234. // Пишем содержимое обратно в файл
  235. $res = file_put_contents($file, $current);
  236. return $res;
  237. }
  238. private function createFaceFeature(int $accountId, string $faceFeature, string $tokenDevice)
  239. {
  240. $faceFeature = new FaceFeature();
  241. $faceFeature->face_feature = $faceFeature;
  242. $faceFeature->token_device = $tokenDevice;
  243. $faceFeature->id_account = $accountId;
  244. $faceFeature->save();
  245. }
  246. }