Compare commits

...

33 Commits

Author SHA1 Message Date
231e7fe2e6 [add] Access config 2018-08-12 01:43:37 +00:00
f820a22a4f [add] Volumes directory 2018-08-12 01:25:11 +00:00
0cdfd21fa2 [mod] Config files moved to a directory 2018-08-12 01:06:40 +00:00
fee3db486f [add] Composer decoupled from prod build 2018-08-12 00:58:12 +00:00
87181696e1 [add] Looks of the dockerfile 2018-08-12 00:49:03 +00:00
8b22c0db9c [add] Composer compileed in multi stagre 2018-08-12 00:38:39 +00:00
18ee0ad333 [add] Downloading composer dependencies 2018-08-10 06:53:13 +00:00
4928481f72 [add] Empty log file with permisions 2018-08-10 03:51:17 +00:00
Jose Pablo Domingo Aramburo Sanchez
2d11218076 [fix] php volume 2018-08-09 13:42:13 -06:00
59a4d6e4a5 Merge pull request #13 from PootisPenserHere/loginFront
Login front
2018-08-09 02:35:11 -06:00
7cf083a612 [add] Simple redirect 2018-08-09 02:33:21 -06:00
d4135188bd [add] Local bootstrap libraries 2018-08-09 02:30:39 -06:00
6d29ac3f23 [add] Error handling in the login 2018-08-09 02:26:16 -06:00
0449f202ef [add] Added wrapper for login method
Also changed the logout endpoint to get
2018-08-09 01:35:44 -06:00
23868b60ee [add] Login functionality 2018-08-09 01:28:36 -06:00
8a2d5b2afa Merge pull request #12 from PootisPenserHere/fixEmployeeTypesReturnsIdAsInt
[mod] Returning id as int
2018-08-08 23:07:37 -06:00
7ceb2aad93 [mod] Returning id as int 2018-08-08 23:06:38 -06:00
3902435690 Merge pull request #11 from PootisPenserHere/adaptingMysqlForOtherPort
Adapting mysql for other port
2018-08-08 21:35:55 -06:00
f16e9fe72c [add] Parametrizing 2018-08-08 16:15:45 -06:00
d2b9163537 [add] Configuring the mysql port 2018-08-08 15:58:55 -06:00
403541580d Merge pull request #10 from PootisPenserHere/dockerizing
Dockerizing
2018-08-08 01:46:39 -06:00
663ea7cc3e [add] Testing the docker build in CI 2018-08-08 07:41:29 +00:00
f93b41f14e [add] Index protection 2018-08-08 07:37:27 +00:00
24f1ce1ed7 [add] Docker ignore for php 2018-08-08 07:32:54 +00:00
b25346e3d5 [add] Database initiated along with container 2018-08-08 07:14:22 +00:00
f2237d9209 [add] Connecting to mysql from pdo 2018-08-08 05:24:02 +00:00
7fc9ca8c75 [add] Mysql container 2018-08-07 19:25:20 -06:00
97fca1d7d3 [add] Docker compose 2018-08-07 17:33:21 -06:00
058e19a49a [add] Apache conf for the docker container 2018-08-07 17:32:32 -06:00
bffeb6e9f4 [add] Dockerfile 2018-08-07 17:31:02 -06:00
9a3e876afe Merge pull request #9 from PootisPenserHere/employeeDataByCode
[add] Emṕloyee data by code
2018-08-06 15:22:05 -06:00
dadea504d0 [add] Emṕloyee data by code 2018-08-06 15:17:31 -06:00
1390427ec0 Merge pull request #8 from PootisPenserHere/listAllEmployees
[add] List of all active employees
2018-08-06 03:51:09 -06:00
27 changed files with 365 additions and 11 deletions

View File

@@ -0,0 +1,5 @@
Dockerfile
README.md
buildspec.yml
CONTRIBUTING.md
docker-compose.yml

2
api-payroll/.htaccess Normal file
View File

@@ -0,0 +1,2 @@
Options -Indexes
Deny from all

52
api-payroll/Dockerfile Normal file
View File

@@ -0,0 +1,52 @@
# Stage 1 - the build process
FROM composer:1.7.1 as build-deps
ENV COMPOSER_ALLOW_SUPERUSER 1
WORKDIR /root
COPY . .
RUN composer install
RUN composer test
# Stage 2 - the production environment
FROM ubuntu:16.04
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install apache2 \
php7.0 \
libapache2-mod-php7.0 \
php7.0-cli \
php7.0-common \
php7.0-mbstring \
php7.0-gd \
php7.0-intl \
php7.0-xml \
php7.0-mysql \
php7.0-mcrypt
# Enable apache mods
RUN a2enmod php7.0
RUN a2enmod rewrite
# Update the PHP.ini file, enable <? ?> tags and quieten logging
RUN sed -i "s/short_open_tag = Off/short_open_tag = On/" /etc/php/7.0/apache2/php.ini
RUN sed -i "s/error_reporting = .*$/error_reporting = E_ERROR | E_WARNING | E_PARSE/" /etc/php/7.0/apache2/php.ini
# Manually set up the apache environment variables
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
WORKDIR /var/www/site
COPY --from=build-deps /root .
RUN touch logs/app.log
RUN chmod 777 logs/app.log
# Update the default apache site
ADD docker/apache-config.conf /etc/apache2/sites-enabled/000-default.conf
# By default start up apache in the foreground
CMD /usr/sbin/apache2ctl -D FOREGROUND

View File

@@ -14,8 +14,9 @@ phases:
- echo Entered the build phase...
- echo Build started on `date`
- composer test
- sudo docker-compose up --build -d
post_build:
commands:
- echo Entered the post_build phase...
- sudo docker-compose down --rmi all -v
- echo Build completed on `date`

View File

@@ -0,0 +1,15 @@
<VirtualHost *:80>
ServerAdmin me@mydomain.com
DocumentRoot /var/www/site
<Directory /var/www/site/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

0
api-payroll/logs/app.log Executable file
View File

View File

@@ -1,3 +1,5 @@
allow from all
<IfModule mod_rewrite.c>
RewriteEngine On

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,81 @@
body {
background: url(../imagenes/grey_background.jpg);
background-size: cover;
font-family: Montserrat;
}
@media only screen and (min-device-width: 480px) {
body {
background: url('../imagenes/grey_background.jpg') no-repeat fixed center center;
}
}
.logo {
width: 213px;
height: 60px;
margin: 30px auto;
}
.login-block {
width: 320px;
padding: 20px;
background: #fff;
border-radius: 5px;
border-top: 5px solid #bdb035;
margin: 0 auto;
}
.login-block h1 {
text-align: center;
color: #000;
font-size: 18px;
text-transform: uppercase;
margin-top: 0;
margin-bottom: 20px;
}
.login-block input {
width: 100%;
height: 42px;
box-sizing: border-box;
border-radius: 5px;
border: 1px solid #ccc;
margin-bottom: 20px;
font-size: 14px;
font-family: Montserrat;
padding: 0 20px 0 50px;
outline: none;
}
.login-block input#user {
background: #fff url('../imagenes/login_username.png') 20px top no-repeat;
background-size: 16px 80px;
}
.login-block input#user:focus {
background: #fff url('../imagenes/login_username.png') 20px bottom no-repeat;
background-size: 16px 80px;
}
.login-block input#password {
background: #fff url('../imagenes/login_password.png') 20px top no-repeat;
background-size: 16px 80px;
}
.login-block input#password:focus {
background: #fff url('../imagenes/login_password.png') 20px bottom no-repeat;
background-size: 16px 80px;
}
.login-block input:active, .login-block input:focus {
border: 1px solid #bdb035;
}
.login-block #loginButon {
width: 100%;
height: 40px;
background: #bdb035;
box-sizing: border-box;
border-radius: 5px;
border: 1px solid #6d661c;
color: #fff;
font-weight: bold;
text-transform: uppercase;
font-size: 14px;
font-family: Montserrat;
outline: none;
cursor: pointer;
}
.login-block button:hover {
background: #c7b935;
border: 1px solid #6d661c;
}

View File

@@ -0,0 +1,44 @@
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="../css/bootstrap.min.css">
<!-- jQuery library -->
<script src="../js/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="../js/bootstrap.min.js"></script>
<link href='http://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
<div class="container">
<div class="logo"></div>
<div class="login-block">
<form action="" method="post" name="Login_Form" class="login">
<h1>Login</h1>
<input type="text" value="" placeholder="User" id="userName" name="user" required="" autofocus=""/>
<input type="password" value="" placeholder="Password" id="password" name="password" required=""/>
<a href="#" class="btn btn-lg btn-warning btn-default" id="loginButon" name="login" value="Login" onclick="processLogin();">Login</a>
</form>
</div>
</div>
<div id="modalLoginError" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header" id="modalLoginErrorHeader">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title"><center>Ha ocurrido un error</center></h4>
</div>
<div class="modal-body">
<p id="modalLoginErrorBody"></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
<script src="../js/login.js"></script>
<link href="../css/login.css" rel="stylesheet">

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

2
api-payroll/public/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,38 @@
function getbaseUrl(uriPath){
var url = window.location.href;
return url.substring(0, url.indexOf(uriPath));
}
function processLogin() {
console.log(getbaseUrl('html/'));
var parametros = {
"userName":$('#userName').val(),
"password":$('#password').val()
};
$.ajax({
url: getbaseUrl('/html/') + '/index.php/api/session/login',
type: 'POST',
dataType: 'json',
data: parametros,
success:function(data){
console.log(JSON.stringify(data));
if(data["status"] == "success"){
redirect("http://stackoverflow.com");
}else if(data["status"] == "success" || (data["status"] === undefined)){
$('#modalLoginError').modal('show');
document.getElementById('modalLoginErrorBody').innerHTML = "The server didn't respond in time, please try again or refresh this page.";
}
},
error:function(x) {
if (x.status==500){
$('#modalLoginError').modal('show');
document.getElementById('modalLoginErrorBody').innerHTML = "The user or password didnt match, please try again";
}
},
});
}
function redirect(url){
window.location.replace(url);
}

View File

@@ -38,7 +38,12 @@ class EmployeeApplication{
}
$stmt = null;
return $results;
$employeeTypes = array();
foreach($results as $row){
$employeeTypes[] = array('id' => (int)$row['id'], 'name' => $row['name']);
}
return $employeeTypes;
}
/**
@@ -269,6 +274,16 @@ class EmployeeApplication{
return $response;
}
/**
* @param $code string
* @return array
*/
function getEmployeeDataByCode($code){
$idEmployee = $this->getIdEmployeeTypeByCode($code);
return $this->proxyGetEmployeeDataById($idEmployee);
}
/**
* @param $idPerson integer
* @param $firstName binary

View File

@@ -69,7 +69,7 @@ class SessionApplication{
// If the credentials don't match anything in the the records
if(!isset($storedPassword)){
throw new Exception('The user or password didnt match, please try again.');
return false;
}
// Already has a session
@@ -82,7 +82,22 @@ class SessionApplication{
return true;
}
else{
return false;
throw new Exception('The user or password didnt match, please try again.');
}
}
/**
* @param $userName
* @param $password
* @return array
* @throws Exception
*/
function login($userName, $password){
if($this->newSession($userName, $password)){
return array('status' => 'success', 'message' => 'Logged in successfully.');
}
else{
throw new Exception('The user or password didnt match, please try again.');
}
}

View File

@@ -24,6 +24,7 @@ $container['mysql'] = function ($c) {
// The database parameters
$host = $mysqlSettings['host'];
$port = $mysqlSettings['port'];
$database = $mysqlSettings['database'];
$user = $mysqlSettings['user'];
$password = $mysqlSettings['password'];
@@ -34,7 +35,7 @@ $container['mysql'] = function ($c) {
$databaseConnectionErrorMessage = $mysqlSettings['databaseConnectionErrorMessage'];
// Initiate the connection
$dsn = "mysql:host=$host;dbname=$database;charset=$charset";
$dsn = "mysql:host=$host;port=$port;dbname=$database;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $password, $pdoConnectionOptions);
} catch (Exception $e) {
@@ -69,4 +70,4 @@ $container['employeeApplication'] = function ($c) {
$employeeApplication = new App\Application\EmployeeApplication($employeeSettings,
$c['mysql'], $c['cryptographyService'], $c['asserts']);
return $employeeApplication;
};
};

View File

@@ -22,14 +22,14 @@ $app->get('/api/session', function (Request $request, Response $response, array
$app->post('/api/session/login', function ($request, $response) {
$requestData = $request->getParsedBody();
$data = $this->sessionApplication->newSession($requestData['userName'], $requestData['password']);
$data = $this->sessionApplication->login($requestData['userName'], $requestData['password']);
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($data));
});
$app->post('/api/session/logout', function (Request $request, Response $response, array $args) {
$app->get('/api/session/logout', function (Request $request, Response $response, array $args) {
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($this->sessionApplication->destroySession()));
@@ -79,10 +79,18 @@ $app->get('/api/employee/type/{code}', function (Request $request, Response $res
->write(json_encode($this->employeeApplication->getIdEmployeeTypeByCode($code)));
});
$app->get('/api/employee/{idEmployee}', function (Request $request, Response $response, array $args) {
$app->get('/api/employee/id/{idEmployee}', function (Request $request, Response $response, array $args) {
$idEmployee = $args['idEmployee'];
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($this->employeeApplication->proxyGetEmployeeDataById($idEmployee)));
});
$app->get('/api/employee/code/{code}', function (Request $request, Response $response, array $args) {
$code = $args['code'];
return $response->withStatus(200)
->withHeader('Content-Type', 'application/json')
->write(json_encode($this->employeeApplication->getEmployeeDataByCode($code)));
});

View File

@@ -26,7 +26,8 @@ return [
// Datanase settings
'mysql' => [
'host' => 'localhost',
'host' => 'mysql',
'port' => '3307',
'database' => 'payroll',
'user' => 'root',
'password' => '12345678',
@@ -43,7 +44,7 @@ return [
// Employee settings
'employee' => [
'codeLength' => '5',
'codeLength' => '3',
],
],
];

1
database/.dockerignore Normal file
View File

@@ -0,0 +1 @@
Dockerfile

7
database/Dockerfile Normal file
View File

@@ -0,0 +1,7 @@
FROM mysql:5.7
# Starting scripts
ADD . /docker-entrypoint-initdb.d
# Config
ADD my.cnf /etc/mysql

20
database/my.cnf Normal file
View File

@@ -0,0 +1,20 @@
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
[mysqld]
port = 3307
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

28
docker-compose.yml Normal file
View File

@@ -0,0 +1,28 @@
version: '3'
services:
api:
container_name: payroll_api
build: api-payroll/
ports:
- "8085:80"
volumes:
- ./volumes/apache-logs:/var/log/apache2
depends_on:
- mysql
mysql:
container_name: payroll_mysql
restart: always
build: database
expose:
- "3307"
ports:
- "3307:3307"
volumes:
- ./volumes/mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: '12345678'
MYSQL_USER: 'sloth'
MYSQL_PASS: '12345678'
volumes:
mysql-data:
apache-logs:

2
volumes/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
mysql-data/
apache-logs/

1
volumes/README.md Normal file
View File

@@ -0,0 +1 @@
# Do not delete this directory, it'll contain the volumes created by the containers