From b47594b22f8e8293f50317a4e0138000468e97a9 Mon Sep 17 00:00:00 2001 From: Paola Martinez Date: Mon, 12 Feb 2018 13:18:01 -0600 Subject: [PATCH 1/6] Add -Create user- page --- dump/database.sql | 136 ++++++++++++++++-- src/client/pages/create_user/css/styles.css | 105 ++++++++++++++ .../pages/create_user/img/beliveo logo.PNG | Bin 0 -> 46707 bytes src/client/pages/create_user/img/beliveo.jpg | Bin 0 -> 15505 bytes src/client/pages/create_user/index.php | 33 +++++ src/client/pages/create_user/js/functions.js | 44 ++++++ src/server/src/routes/user.php | 33 +++++ wiki/W1_User Stories.md | 40 ------ wiki/W2_Technology Used.md | 5 +- wiki/W3_DB Documentation.md | 24 +++- wiki/img/Software_Development_Process.jpg | Bin 22092 -> 0 bytes wiki/img/login_example.JPG | Bin 13525 -> 0 bytes 12 files changed, 359 insertions(+), 61 deletions(-) create mode 100644 src/client/pages/create_user/css/styles.css create mode 100644 src/client/pages/create_user/img/beliveo logo.PNG create mode 100644 src/client/pages/create_user/img/beliveo.jpg create mode 100644 src/client/pages/create_user/index.php create mode 100644 src/client/pages/create_user/js/functions.js delete mode 100644 wiki/W1_User Stories.md delete mode 100644 wiki/img/Software_Development_Process.jpg delete mode 100644 wiki/img/login_example.JPG diff --git a/dump/database.sql b/dump/database.sql index 5406c69..8975d27 100644 --- a/dump/database.sql +++ b/dump/database.sql @@ -1,8 +1,10 @@ --- MySQL dump 10.13 Distrib 5.7.12, for Win64 (x86_64) +CREATE DATABASE IF NOT EXISTS `bbox_login` /*!40100 DEFAULT CHARACTER SET latin1 */; +USE `bbox_login`; +-- MySQL dump 10.13 Distrib 5.7.17, for macos10.12 (x86_64) -- --- Host: 127.0.0.1 Database: bbox_login +-- Host: localhost Database: bbox_login -- ------------------------------------------------------ --- Server version 5.7.14 +-- Server version 5.6.35 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -24,8 +26,8 @@ DROP TABLE IF EXISTS `bbox_users`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `bbox_users` ( `id_user` int(11) NOT NULL AUTO_INCREMENT, - `user` varchar(45) CHARACTER SET utf8 NOT NULL, - `user_password` varchar(35) CHARACTER SET utf8 NOT NULL DEFAULT '547d8c18df34f1201d78175fa4e0d66eb40', + `user` varchar(45) COLLATE utf8_bin NOT NULL, + `user_password` varchar(35) COLLATE utf8_bin NOT NULL DEFAULT 'f5a5d1e505092b674af2e6fe94ec9341b0b', `is_active` tinyint(4) DEFAULT '1', `is_removed` tinyint(4) DEFAULT '0', `dt_last_activity` datetime DEFAULT NULL, @@ -33,7 +35,7 @@ CREATE TABLE `bbox_users` ( `dt_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_user`), UNIQUE KEY `user_UNIQUE` (`user`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -43,6 +45,34 @@ CREATE TABLE `bbox_users` ( -- -- Dumping routines for database 'bbox_login' -- +/*!50003 DROP FUNCTION IF EXISTS `RANDOM_ID` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8 */ ; +/*!50003 SET character_set_results = utf8 */ ; +/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` FUNCTION `RANDOM_ID`() RETURNS text CHARSET utf8 +BEGIN + SET @numberRandom = FLOOR(10000 * RAND()); + + SET @numberRandom = ( + SELECT + IF(LENGTH(@numberRandom) > 3, + (MID(@numberRandom,1,3)), + @numberRandom + )); + +RETURN @numberRandom; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP FUNCTION IF EXISTS `SPLIT_STR_PARAM` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -51,9 +81,9 @@ CREATE TABLE `bbox_users` ( /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER' */ ; +/*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`skip-grants user`@`skip-grants host` FUNCTION `SPLIT_STR_PARAM`(x TEXT, delim VARCHAR(12),pos INT) RETURNS text CHARSET utf8 +CREATE DEFINER=`root`@`localhost` FUNCTION `SPLIT_STR_PARAM`(x TEXT, delim VARCHAR(12),pos INT) RETURNS text CHARSET utf8 RETURN REPLACE (SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), @@ -63,6 +93,25 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP FUNCTION IF EXISTS `USER_EXIST` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8 */ ; +/*!50003 SET character_set_results = utf8 */ ; +/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` FUNCTION `USER_EXIST`(user TEXT) RETURNS text CHARSET utf8 +BEGIN + RETURN (select COUNT(*) from bbox_login.bbox_users where SUBSTRING_INDEX(bbox_login.bbox_users.user,'.',2) = user); +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; /*!50003 DROP PROCEDURE IF EXISTS `sp_login_user_get` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; @@ -71,9 +120,9 @@ DELIMITER ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER' */ ; +/*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `sp_login_user_get`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) +CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_get`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) BEGIN DECLARE GET_USER INT DEFAULT 2; @@ -82,19 +131,76 @@ CASE WHEN case_type = GET_USER THEN #This case get username and password, check its existence in bbox.users table, if this exist it returns the id_user, otherwise, nothing SET @user = SPLIT_STR_PARAM(data_value,"|-|",1); SET @pass = SPLIT_STR_PARAM(data_value,"|-|",2); - + SELECT id_user INTO @id_user - FROM `bbox_users` + FROM `bbox_users` WHERE user = @user AND user_password = @pass COLLATE utf8_bin; - + SELECT @id_user as uuid, id_employee as id_employee, id_position as id_position, shortName as name FROM bbox_personnel.e_employee where id_user = @id_user LIMIT 1; - + +END CASE; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `sp_login_user_set` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8 */ ; +/*!50003 SET character_set_results = utf8 */ ; +/*!50003 SET collation_connection = utf8_general_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_set`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) +BEGIN + +DECLARE SET_NEW_USER INT DEFAULT 1; + +CASE + WHEN case_type = SET_NEW_USER THEN + SET data_value = LOWER(data_value); + + SET @name = SPLIT_STR_PARAM(data_value,"|-|",1); + SET @middle = SPLIT_STR_PARAM(data_value,"|-|",2); + SET @last_name = SPLIT_STR_PARAM(data_value,"|-|",3); + SET @second_last = SPLIT_STR_PARAM(data_value,"|-|",4); + + IF USER_EXIST(CONCAT(@name,'.',@last_name)) = 0 THEN + SET @shortName = SUBSTRING(CONCAT(@name,'.',@last_name),1,16); + ELSEIF LENGTH(@second_last) && USER_EXIST(CONCAT(@name,'.',@second_last)) = 0 THEN + SET @shortName = SUBSTRING(CONCAT(@name,'.',@second_last),1,16); + ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@name,'.', @middle))= 0 THEN + SET @shortName = SUBSTRING(CONCAT(@name,'.', @middle),1,16); + ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@middle,'.',@last_name)) = 0 THEN + SET @shortName = SUBSTRING(CONCAT(@middle,'.',@last_name),1,16); + ELSEIF LENGTH(@middle) && LENGTH(@second_last) && USER_EXIST(CONCAT(@middle,'.',@second_last)) = 0 THEN + SET @shortName = SUBSTRING(CONCAT(@middle,'.',@second_last),1,16); + ELSE + SET @shortName = SUBSTRING(CONCAT(@name,'.',LEFT(@last_name, LENGTH(@last_name)-2)),1,16); + END IF; + + IF SUBSTRING(@shortName,16) = '.' THEN + SET @shortName = REPLACE(@shortName,'.',''); + END IF; + + SET @user = CONCAT(@shortName, '.',RANDOM_ID()); + + WHILE ((select COUNT(*) from bbox_login.bbox_users where user = @user and is_active = 1)>0) DO + SET @user = CONCAT(@shortName, '.',RANDOM_ID()); + END WHILE; + + INSERT INTO bbox_login.bbox_users(user, id_creator) values(@user, id_modifier); + END CASE; END ;; DELIMITER ; @@ -112,4 +218,4 @@ DELIMITER ; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-02-04 18:00:55 +-- Dump completed on 2018-02-08 15:27:04 diff --git a/src/client/pages/create_user/css/styles.css b/src/client/pages/create_user/css/styles.css new file mode 100644 index 0000000..64fd84a --- /dev/null +++ b/src/client/pages/create_user/css/styles.css @@ -0,0 +1,105 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Verdana; +} + +.contenedor-form { + background: #fff; + width: 100%; + max-width: 500px; + margin: 100px auto; + color: #000000; + border-radius: 5px; + position: relative; +} + +.contenedor-form { + box-shadow: 2px 2px 5px #999; +} + +.form { + padding: 40px; +} + +.contenedor-form h2 { + top: 0; + right: 0; + margin: 0 0 28px 0; + font-size: 20px; + font-weight: 400; + line-height: 1; +} + +.contenedor-form input[type="text"], +.contenedor-form input[type="password"] { + outline: none; + background: #fff; + display: block; + width: 100%; + padding: 10px 15px; + color: #fff; + border: none; + border-radius: 2px; + border-bottom: 4px solid #12bae4; + font-family: Verdana; + font-size: 14px; + font-weight: normal; + margin: 0 0 20px 0; + transition: all .5s ease; + box-shadow: 4px 2px 10px 2px #a5a5a5; +} + +.contenedor-form input[type="text"]:focus, +.contenedor-form input[type="password"]:focus { + border-bottom: 4px solid #7ac943; + } + +.contenedor-form input[type="submit"]{ + background: #7ac943; + color: #fff; + border: none; + width: 100%; + padding: 10px 0; + font-weight: normal; + font-family: Calibri; + letter-spacing: 1px; + font-size: 16px; + cursor: pointer; + transition: all .5s ease; +} +.contenedor-form input[type="submit"]:hover { + background: rgba(0,177,217,0.7); + } + +.contenedor-form .reset-password { + background: #12bae4; + width: 100%; + padding: 15px 0; + text-align: center; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + position: absolute; + bottom: 0; + } + +.contenedor-form .reset-password a { + color: #fff; + text-decoration: none; + font-size: 16px; +} + +.logo-div { + position: relative; +} + +.logo-div img{ + position: absolute; + right: 4px; + top: -26px; + height: 50px; +} diff --git a/src/client/pages/create_user/img/beliveo logo.PNG b/src/client/pages/create_user/img/beliveo logo.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f56881d5f7c98bf5f6ecbbbdd32cc5a479f4d0fd GIT binary patch literal 46707 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 Q`SM?}{r_PNzz9?S4OAC>D*ylh literal 0 HcmV?d00001 diff --git a/src/client/pages/create_user/index.php b/src/client/pages/create_user/index.php new file mode 100644 index 0000000..32b5103 --- /dev/null +++ b/src/client/pages/create_user/index.php @@ -0,0 +1,33 @@ + + + + + + Beliveo bBox - Powered by people + + + + + + +
+

CREATE NEW USER


+
+
+
+
+
+
+
+

+ +
+
+

+ +
+
+
+ + + diff --git a/src/client/pages/create_user/js/functions.js b/src/client/pages/create_user/js/functions.js new file mode 100644 index 0000000..f6e665d --- /dev/null +++ b/src/client/pages/create_user/js/functions.js @@ -0,0 +1,44 @@ +$(document).ready( + function () { + var api_url = "src/server/public"; + + var create_user = function (e) { + var name = $("#txtName").val() + var middle = $("#txtMiddle").val() + var last = $("#txtLastName").val() + var second = $("#txtSecondLast").val(); + var dataJson = JSON.stringify({name: name, middle: middle,last:last,second:second}); + if (name != "" & last != "" ) { + $.ajax({ + type: "POST", + contentType: 'application/json', + url: api_url+"/user/create", + dataType: "json", + data: dataJson, + cache: false, + beforeSend: function () {}, + success: function (data, textStatus, jqXHR) { + var response = eval(data); + var status = response.status.code; + var message = response.status.message; + + if (status == 404) { + console.log(message); + } else { + var cun = response.user.cun; + $("#txtNewUser").val(cun); + }; + }, + error: function (jqXHR, textStatus, errorThrown) { + console.log(errorThrown); + } + }); + } else { + alert("Name and Last name can not be empty"); + console.log("error"); + } + } + + $("#btnCreateUser").click(create_user); + } +); diff --git a/src/server/src/routes/user.php b/src/server/src/routes/user.php index df457c2..e8eaa27 100644 --- a/src/server/src/routes/user.php +++ b/src/server/src/routes/user.php @@ -42,3 +42,36 @@ function ( Request $request, Response $response ) { echo json_encode($response_obj); } ); + +$app->post( + '/user/create', function (Request $request, Response $response) { + $case = 1; + $name = $request->getParam("name"); + $middle = $request->getParam("middle"); + $last = $request->getParam("last"); + $second = $request->getParam("second"); + + $data=join('|-|', array($name, $middle, $last, $second)); + $editor = 100000; + $sql = "CALL sp_login_user_set(:case, :data, :editor)"; + $results = getDBData($sql, $case, $data, $editor); + + $user = new stdClass(); + $status = new stdClass(); + $response_obj = new stdClass(); + + if (count($results) > 0) { + $user->cun = $results[0]->cun; + $status->code = 200; + $status->message = 'User created'; + } else { + $status->code = 404; + $status->message = 'User not created'; + } + + $response_obj->user = $user; + $response_obj->status = $status; + + echo json_encode($response_obj); + } +); diff --git a/wiki/W1_User Stories.md b/wiki/W1_User Stories.md deleted file mode 100644 index 253bb36..0000000 --- a/wiki/W1_User Stories.md +++ /dev/null @@ -1,40 +0,0 @@ - # USER STORY - - - - - - - - - - - - - - - - - - - - - - -
-
User Story
- Create a Login System
User Story id:122017-1Extension or modification:N/A
-
Description
- As a general user of bBox, I need a section to login to the platform with username and password, thus be able to have a security package in bBox and login to plataform.
-
Example
-
-
Fig. 1 bBox login example
-
-
Observations
- 1. For the user to access an application must be logged in, otherwise, please redirect to this application.
- 2. A user database must be generated, and communicate it with the application .
- 3. The sending and receiving of passwords must be encrypted. -
-
Status
- - Accepted -
diff --git a/wiki/W2_Technology Used.md b/wiki/W2_Technology Used.md index b5cab6c..b8fcf11 100644 --- a/wiki/W2_Technology Used.md +++ b/wiki/W2_Technology Used.md @@ -4,16 +4,15 @@ |
Tool
|
Used to
| | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Text Editor** | Text editor of the code to be made ATOM and IDE NetBeans | +| **Text Editor** | Text editor of the code to be made ATOM and Sublime Text | | **CodeSniffer** | Tool that allows to follow good coding practices for the languages.
**Used version:** 3.2.2 by [Squiz](https://github.com/squizlabs/PHP_CodeSniffer) | | **HTML** | Language for the structuring of the web page.
**Version:** from to HTML5. | | **CSS** | Apply styles to pages.
**Version:** from to CSS3. | -| **Hashing** | An encryption method is used for sending, compiling and storing passwords.Used hash:
**pbkdf2** with sha256, own seed, iterations: 100 and length: 35 for user password, from to PHP 5.5.
**base64_encode** encode the password for your shipment, in base 64, from to PHP 4.
**window.btoa** same to base64_encode but in Javascript. | | **Javascript** | Functionality to customer side pages.
**Used version:** ECMAScript 2017. | | **Web Navigator:
Google Chrome** | It allows the visualization of the projects carried out.
**Version:** Ultimate. | | **XAMPP** | Independent web server.
**1. Server API Apache:** from to Apache 2.0 Handler.
**2. Version MySQL:** from to 5.7.
**3. Version PHP:** from to 7.1.0.
| | **NODE.JS** | Provides a server-side execution environment that compiles and executes javascript.
**Version:** from to 8.9 | | **SLIM** | For the creation of web applications and API's.
**Used version:** Slim 3.0 | -| **GITHUB** | Save the general repository and allow download locally to perform tests.
**Used version:** git 2.15. | +| **GITHUB** | Save the general repository and allow download locally to perform tests.
**Used version:** git 2.15.
**Repository link:** https://github.com/SDBLV/beliveo-app-template.git | | **SLACK** | Communication of pending and monitoring of activities. | | **JIRA** | It is used to manage the sprint and planned tasks and it will be able to monitor the development. | diff --git a/wiki/W3_DB Documentation.md b/wiki/W3_DB Documentation.md index ddc2fb7..2df1e15 100644 --- a/wiki/W3_DB Documentation.md +++ b/wiki/W3_DB Documentation.md @@ -11,9 +11,27 @@ ## Stored procedures -|
Name
|
Parameters
|
Description
| -| --------------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| sp_login_user_get | case_type INT
data_value TEXT
id_modifier INT | Obtain data information from the bbox login app tables; has cases to identify the action to be taken | +Each Stored Procedures contains the next parameters: + +| Name | Type | Description | +| --------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| **case_type** |
INT
| Each stored procedures contains 'cases', to identify each action this parameter is used that contains the case number. | +| **data_value** |
TEXT
| Contains all data to process in the SP. | +| **id_modifier** |
INT
| contains the id of the employee who has modified the information. | + +Stored Procedures used: + +#### sp_login_user_get +|
Case
| Id |
Description
|
What's need
|
Return
| +| --------------------- | --- | --------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------ | +| GET_USER | 1 | Search a selected user, if it exists, it return user data | user and password | id_user, id_employee, id_position and shortName of the select user | + +Search for a selected user, if it exists, return user data + +#### sp_login_user_set +|
Case
| Id |
Description
|
What's need
| +| --------------------- | --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| SET_NEW_USER | 1 | Creates a new user with its short name and random number, looks for that it does not exist to insert it in the table, if it exists it continues generating a new user until it is unique. | Not null: Name and Last name. They may not exist: middle name and second last name | ## Functions diff --git a/wiki/img/Software_Development_Process.jpg b/wiki/img/Software_Development_Process.jpg deleted file mode 100644 index fca92d610f9c9235134e6edae7734e23796ddd5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22092 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 N4-g5E9xV3%HvxvS=LY}) diff --git a/wiki/img/login_example.JPG b/wiki/img/login_example.JPG deleted file mode 100644 index 50a4433ec0f250b5bedf0efeeebcabdc9afa6624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13525 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 UhpV+?&+ Date: Wed, 14 Feb 2018 12:07:28 -0600 Subject: [PATCH 2/6] Fix errors --- src/client/pages/create_user/css/styles.css | 105 ------------------ .../pages/create_user/img/beliveo logo.PNG | Bin 46707 -> 0 bytes src/client/pages/create_user/img/beliveo.jpg | Bin 15505 -> 0 bytes src/client/pages/create_user/index.php | 55 +++++---- src/server/src/routes/user.php | 8 +- 5 files changed, 29 insertions(+), 139 deletions(-) delete mode 100644 src/client/pages/create_user/css/styles.css delete mode 100644 src/client/pages/create_user/img/beliveo logo.PNG delete mode 100644 src/client/pages/create_user/img/beliveo.jpg diff --git a/src/client/pages/create_user/css/styles.css b/src/client/pages/create_user/css/styles.css deleted file mode 100644 index 64fd84a..0000000 --- a/src/client/pages/create_user/css/styles.css +++ /dev/null @@ -1,105 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: Verdana; -} - -.contenedor-form { - background: #fff; - width: 100%; - max-width: 500px; - margin: 100px auto; - color: #000000; - border-radius: 5px; - position: relative; -} - -.contenedor-form { - box-shadow: 2px 2px 5px #999; -} - -.form { - padding: 40px; -} - -.contenedor-form h2 { - top: 0; - right: 0; - margin: 0 0 28px 0; - font-size: 20px; - font-weight: 400; - line-height: 1; -} - -.contenedor-form input[type="text"], -.contenedor-form input[type="password"] { - outline: none; - background: #fff; - display: block; - width: 100%; - padding: 10px 15px; - color: #fff; - border: none; - border-radius: 2px; - border-bottom: 4px solid #12bae4; - font-family: Verdana; - font-size: 14px; - font-weight: normal; - margin: 0 0 20px 0; - transition: all .5s ease; - box-shadow: 4px 2px 10px 2px #a5a5a5; -} - -.contenedor-form input[type="text"]:focus, -.contenedor-form input[type="password"]:focus { - border-bottom: 4px solid #7ac943; - } - -.contenedor-form input[type="submit"]{ - background: #7ac943; - color: #fff; - border: none; - width: 100%; - padding: 10px 0; - font-weight: normal; - font-family: Calibri; - letter-spacing: 1px; - font-size: 16px; - cursor: pointer; - transition: all .5s ease; -} -.contenedor-form input[type="submit"]:hover { - background: rgba(0,177,217,0.7); - } - -.contenedor-form .reset-password { - background: #12bae4; - width: 100%; - padding: 15px 0; - text-align: center; - border-bottom-right-radius: 5px; - border-bottom-left-radius: 5px; - position: absolute; - bottom: 0; - } - -.contenedor-form .reset-password a { - color: #fff; - text-decoration: none; - font-size: 16px; -} - -.logo-div { - position: relative; -} - -.logo-div img{ - position: absolute; - right: 4px; - top: -26px; - height: 50px; -} diff --git a/src/client/pages/create_user/img/beliveo logo.PNG b/src/client/pages/create_user/img/beliveo logo.PNG deleted file mode 100644 index f56881d5f7c98bf5f6ecbbbdd32cc5a479f4d0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46707 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 Q`SM?}{r_PNzz9?S4OAC>D*ylh diff --git a/src/client/pages/create_user/index.php b/src/client/pages/create_user/index.php index 32b5103..1c1ab1c 100644 --- a/src/client/pages/create_user/index.php +++ b/src/client/pages/create_user/index.php @@ -1,33 +1,28 @@ - - - - - - Beliveo bBox - Powered by people - - - - - - + + + + Beliveo bBox - Powered by people + + + + + +
+
+

CREATE NEW USER


+
+
+
+
+
+
+

+ +
-

CREATE NEW USER


-
-
-
-
-
-
-
-

- -
-


- -
-
+
- - - +
+
+ diff --git a/src/server/src/routes/user.php b/src/server/src/routes/user.php index e8eaa27..f48b960 100644 --- a/src/server/src/routes/user.php +++ b/src/server/src/routes/user.php @@ -15,7 +15,7 @@ function ( Request $request, Response $response ) { $seed = 'f%uuu%erw9875487ot56.2{dskj-*/-*'; $enc_pass = hash_pbkdf2('sha256', $pass, $seed, $iterations, 35); $data = join('|-|', array( $username, $enc_pass )); - $editor = 100000; + $editor = $_SESSION['id_employee']; $sql = 'CALL sp_login_user_get(:case, :data, :editor)'; $results = getDBData($sql, $case, $data, $editor); @@ -52,7 +52,7 @@ function ( Request $request, Response $response ) { $second = $request->getParam("second"); $data=join('|-|', array($name, $middle, $last, $second)); - $editor = 100000; + $editor = $_SESSION['id_employee']; $sql = "CALL sp_login_user_set(:case, :data, :editor)"; $results = getDBData($sql, $case, $data, $editor); @@ -62,10 +62,10 @@ function ( Request $request, Response $response ) { if (count($results) > 0) { $user->cun = $results[0]->cun; - $status->code = 200; + $status->code = 201; $status->message = 'User created'; } else { - $status->code = 404; + $status->code = 500; $status->message = 'User not created'; } From 96f4de0a270f83da8de089a7e2e9b1ea9f946874 Mon Sep 17 00:00:00 2001 From: Paola Martinez Date: Wed, 14 Feb 2018 12:15:54 -0600 Subject: [PATCH 3/6] Fix errors (delete unnecessary resources, change status code id) --- src/client/pages/create_user/js/functions.js | 74 ++++++++++---------- src/server/src/routes/user.php | 46 ++++++------ 2 files changed, 61 insertions(+), 59 deletions(-) diff --git a/src/client/pages/create_user/js/functions.js b/src/client/pages/create_user/js/functions.js index f6e665d..a0b0df7 100644 --- a/src/client/pages/create_user/js/functions.js +++ b/src/client/pages/create_user/js/functions.js @@ -1,44 +1,46 @@ $(document).ready( function () { - var api_url = "src/server/public"; + var api_url = "src/server/public"; - var create_user = function (e) { - var name = $("#txtName").val() - var middle = $("#txtMiddle").val() - var last = $("#txtLastName").val() - var second = $("#txtSecondLast").val(); - var dataJson = JSON.stringify({name: name, middle: middle,last:last,second:second}); - if (name != "" & last != "" ) { - $.ajax({ - type: "POST", - contentType: 'application/json', - url: api_url+"/user/create", - dataType: "json", - data: dataJson, - cache: false, - beforeSend: function () {}, - success: function (data, textStatus, jqXHR) { - var response = eval(data); - var status = response.status.code; - var message = response.status.message; + var create_user = function (e) { + var name = $("#txtName").val() + var middle = $("#txtMiddle").val() + var last = $("#txtLastName").val() + var second = $("#txtSecondLast").val(); + var dataJson = JSON.stringify({name: name, middle: middle,last:last,second:second}); + if (name != "" & last != "" ) { + $.ajax( + { + type: "POST", + contentType: 'application/json', + url: api_url+"/user/create", + dataType: "json", + data: dataJson, + cache: false, + beforeSend: function () {}, + success: function (data, textStatus, jqXHR) { + var response = eval(data); + var status = response.status.code; + var message = response.status.message; - if (status == 404) { - console.log(message); - } else { - var cun = response.user.cun; - $("#txtNewUser").val(cun); - }; - }, - error: function (jqXHR, textStatus, errorThrown) { - console.log(errorThrown); - } - }); - } else { - alert("Name and Last name can not be empty"); - console.log("error"); + if (status == 404) { + console.log(message); + } else { + var cun = response.user.cun; + $("#txtNewUser").val(cun); + }; + }, + error: function (jqXHR, textStatus, errorThrown) { + console.log(errorThrown); + } + } + ); + } else { + alert("Name and Last name can not be empty"); + console.log("error"); + } } - } - $("#btnCreateUser").click(create_user); + $("#btnCreateUser").click(create_user); } ); diff --git a/src/server/src/routes/user.php b/src/server/src/routes/user.php index f48b960..f95b486 100644 --- a/src/server/src/routes/user.php +++ b/src/server/src/routes/user.php @@ -45,33 +45,33 @@ function ( Request $request, Response $response ) { $app->post( '/user/create', function (Request $request, Response $response) { - $case = 1; - $name = $request->getParam("name"); - $middle = $request->getParam("middle"); - $last = $request->getParam("last"); - $second = $request->getParam("second"); + $case = 1; + $name = $request->getParam("name"); + $middle = $request->getParam("middle"); + $last = $request->getParam("last"); + $second = $request->getParam("second"); - $data=join('|-|', array($name, $middle, $last, $second)); - $editor = $_SESSION['id_employee']; - $sql = "CALL sp_login_user_set(:case, :data, :editor)"; - $results = getDBData($sql, $case, $data, $editor); + $data=join('|-|', array($name, $middle, $last, $second)); + $editor = $_SESSION['id_employee']; + $sql = "CALL sp_login_user_set(:case, :data, :editor)"; + $results = getDBData($sql, $case, $data, $editor); - $user = new stdClass(); - $status = new stdClass(); - $response_obj = new stdClass(); + $user = new stdClass(); + $status = new stdClass(); + $response_obj = new stdClass(); - if (count($results) > 0) { - $user->cun = $results[0]->cun; - $status->code = 201; - $status->message = 'User created'; - } else { - $status->code = 500; - $status->message = 'User not created'; - } + if (count($results) > 0) { + $user->cun = $results[0]->cun; + $status->code = 201; + $status->message = 'User created'; + } else { + $status->code = 500; + $status->message = 'User not created'; + } - $response_obj->user = $user; - $response_obj->status = $status; + $response_obj->user = $user; + $response_obj->status = $status; - echo json_encode($response_obj); + echo json_encode($response_obj); } ); From c3864d6189ed5b9c328a96a0dbc7f86038a5e250 Mon Sep 17 00:00:00 2001 From: Paola Martinez Date: Wed, 14 Feb 2018 13:49:10 -0600 Subject: [PATCH 4/6] Fix errors (change structure of the code id http) --- dump/database.sql | 177 +++++++++---------- src/client/pages/create_user/js/functions.js | 23 ++- src/server/src/routes/user.php | 20 ++- 3 files changed, 116 insertions(+), 104 deletions(-) diff --git a/dump/database.sql b/dump/database.sql index 8535ab1..4b8a5c2 100644 --- a/dump/database.sql +++ b/dump/database.sql @@ -1,10 +1,8 @@ -CREATE DATABASE IF NOT EXISTS `bbox_login` /*!40100 DEFAULT CHARACTER SET latin1 */; -USE `bbox_login`; --- MySQL dump 10.13 Distrib 5.7.17, for macos10.12 (x86_64) +-- MySQL dump 10.13 Distrib 5.7.12, for Win64 (x86_64) -- --- Host: localhost Database: bbox_login +-- Host: 127.0.0.1 Database: bbox_login -- ------------------------------------------------------ --- Server version 5.6.35 +-- Server version 5.5.5-10.1.29-MariaDB /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -33,9 +31,11 @@ CREATE TABLE `bbox_users` ( `dt_last_activity` datetime DEFAULT NULL, `id_creator` int(11) NOT NULL DEFAULT '0', `dt_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `id_modifier` int(11) DEFAULT NULL, + `dt_last_modifier` datetime DEFAULT NULL, PRIMARY KEY (`id_user`), UNIQUE KEY `user_UNIQUE` (`user`) -) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -55,18 +55,21 @@ CREATE TABLE `bbox_users` ( /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` FUNCTION `RANDOM_ID`() RETURNS text CHARSET utf8 +CREATE DEFINER=`root`@`localhost` FUNCTION `RANDOM_ID`(case_type INT, data_value TEXT) RETURNS int(11) BEGIN - SET @numberRandom = FLOOR(10000 * RAND()); - - SET @numberRandom = ( - SELECT - IF(LENGTH(@numberRandom) > 3, - (MID(@numberRandom,1,3)), - @numberRandom - )); + DECLARE RANDOM_USER INT DEFAULT 1; + DECLARE SHORT_LAST_NAME INT DEFAULT 2; -RETURN @numberRandom; + CASE + WHEN case_type = RANDOM_USER THEN + RETURN MID(FLOOR(10000 * RAND()),1,3); + WHEN case_type = SHORT_LAST_NAME THEN + SET @number_random = FLOOR(10 * RAND()) + 1; + WHILE (@number_random < 2 OR @number_random >= LENGTH(data_value)) DO + SET @number_random = SUBSTRING(FLOOR(100 * RAND()),1); + END WHILE; + RETURN @number_random; + END CASE; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -93,7 +96,7 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 DROP FUNCTION IF EXISTS `USER_EXIST` */; +/*!50003 DROP FUNCTION IF EXISTS `USER_NO_EXIST` */; /*!50003 SET @saved_cs_client = @@character_set_client */ ; /*!50003 SET @saved_cs_results = @@character_set_results */ ; /*!50003 SET @saved_col_connection = @@collation_connection */ ; @@ -101,11 +104,15 @@ DELIMITER ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` FUNCTION `USER_EXIST`(user TEXT) RETURNS text CHARSET utf8 +CREATE DEFINER=`root`@`localhost` FUNCTION `USER_NO_EXIST`(user TEXT) RETURNS tinyint(1) BEGIN - RETURN (select COUNT(*) from bbox_login.bbox_users where SUBSTRING_INDEX(bbox_login.bbox_users.user,'.',2) = user); + IF (SELECT COUNT(*) FROM bbox_login.bbox_users WHERE SUBSTRING_INDEX(bbox_login.bbox_users.user,'.',2) = user) = 0 THEN + RETURN TRUE; + ELSE + RETURN FALSE; + END IF; END ;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; @@ -159,104 +166,90 @@ DELIMITER ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_set`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) BEGIN -DECLARE SET_NEW_USER INT DEFAULT 1; +DECLARE INSERT_NEW_USER INT DEFAULT 1; +DECLARE MODIFY_USER INT DEFAULT 2; +DECLARE DELETE_USER INT DEFAULT 3; CASE - WHEN case_type = SET_NEW_USER THEN - SET data_value = LOWER(data_value); + WHEN case_type = INSERT_NEW_USER THEN + SET data_value = REPLACE(LOWER(data_value), ' ',''); SET @name = SPLIT_STR_PARAM(data_value,"|-|",1); SET @middle = SPLIT_STR_PARAM(data_value,"|-|",2); SET @last_name = SPLIT_STR_PARAM(data_value,"|-|",3); SET @second_last = SPLIT_STR_PARAM(data_value,"|-|",4); - IF USER_EXIST(CONCAT(@name,'.',@last_name)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.',@last_name),1,16); - ELSEIF LENGTH(@second_last) && USER_EXIST(CONCAT(@name,'.',@second_last)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.',@second_last),1,16); - ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@name,'.', @middle))= 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.', @middle),1,16); - ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@middle,'.',@last_name)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@middle,'.',@last_name),1,16); - ELSEIF LENGTH(@middle) && LENGTH(@second_last) && USER_EXIST(CONCAT(@middle,'.',@second_last)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@middle,'.',@second_last),1,16); + SET @name_last = CONCAT(@name,'.',@last_name); + SET @name_second_last = CONCAT(@name,'.',@second_last); + SET @name_middle = CONCAT(@name,'.', @middle); + SET @middle_last = CONCAT(@middle,'.',@last_name); + SET @middle_second = CONCAT(@middle,'.',@second_last); + SET @name_last_2 = CONCAT(@name,'.',MID(@last_name,1,RANDOM_ID(2,@last_name))); + + IF USER_NO_EXIST(@name_last) THEN + SET @shortName = MID(@name_last,1,16); + ELSEIF LENGTH(@second_last) && USER_NO_EXIST(@name_second_last) THEN + SET @shortName = MID(@name_second_last,1,16); + ELSEIF LENGTH(@middle) && USER_NO_EXIST(@name_middle) THEN + SET @shortName = MID(@name_middle,1,16); + ELSEIF LENGTH(@middle) && USER_NO_EXIST(@middle_last) THEN + SET @shortName = MID(@middle_last,1,16); + ELSEIF LENGTH(@middle) && LENGTH(@second_last) && USER_NO_EXIST(@middle_second) THEN + SET @shortName = MID(@middle_second,1,16); ELSE - SET @shortName = SUBSTRING(CONCAT(@name,'.',LEFT(@last_name, LENGTH(@last_name)-2)),1,16); + SET @shortName = MID(@name_last_2,1,16); END IF; IF SUBSTRING(@shortName,16) = '.' THEN - SET @shortName = REPLACE(@shortName,'.',''); + SET @shortName = TRIM(TRAILING '.' FROM @shortName); END IF; - SET @user = CONCAT(@shortName, '.',RANDOM_ID()); + SET @user = CONCAT(@shortName, '.',RANDOM_ID(1,'')); - WHILE ((select COUNT(*) from bbox_login.bbox_users where user = @user and is_active = 1)>0) DO + WHILE ((SELECT COUNT(*) FROM bbox_login.bbox_users WHERE user = @user AND is_active = 1)>0) DO SET @user = CONCAT(@shortName, '.',RANDOM_ID()); END WHILE; - INSERT INTO bbox_login.bbox_users(user, id_creator) values(@user, id_modifier); - -END CASE; -END ;; -DELIMITER ; -/*!50003 SET sql_mode = @saved_sql_mode */ ; -/*!50003 SET character_set_client = @saved_cs_client */ ; -/*!50003 SET character_set_results = @saved_cs_results */ ; -/*!50003 SET collation_connection = @saved_col_connection */ ; -/*!50003 DROP PROCEDURE IF EXISTS `sp_login_user_set` */; -/*!50003 SET @saved_cs_client = @@character_set_client */ ; -/*!50003 SET @saved_cs_results = @@character_set_results */ ; -/*!50003 SET @saved_col_connection = @@collation_connection */ ; -/*!50003 SET character_set_client = utf8 */ ; -/*!50003 SET character_set_results = utf8 */ ; -/*!50003 SET collation_connection = utf8_general_ci */ ; -/*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ; -DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_set`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) -BEGIN + INSERT INTO bbox_login.bbox_users + (user, + id_creator, + id_modifier, + dt_last_modifier) + VALUES + (@user, + id_modifier, + id_modifier, + NOW()); -DECLARE SET_NEW_USER INT DEFAULT 1; + SELECT user + FROM bbox_login.bbox_users + WHERE user = @user; -CASE - WHEN case_type = SET_NEW_USER THEN - SET data_value = LOWER(data_value); + WHEN case_type = MODIFY_USER THEN + SET @user_id = SPLIT_STR_PARAM(data_value,"|-|",1); + SET @new_password = SPLIT_STR_PARAM(data_value,"|-|",2); - SET @name = SPLIT_STR_PARAM(data_value,"|-|",1); - SET @middle = SPLIT_STR_PARAM(data_value,"|-|",2); - SET @last_name = SPLIT_STR_PARAM(data_value,"|-|",3); - SET @second_last = SPLIT_STR_PARAM(data_value,"|-|",4); + UPDATE bbox_login.bbox_users + SET + user_password = @new_password, + id_modifier = id_modifier, + dt_last_modifier =NOW() + WHERE id_user = @user_id; - IF USER_EXIST(CONCAT(@name,'.',@last_name)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.',@last_name),1,16); - ELSEIF LENGTH(@second_last) && USER_EXIST(CONCAT(@name,'.',@second_last)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.',@second_last),1,16); - ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@name,'.', @middle))= 0 THEN - SET @shortName = SUBSTRING(CONCAT(@name,'.', @middle),1,16); - ELSEIF LENGTH(@middle) && USER_EXIST(CONCAT(@middle,'.',@last_name)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@middle,'.',@last_name),1,16); - ELSEIF LENGTH(@middle) && LENGTH(@second_last) && USER_EXIST(CONCAT(@middle,'.',@second_last)) = 0 THEN - SET @shortName = SUBSTRING(CONCAT(@middle,'.',@second_last),1,16); - ELSE - SET @shortName = SUBSTRING(CONCAT(@name,'.',LEFT(@last_name, LENGTH(@last_name)-2)),1,16); - END IF; - - IF SUBSTRING(@shortName,16) = '.' THEN - SET @shortName = REPLACE(@shortName,'.',''); - END IF; - - SET @user = CONCAT(@shortName, '.',RANDOM_ID()); - - WHILE ((select COUNT(*) from bbox_login.bbox_users where user = @user and is_active = 1)>0) DO - SET @user = CONCAT(@shortName, '.',RANDOM_ID()); - END WHILE; + WHEN case_type = DELETE_USER THEN + SET @user_id = SPLIT_STR_PARAM(data_value,"|-|",1); - INSERT INTO bbox_login.bbox_users(user, id_creator) values(@user, id_modifier); + UPDATE bbox_login.bbox_users + SET + is_active = 0, + id_modifier = id_modifier, + dt_last_modifier = NOW() + WHERE id_user = @user_id; END CASE; END ;; @@ -275,4 +268,4 @@ DELIMITER ; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-02-08 15:27:04 +-- Dump completed on 2018-02-14 13:45:48 diff --git a/src/client/pages/create_user/js/functions.js b/src/client/pages/create_user/js/functions.js index a0b0df7..53ea208 100644 --- a/src/client/pages/create_user/js/functions.js +++ b/src/client/pages/create_user/js/functions.js @@ -20,15 +20,25 @@ $(document).ready( beforeSend: function () {}, success: function (data, textStatus, jqXHR) { var response = eval(data); - var status = response.status.code; + var code = response.status.code; var message = response.status.message; + var message_console = response.status.message_console; - if (status == 404) { - console.log(message); - } else { - var cun = response.user.cun; + switch (code) { + case 201: + var cun = response.user.user; $("#txtNewUser").val(cun); - }; + break; + case 500: + alert(message); + break; + case 504: + alert(message); + console.log(message_console); + break; + default: + console.log(message_console); + } }, error: function (jqXHR, textStatus, errorThrown) { console.log(errorThrown); @@ -37,7 +47,6 @@ $(document).ready( ); } else { alert("Name and Last name can not be empty"); - console.log("error"); } } diff --git a/src/server/src/routes/user.php b/src/server/src/routes/user.php index f95b486..3442517 100644 --- a/src/server/src/routes/user.php +++ b/src/server/src/routes/user.php @@ -60,13 +60,23 @@ function ( Request $request, Response $response ) { $status = new stdClass(); $response_obj = new stdClass(); - if (count($results) > 0) { - $user->cun = $results[0]->cun; + $count_results = count($results); + + switch ($count_results) { + case 0: + $status->code = 500; + $status->message = 'Server error, user not created'; + break; + case 1: + $user->user = $results[0]->user; $status->code = 201; $status->message = 'User created'; - } else { - $status->code = 500; - $status->message = 'User not created'; + break; + default: + $status->code = 504; + $status->message = 'Gateway timeout, user not created'; + $status->message_console = $results[0] ->cun; + break; } $response_obj->user = $user; From 6caef00b4f396c49e73a44f80e4dd4faf4f9a990 Mon Sep 17 00:00:00 2001 From: Paola Martinez Date: Wed, 14 Feb 2018 13:52:55 -0600 Subject: [PATCH 5/6] Fix errores (delete unnecessary resources and change status -code id-) --- src/client/pages/create_user/js/functions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/pages/create_user/js/functions.js b/src/client/pages/create_user/js/functions.js index 53ea208..dd10289 100644 --- a/src/client/pages/create_user/js/functions.js +++ b/src/client/pages/create_user/js/functions.js @@ -25,18 +25,18 @@ $(document).ready( var message_console = response.status.message_console; switch (code) { - case 201: + case 201: var cun = response.user.user; $("#txtNewUser").val(cun); break; - case 500: + case 500: alert(message); break; - case 504: + case 504: alert(message); console.log(message_console); break; - default: + default: console.log(message_console); } }, From 83e6bd9c4e154d9810862b74141442ba5e168ba2 Mon Sep 17 00:00:00 2001 From: Paola Martinez Date: Sun, 25 Feb 2018 17:17:26 -0600 Subject: [PATCH 6/6] delete a status code unnecessary --- .gitignore | 7 +++---- config/environment.php | 12 ++++++++++++ dump/database.sql | 14 ++++++++------ package.json | 1 + src/client/index.php | 6 +++++- .../pages/{create_user => create-user}/index.php | 2 +- .../{create_user => create-user}/js/functions.js | 3 --- src/client/pages/login/css/styles.css | 2 +- src/server/src/routes/user.php | 15 +++++---------- 9 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 config/environment.php rename src/client/pages/{create_user => create-user}/index.php (94%) rename src/client/pages/{create_user => create-user}/js/functions.js (94%) diff --git a/.gitignore b/.gitignore index 34095ba..db84080 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ .env -/node_modules +node_modules package-lock.json .DS_Store -/vendor +vendor composer.lock -/config/environment.php -/nbproject +nbproject diff --git a/config/environment.php b/config/environment.php new file mode 100644 index 0000000..cbc3f72 --- /dev/null +++ b/config/environment.php @@ -0,0 +1,12 @@ + diff --git a/dump/database.sql b/dump/database.sql index 4b8a5c2..9574c32 100644 --- a/dump/database.sql +++ b/dump/database.sql @@ -1,4 +1,6 @@ --- MySQL dump 10.13 Distrib 5.7.12, for Win64 (x86_64) +CREATE DATABASE IF NOT EXISTS `bbox_login` /*!40100 DEFAULT CHARACTER SET latin1 */; +USE `bbox_login`; +-- MySQL dump 10.13 Distrib 5.7.17, for macos10.12 (x86_64) -- -- Host: 127.0.0.1 Database: bbox_login -- ------------------------------------------------------ @@ -55,7 +57,7 @@ CREATE TABLE `bbox_users` ( /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` FUNCTION `RANDOM_ID`(case_type INT, data_value TEXT) RETURNS int(11) +CREATE FUNCTION `RANDOM_ID`(case_type INT, data_value TEXT) RETURNS int(11) BEGIN DECLARE RANDOM_USER INT DEFAULT 1; DECLARE SHORT_LAST_NAME INT DEFAULT 2; @@ -86,7 +88,7 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` FUNCTION `SPLIT_STR_PARAM`(x TEXT, delim VARCHAR(12),pos INT) RETURNS text CHARSET utf8 +CREATE FUNCTION `SPLIT_STR_PARAM`(x TEXT, delim VARCHAR(12),pos INT) RETURNS text CHARSET utf8 RETURN REPLACE (SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), @@ -106,7 +108,7 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` FUNCTION `USER_NO_EXIST`(user TEXT) RETURNS tinyint(1) +CREATE FUNCTION `USER_NO_EXIST`(user TEXT) RETURNS tinyint(1) BEGIN IF (SELECT COUNT(*) FROM bbox_login.bbox_users WHERE SUBSTRING_INDEX(bbox_login.bbox_users.user,'.',2) = user) = 0 THEN RETURN TRUE; @@ -129,7 +131,7 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_get`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) +CREATE PROCEDURE `sp_login_user_get`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) BEGIN DECLARE GET_USER INT DEFAULT 2; @@ -168,7 +170,7 @@ DELIMITER ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; /*!50003 SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; -CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login_user_set`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) +CREATE PROCEDURE `sp_login_user_set`(IN case_type INT, IN data_value TEXT, IN id_modifier INT) BEGIN DECLARE INSERT_NEW_USER INT DEFAULT 1; diff --git a/package.json b/package.json index 729d73d..a91a5d9 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "beliveo-files": "git+https://github.com/SDBLV/beliveo-files.git", + "bootstrap": "^4.0.0", "font-awesome": "4.7.0", "jquery": "^3.2.1" }, diff --git a/src/client/index.php b/src/client/index.php index e3c998c..00e4476 100644 --- a/src/client/index.php +++ b/src/client/index.php @@ -3,6 +3,8 @@ Beliveo Authentication + + @@ -13,7 +15,8 @@ require '../../config/environment.php'; ?> -
+
+
+
diff --git a/src/client/pages/create_user/index.php b/src/client/pages/create-user/index.php similarity index 94% rename from src/client/pages/create_user/index.php rename to src/client/pages/create-user/index.php index 1c1ab1c..f3ffd83 100644 --- a/src/client/pages/create_user/index.php +++ b/src/client/pages/create-user/index.php @@ -25,4 +25,4 @@
- + diff --git a/src/client/pages/create_user/js/functions.js b/src/client/pages/create-user/js/functions.js similarity index 94% rename from src/client/pages/create_user/js/functions.js rename to src/client/pages/create-user/js/functions.js index dd10289..664d3fc 100644 --- a/src/client/pages/create_user/js/functions.js +++ b/src/client/pages/create-user/js/functions.js @@ -30,9 +30,6 @@ $(document).ready( $("#txtNewUser").val(cun); break; case 500: - alert(message); - break; - case 504: alert(message); console.log(message_console); break; diff --git a/src/client/pages/login/css/styles.css b/src/client/pages/login/css/styles.css index 4b12a68..99af53f 100644 --- a/src/client/pages/login/css/styles.css +++ b/src/client/pages/login/css/styles.css @@ -26,7 +26,7 @@ outline: none; background: #fff; display: block; - width: calc(100% - 30px); + width: calc(100%); padding: 10px 15px; border: none; border-radius: 2px; diff --git a/src/server/src/routes/user.php b/src/server/src/routes/user.php index 3442517..a9c780a 100644 --- a/src/server/src/routes/user.php +++ b/src/server/src/routes/user.php @@ -15,7 +15,7 @@ function ( Request $request, Response $response ) { $seed = 'f%uuu%erw9875487ot56.2{dskj-*/-*'; $enc_pass = hash_pbkdf2('sha256', $pass, $seed, $iterations, 35); $data = join('|-|', array( $username, $enc_pass )); - $editor = $_SESSION['id_employee']; + $editor = 100000; $sql = 'CALL sp_login_user_get(:case, :data, :editor)'; $results = getDBData($sql, $case, $data, $editor); @@ -63,19 +63,14 @@ function ( Request $request, Response $response ) { $count_results = count($results); switch ($count_results) { - case 0: - $status->code = 500; - $status->message = 'Server error, user not created'; - break; - case 1: + case 1: $user->user = $results[0]->user; $status->code = 201; $status->message = 'User created'; break; - default: - $status->code = 504; - $status->message = 'Gateway timeout, user not created'; - $status->message_console = $results[0] ->cun; + default: + $status->code = 500; + $status->message = 'Server error, user not created'; break; }