├── php ├── vendor │ └── .gitignore ├── composer.json ├── index.php ├── README.md └── composer.lock ├── .gitignore ├── python ├── venv │ └── .gitignore ├── requirements.txt ├── app.py ├── db.py ├── templates │ └── index.html ├── README.md └── static │ └── pure-min.css └── README.md /php/vendor/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.pyc 3 | __pycache__/ 4 | -------------------------------------------------------------------------------- /python/venv/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /python/requirements.txt: -------------------------------------------------------------------------------- 1 | flask 2 | faker 3 | pymysql 4 | -------------------------------------------------------------------------------- /php/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "slim/slim": "4.*", 4 | "slim/psr7": "^1.3" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Containers - Aplicações 2 | 3 | Neste repositório existem os mais diversos exemplos de diferentes aplicações utilizando diferentes linguagens de programação e arquiteturas para o curso gratuito de contêineres da 4Linux. 4 | -------------------------------------------------------------------------------- /php/index.php: -------------------------------------------------------------------------------- 1 | get('/', function (Request $request, Response $response, $args) { 11 | $response->getBody()->write("Hello world!"); 12 | return $response; 13 | }); 14 | 15 | $app->run(); 16 | -------------------------------------------------------------------------------- /python/app.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import pymysql 4 | from db import get_db, close_db 5 | from faker import Faker 6 | from flask import Flask, render_template 7 | 8 | faker = Faker() 9 | 10 | app = Flask(__name__) 11 | app.teardown_appcontext(close_db) # chama close_db a cada fim de execução 12 | 13 | @app.route('/') 14 | def home(): 15 | 16 | con = get_db() 17 | cur = con.cursor(pymysql.cursors.DictCursor) 18 | try: 19 | cur.execute('INSERT INTO usuarios (nome, email) VALUES (%s, %s)', (faker.name(), faker.email())) 20 | except pymysql.err.ProgrammingError as ex: 21 | cur.execute('CREATE TABLE IF NOT EXISTS usuarios (id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(255), email VARCHAR(255))') 22 | 23 | cur.execute('SELECT * FROM usuarios') 24 | usuarios = cur.fetchall() 25 | return render_template('index.html', usuarios=usuarios) 26 | -------------------------------------------------------------------------------- /python/db.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import pymysql 4 | 5 | from os import environ as env 6 | from flask import g 7 | 8 | def get_db(): 9 | '''Obtém a conexão com o banco. 10 | 11 | g é uma variável global do Flask. 12 | Caso nenhuma conexão tenha sido criada até então, uma nova 13 | conexão é criada, guardada em g.db e retornada. 14 | Chamadas subsequentes da mesma requisição utilizarão a conexão 15 | criada anteriormente dentro de g.db.''' 16 | if 'db' not in g: 17 | g.db = pymysql.connect( 18 | host = env['DB_HOST'], 19 | db = env['DB_NAME'], 20 | user = env['DB_USER'], 21 | passwd = env['DB_PASS'], 22 | autocommit = True 23 | ) 24 | return g.db 25 | 26 | def close_db(exception=None): 27 | '''Remove db da variável g e fecha a conexão''' 28 | db = g.pop('db', None) 29 | if db: 30 | db.close() 31 | -------------------------------------------------------------------------------- /python/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lista 5 | 6 | 7 | 8 | 13 | 14 | 15 |
16 |
17 |
18 |

Usuários

19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% for u in usuarios %} 29 | 30 | 31 | 32 | 33 | 34 | {% endfor %} 35 | {% if not usuarios %} 36 | 37 | 38 | 39 | {% endif %} 40 | 41 |
#NomeEmail
{{ u.id }}{{ u.nome }}{{ u.email }}
Recarregue a página para cadastrar o primeiro usuário
42 |
43 |
44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /php/README.md: -------------------------------------------------------------------------------- 1 | # Aplicação em PHP 2 | 3 | Esta aplicação em PHP é um pequeno exemplo utilizando o framework slim. 4 | 5 | Será preciso utilizar um banco de dados PostgreSQL. 6 | 7 | ## Provisionar 8 | 9 | Antes de criar o contêiner, para provisionar a aplicação será necessário criar o banco: 10 | 11 | ```bash 12 | docker container run -d --name postgres -e POSTGRES_USER=container -e POSTGRES_PASSWORD=4linux -e POSTGRES_DB=container -v dados:/var/lib/postgres postgres:alpine 13 | ``` 14 | 15 | A aplicação utiliza as seguintes variáveis de ambiente: 16 | 17 | - `DB_HOST` - O endereço do banco. 18 | - `DB_NAME` - O nome da base de dados existente no banco. 19 | - `DB_USER` - O nome do usuário que irá se conectar ao banco. 20 | - `DB_PASS` - A senha do usuário citado acima. 21 | 22 | Uma vez iniciada, a aplicação cadastrará alguns usuários no banco e fornecerá uma simples página para realizar login, utilize um dos seguintes usuários: 23 | 24 | - paramahansa@yogananda.in - 123 25 | - victor@frankenstein.co.uk - 123 26 | 27 | > **Observação:** Para os exemplos abaixo, o endereço IP do banco foi considerado como 172.17.0.2. 28 | 29 | ### Docker 30 | 31 | ```bash 32 | git clone https://github.com/4linux/containers-apps 33 | cd containers-apps/php 34 | docker container run -dti --name slim -v $PWD:/opt/app -p 8080:8080 alpine sh 35 | 36 | apk add php-pdo php7-pdo_pgsql composer 37 | cd /opt/app 38 | composer install 39 | DB_HOST=172.17.0.2 DB_USER=container DB_PASS=4linux DB_NAME=container php -S 0.0.0.0:8080 40 | ``` 41 | -------------------------------------------------------------------------------- /python/README.md: -------------------------------------------------------------------------------- 1 | # Aplicação em Python 2 | 3 | Esta aplicação em python é um pequeno exemplo utilizando o framework flask. 4 | 5 | Será preciso utilizar um banco de dados compatível com MySQL. 6 | 7 | ## Provisionar 8 | 9 | Abaixo temos duas formas de provisionar a aplicação, a primeira é utilizando o virtualenv, a segunda o docker. Independente da forma, será necessário criar o banco: 10 | 11 | ```bash 12 | docker container run -d --name mariadb -e MYSQL_ROOT_PASSWORD=Abc123_ -e MYSQL_USER=container -e MYSQL_PASSWORD=4linux -e MYSQL_DATABASE=container -v dados:/var/lib/mysql mariadb 13 | ``` 14 | 15 | A aplicação utiliza as seguintes variáveis de ambiente: 16 | 17 | - `DB_HOST` - O endereço do banco. 18 | - `DB_NAME` - O nome da base de dados existente no banco. 19 | - `DB_USER` - O nome do usuário que irá se conectar ao banco. 20 | - `DB_PASS` - A senha do usuário citado acima. 21 | 22 | > **Observação:** Para os exemplos abaixo, o endereço IP do banco foi considerado como 172.17.0.2. 23 | 24 | ### Virtualenv 25 | 26 | Se possuir python em sua máquina, é possível utilizar o pip diretamente: 27 | 28 | ```bash 29 | git clone https://github.com/4linux/containers-apps 30 | cd containers-apps/python 31 | python3 -m venv venv 32 | . venv/bin/activate 33 | pip3 install -r requirements.txt 34 | DB_HOST=172.17.0.2 DB_USER=container DB_PASS=4linux DB_NAME=container flask run 35 | ``` 36 | 37 | ### Docker 38 | 39 | Caso esteja utilizando Docker será necessário criar um volume. Abaixo um exemplo com alpine: 40 | 41 | ```bash 42 | git clone https://github.com/4linux/containers-apps 43 | cd containers-apps/python 44 | docker container run -dti --name flask -v $PWD:/opt/app -p 5000:5000 alpine sh 45 | apk add py3-pip 46 | pip3 install -r requirements.txt 47 | DB_HOST=172.17.0.2 DB_USER=container DB_PASS=4linux DB_NAME=container flask run --host 0.0.0.0 48 | ``` 49 | -------------------------------------------------------------------------------- /python/static/pure-min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | Pure v2.0.3 3 | Copyright 2013 Yahoo! 4 | Licensed under the BSD License. 5 | https://github.com/pure-css/pure/blob/master/LICENSE.md 6 | */ 7 | /*! 8 | normalize.css v | MIT License | git.io/normalize 9 | Copyright (c) Nicolas Gallagher and Jonathan Neal 10 | */ 11 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:rgba(0,0,0,.8);border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;padding:.5em 0}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected>.pure-menu-link,.pure-menu-selected>.pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0} -------------------------------------------------------------------------------- /php/composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "268bcfc3fcc7e9127332121c0446fe10", 8 | "packages": [ 9 | { 10 | "name": "fig/http-message-util", 11 | "version": "1.1.5", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/php-fig/http-message-util.git", 15 | "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", 20 | "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^5.3 || ^7.0 || ^8.0" 25 | }, 26 | "suggest": { 27 | "psr/http-message": "The package containing the PSR-7 interfaces" 28 | }, 29 | "type": "library", 30 | "extra": { 31 | "branch-alias": { 32 | "dev-master": "1.1.x-dev" 33 | } 34 | }, 35 | "autoload": { 36 | "psr-4": { 37 | "Fig\\Http\\Message\\": "src/" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "PHP-FIG", 47 | "homepage": "https://www.php-fig.org/" 48 | } 49 | ], 50 | "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", 51 | "keywords": [ 52 | "http", 53 | "http-message", 54 | "psr", 55 | "psr-7", 56 | "request", 57 | "response" 58 | ], 59 | "time": "2020-11-24T22:02:12+00:00" 60 | }, 61 | { 62 | "name": "nikic/fast-route", 63 | "version": "v1.3.0", 64 | "source": { 65 | "type": "git", 66 | "url": "https://github.com/nikic/FastRoute.git", 67 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812" 68 | }, 69 | "dist": { 70 | "type": "zip", 71 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", 72 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812", 73 | "shasum": "" 74 | }, 75 | "require": { 76 | "php": ">=5.4.0" 77 | }, 78 | "require-dev": { 79 | "phpunit/phpunit": "^4.8.35|~5.7" 80 | }, 81 | "type": "library", 82 | "autoload": { 83 | "psr-4": { 84 | "FastRoute\\": "src/" 85 | }, 86 | "files": [ 87 | "src/functions.php" 88 | ] 89 | }, 90 | "notification-url": "https://packagist.org/downloads/", 91 | "license": [ 92 | "BSD-3-Clause" 93 | ], 94 | "authors": [ 95 | { 96 | "name": "Nikita Popov", 97 | "email": "nikic@php.net" 98 | } 99 | ], 100 | "description": "Fast request router for PHP", 101 | "keywords": [ 102 | "router", 103 | "routing" 104 | ], 105 | "time": "2018-02-13T20:26:39+00:00" 106 | }, 107 | { 108 | "name": "psr/container", 109 | "version": "1.0.0", 110 | "source": { 111 | "type": "git", 112 | "url": "https://github.com/php-fig/container.git", 113 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 114 | }, 115 | "dist": { 116 | "type": "zip", 117 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 118 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 119 | "shasum": "" 120 | }, 121 | "require": { 122 | "php": ">=5.3.0" 123 | }, 124 | "type": "library", 125 | "extra": { 126 | "branch-alias": { 127 | "dev-master": "1.0.x-dev" 128 | } 129 | }, 130 | "autoload": { 131 | "psr-4": { 132 | "Psr\\Container\\": "src/" 133 | } 134 | }, 135 | "notification-url": "https://packagist.org/downloads/", 136 | "license": [ 137 | "MIT" 138 | ], 139 | "authors": [ 140 | { 141 | "name": "PHP-FIG", 142 | "homepage": "http://www.php-fig.org/" 143 | } 144 | ], 145 | "description": "Common Container Interface (PHP FIG PSR-11)", 146 | "homepage": "https://github.com/php-fig/container", 147 | "keywords": [ 148 | "PSR-11", 149 | "container", 150 | "container-interface", 151 | "container-interop", 152 | "psr" 153 | ], 154 | "time": "2017-02-14T16:28:37+00:00" 155 | }, 156 | { 157 | "name": "psr/http-factory", 158 | "version": "1.0.1", 159 | "source": { 160 | "type": "git", 161 | "url": "https://github.com/php-fig/http-factory.git", 162 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" 163 | }, 164 | "dist": { 165 | "type": "zip", 166 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 167 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 168 | "shasum": "" 169 | }, 170 | "require": { 171 | "php": ">=7.0.0", 172 | "psr/http-message": "^1.0" 173 | }, 174 | "type": "library", 175 | "extra": { 176 | "branch-alias": { 177 | "dev-master": "1.0.x-dev" 178 | } 179 | }, 180 | "autoload": { 181 | "psr-4": { 182 | "Psr\\Http\\Message\\": "src/" 183 | } 184 | }, 185 | "notification-url": "https://packagist.org/downloads/", 186 | "license": [ 187 | "MIT" 188 | ], 189 | "authors": [ 190 | { 191 | "name": "PHP-FIG", 192 | "homepage": "http://www.php-fig.org/" 193 | } 194 | ], 195 | "description": "Common interfaces for PSR-7 HTTP message factories", 196 | "keywords": [ 197 | "factory", 198 | "http", 199 | "message", 200 | "psr", 201 | "psr-17", 202 | "psr-7", 203 | "request", 204 | "response" 205 | ], 206 | "time": "2019-04-30T12:38:16+00:00" 207 | }, 208 | { 209 | "name": "psr/http-message", 210 | "version": "1.0.1", 211 | "source": { 212 | "type": "git", 213 | "url": "https://github.com/php-fig/http-message.git", 214 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 215 | }, 216 | "dist": { 217 | "type": "zip", 218 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 219 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 220 | "shasum": "" 221 | }, 222 | "require": { 223 | "php": ">=5.3.0" 224 | }, 225 | "type": "library", 226 | "extra": { 227 | "branch-alias": { 228 | "dev-master": "1.0.x-dev" 229 | } 230 | }, 231 | "autoload": { 232 | "psr-4": { 233 | "Psr\\Http\\Message\\": "src/" 234 | } 235 | }, 236 | "notification-url": "https://packagist.org/downloads/", 237 | "license": [ 238 | "MIT" 239 | ], 240 | "authors": [ 241 | { 242 | "name": "PHP-FIG", 243 | "homepage": "http://www.php-fig.org/" 244 | } 245 | ], 246 | "description": "Common interface for HTTP messages", 247 | "homepage": "https://github.com/php-fig/http-message", 248 | "keywords": [ 249 | "http", 250 | "http-message", 251 | "psr", 252 | "psr-7", 253 | "request", 254 | "response" 255 | ], 256 | "time": "2016-08-06T14:39:51+00:00" 257 | }, 258 | { 259 | "name": "psr/http-server-handler", 260 | "version": "1.0.1", 261 | "source": { 262 | "type": "git", 263 | "url": "https://github.com/php-fig/http-server-handler.git", 264 | "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" 265 | }, 266 | "dist": { 267 | "type": "zip", 268 | "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", 269 | "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", 270 | "shasum": "" 271 | }, 272 | "require": { 273 | "php": ">=7.0", 274 | "psr/http-message": "^1.0" 275 | }, 276 | "type": "library", 277 | "extra": { 278 | "branch-alias": { 279 | "dev-master": "1.0.x-dev" 280 | } 281 | }, 282 | "autoload": { 283 | "psr-4": { 284 | "Psr\\Http\\Server\\": "src/" 285 | } 286 | }, 287 | "notification-url": "https://packagist.org/downloads/", 288 | "license": [ 289 | "MIT" 290 | ], 291 | "authors": [ 292 | { 293 | "name": "PHP-FIG", 294 | "homepage": "http://www.php-fig.org/" 295 | } 296 | ], 297 | "description": "Common interface for HTTP server-side request handler", 298 | "keywords": [ 299 | "handler", 300 | "http", 301 | "http-interop", 302 | "psr", 303 | "psr-15", 304 | "psr-7", 305 | "request", 306 | "response", 307 | "server" 308 | ], 309 | "time": "2018-10-30T16:46:14+00:00" 310 | }, 311 | { 312 | "name": "psr/http-server-middleware", 313 | "version": "1.0.1", 314 | "source": { 315 | "type": "git", 316 | "url": "https://github.com/php-fig/http-server-middleware.git", 317 | "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" 318 | }, 319 | "dist": { 320 | "type": "zip", 321 | "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", 322 | "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", 323 | "shasum": "" 324 | }, 325 | "require": { 326 | "php": ">=7.0", 327 | "psr/http-message": "^1.0", 328 | "psr/http-server-handler": "^1.0" 329 | }, 330 | "type": "library", 331 | "extra": { 332 | "branch-alias": { 333 | "dev-master": "1.0.x-dev" 334 | } 335 | }, 336 | "autoload": { 337 | "psr-4": { 338 | "Psr\\Http\\Server\\": "src/" 339 | } 340 | }, 341 | "notification-url": "https://packagist.org/downloads/", 342 | "license": [ 343 | "MIT" 344 | ], 345 | "authors": [ 346 | { 347 | "name": "PHP-FIG", 348 | "homepage": "http://www.php-fig.org/" 349 | } 350 | ], 351 | "description": "Common interface for HTTP server-side middleware", 352 | "keywords": [ 353 | "http", 354 | "http-interop", 355 | "middleware", 356 | "psr", 357 | "psr-15", 358 | "psr-7", 359 | "request", 360 | "response" 361 | ], 362 | "time": "2018-10-30T17:12:04+00:00" 363 | }, 364 | { 365 | "name": "psr/log", 366 | "version": "1.1.3", 367 | "source": { 368 | "type": "git", 369 | "url": "https://github.com/php-fig/log.git", 370 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" 371 | }, 372 | "dist": { 373 | "type": "zip", 374 | "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", 375 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", 376 | "shasum": "" 377 | }, 378 | "require": { 379 | "php": ">=5.3.0" 380 | }, 381 | "type": "library", 382 | "extra": { 383 | "branch-alias": { 384 | "dev-master": "1.1.x-dev" 385 | } 386 | }, 387 | "autoload": { 388 | "psr-4": { 389 | "Psr\\Log\\": "Psr/Log/" 390 | } 391 | }, 392 | "notification-url": "https://packagist.org/downloads/", 393 | "license": [ 394 | "MIT" 395 | ], 396 | "authors": [ 397 | { 398 | "name": "PHP-FIG", 399 | "homepage": "http://www.php-fig.org/" 400 | } 401 | ], 402 | "description": "Common interface for logging libraries", 403 | "homepage": "https://github.com/php-fig/log", 404 | "keywords": [ 405 | "log", 406 | "psr", 407 | "psr-3" 408 | ], 409 | "time": "2020-03-23T09:12:05+00:00" 410 | }, 411 | { 412 | "name": "ralouphie/getallheaders", 413 | "version": "3.0.3", 414 | "source": { 415 | "type": "git", 416 | "url": "https://github.com/ralouphie/getallheaders.git", 417 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 418 | }, 419 | "dist": { 420 | "type": "zip", 421 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 422 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 423 | "shasum": "" 424 | }, 425 | "require": { 426 | "php": ">=5.6" 427 | }, 428 | "require-dev": { 429 | "php-coveralls/php-coveralls": "^2.1", 430 | "phpunit/phpunit": "^5 || ^6.5" 431 | }, 432 | "type": "library", 433 | "autoload": { 434 | "files": [ 435 | "src/getallheaders.php" 436 | ] 437 | }, 438 | "notification-url": "https://packagist.org/downloads/", 439 | "license": [ 440 | "MIT" 441 | ], 442 | "authors": [ 443 | { 444 | "name": "Ralph Khattar", 445 | "email": "ralph.khattar@gmail.com" 446 | } 447 | ], 448 | "description": "A polyfill for getallheaders.", 449 | "time": "2019-03-08T08:55:37+00:00" 450 | }, 451 | { 452 | "name": "slim/psr7", 453 | "version": "1.3.0", 454 | "source": { 455 | "type": "git", 456 | "url": "https://github.com/slimphp/Slim-Psr7.git", 457 | "reference": "235d2e5a5ee1ad4b97b96870f37f3091b22fffd7" 458 | }, 459 | "dist": { 460 | "type": "zip", 461 | "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/235d2e5a5ee1ad4b97b96870f37f3091b22fffd7", 462 | "reference": "235d2e5a5ee1ad4b97b96870f37f3091b22fffd7", 463 | "shasum": "" 464 | }, 465 | "require": { 466 | "fig/http-message-util": "^1.1.4", 467 | "php": "^7.2 || ^8.0", 468 | "psr/http-factory": "^1.0", 469 | "psr/http-message": "^1.0", 470 | "ralouphie/getallheaders": "^3", 471 | "symfony/polyfill-php80": "^1.18" 472 | }, 473 | "provide": { 474 | "psr/http-factory-implementation": "1.0", 475 | "psr/http-message-implementation": "1.0" 476 | }, 477 | "require-dev": { 478 | "adriansuter/php-autoload-override": "^1.2", 479 | "ext-json": "*", 480 | "http-interop/http-factory-tests": "^0.7.0", 481 | "php-http/psr7-integration-tests": "dev-master", 482 | "phpstan/phpstan": "^0.12", 483 | "phpunit/phpunit": "^8.5 || ^9.3", 484 | "squizlabs/php_codesniffer": "^3.5", 485 | "weirdan/prophecy-shim": "^1.0 || ^2.0.2" 486 | }, 487 | "type": "library", 488 | "autoload": { 489 | "psr-4": { 490 | "Slim\\Psr7\\": "src" 491 | } 492 | }, 493 | "notification-url": "https://packagist.org/downloads/", 494 | "license": [ 495 | "MIT" 496 | ], 497 | "authors": [ 498 | { 499 | "name": "Josh Lockhart", 500 | "email": "hello@joshlockhart.com", 501 | "homepage": "http://joshlockhart.com" 502 | }, 503 | { 504 | "name": "Andrew Smith", 505 | "email": "a.smith@silentworks.co.uk", 506 | "homepage": "http://silentworks.co.uk" 507 | }, 508 | { 509 | "name": "Rob Allen", 510 | "email": "rob@akrabat.com", 511 | "homepage": "http://akrabat.com" 512 | }, 513 | { 514 | "name": "Pierre Berube", 515 | "email": "pierre@lgse.com", 516 | "homepage": "http://www.lgse.com" 517 | } 518 | ], 519 | "description": "Strict PSR-7 implementation", 520 | "homepage": "https://www.slimframework.com", 521 | "keywords": [ 522 | "http", 523 | "psr-7", 524 | "psr7" 525 | ], 526 | "time": "2020-11-28T06:28:46+00:00" 527 | }, 528 | { 529 | "name": "slim/slim", 530 | "version": "4.7.1", 531 | "source": { 532 | "type": "git", 533 | "url": "https://github.com/slimphp/Slim.git", 534 | "reference": "0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f" 535 | }, 536 | "dist": { 537 | "type": "zip", 538 | "url": "https://api.github.com/repos/slimphp/Slim/zipball/0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f", 539 | "reference": "0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f", 540 | "shasum": "" 541 | }, 542 | "require": { 543 | "ext-json": "*", 544 | "nikic/fast-route": "^1.3", 545 | "php": "^7.2 || ^8.0", 546 | "psr/container": "^1.0", 547 | "psr/http-factory": "^1.0", 548 | "psr/http-message": "^1.0", 549 | "psr/http-server-handler": "^1.0", 550 | "psr/http-server-middleware": "^1.0", 551 | "psr/log": "^1.1" 552 | }, 553 | "require-dev": { 554 | "adriansuter/php-autoload-override": "^1.2", 555 | "ext-simplexml": "*", 556 | "guzzlehttp/psr7": "^1.7", 557 | "http-interop/http-factory-guzzle": "^1.0", 558 | "laminas/laminas-diactoros": "^2.4", 559 | "nyholm/psr7": "^1.3", 560 | "nyholm/psr7-server": "^1.0.1", 561 | "phpspec/prophecy": "^1.12", 562 | "phpstan/phpstan": "^0.12.58", 563 | "phpunit/phpunit": "^8.5.13", 564 | "slim/http": "^1.2", 565 | "slim/psr7": "^1.3", 566 | "squizlabs/php_codesniffer": "^3.5", 567 | "weirdan/prophecy-shim": "^1.0 || ^2.0.2" 568 | }, 569 | "suggest": { 570 | "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", 571 | "ext-xml": "Needed to support XML format in BodyParsingMiddleware", 572 | "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", 573 | "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." 574 | }, 575 | "type": "library", 576 | "autoload": { 577 | "psr-4": { 578 | "Slim\\": "Slim" 579 | } 580 | }, 581 | "notification-url": "https://packagist.org/downloads/", 582 | "license": [ 583 | "MIT" 584 | ], 585 | "authors": [ 586 | { 587 | "name": "Josh Lockhart", 588 | "email": "hello@joshlockhart.com", 589 | "homepage": "https://joshlockhart.com" 590 | }, 591 | { 592 | "name": "Andrew Smith", 593 | "email": "a.smith@silentworks.co.uk", 594 | "homepage": "http://silentworks.co.uk" 595 | }, 596 | { 597 | "name": "Rob Allen", 598 | "email": "rob@akrabat.com", 599 | "homepage": "http://akrabat.com" 600 | }, 601 | { 602 | "name": "Pierre Berube", 603 | "email": "pierre@lgse.com", 604 | "homepage": "http://www.lgse.com" 605 | }, 606 | { 607 | "name": "Gabriel Manricks", 608 | "email": "gmanricks@me.com", 609 | "homepage": "http://gabrielmanricks.com" 610 | } 611 | ], 612 | "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", 613 | "homepage": "https://www.slimframework.com", 614 | "keywords": [ 615 | "api", 616 | "framework", 617 | "micro", 618 | "router" 619 | ], 620 | "funding": [ 621 | { 622 | "url": "https://opencollective.com/slimphp", 623 | "type": "open_collective" 624 | }, 625 | { 626 | "url": "https://tidelift.com/funding/github/packagist/slim/slim", 627 | "type": "tidelift" 628 | } 629 | ], 630 | "time": "2020-12-01T19:41:22+00:00" 631 | }, 632 | { 633 | "name": "symfony/polyfill-php80", 634 | "version": "v1.20.0", 635 | "source": { 636 | "type": "git", 637 | "url": "https://github.com/symfony/polyfill-php80.git", 638 | "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" 639 | }, 640 | "dist": { 641 | "type": "zip", 642 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", 643 | "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", 644 | "shasum": "" 645 | }, 646 | "require": { 647 | "php": ">=7.1" 648 | }, 649 | "type": "library", 650 | "extra": { 651 | "branch-alias": { 652 | "dev-main": "1.20-dev" 653 | }, 654 | "thanks": { 655 | "name": "symfony/polyfill", 656 | "url": "https://github.com/symfony/polyfill" 657 | } 658 | }, 659 | "autoload": { 660 | "psr-4": { 661 | "Symfony\\Polyfill\\Php80\\": "" 662 | }, 663 | "files": [ 664 | "bootstrap.php" 665 | ], 666 | "classmap": [ 667 | "Resources/stubs" 668 | ] 669 | }, 670 | "notification-url": "https://packagist.org/downloads/", 671 | "license": [ 672 | "MIT" 673 | ], 674 | "authors": [ 675 | { 676 | "name": "Ion Bazan", 677 | "email": "ion.bazan@gmail.com" 678 | }, 679 | { 680 | "name": "Nicolas Grekas", 681 | "email": "p@tchwork.com" 682 | }, 683 | { 684 | "name": "Symfony Community", 685 | "homepage": "https://symfony.com/contributors" 686 | } 687 | ], 688 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 689 | "homepage": "https://symfony.com", 690 | "keywords": [ 691 | "compatibility", 692 | "polyfill", 693 | "portable", 694 | "shim" 695 | ], 696 | "funding": [ 697 | { 698 | "url": "https://symfony.com/sponsor", 699 | "type": "custom" 700 | }, 701 | { 702 | "url": "https://github.com/fabpot", 703 | "type": "github" 704 | }, 705 | { 706 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 707 | "type": "tidelift" 708 | } 709 | ], 710 | "time": "2020-10-23T14:02:19+00:00" 711 | } 712 | ], 713 | "packages-dev": [], 714 | "aliases": [], 715 | "minimum-stability": "stable", 716 | "stability-flags": [], 717 | "prefer-stable": false, 718 | "prefer-lowest": false, 719 | "platform": [], 720 | "platform-dev": [], 721 | "plugin-api-version": "1.1.0" 722 | } 723 | --------------------------------------------------------------------------------