This repo still under development
- 
Drogon Framework First is required to have an instalation of drogon with the mysql/mariadb connector available. Check the installation wiki to get details. 
❯ drogon_ctl --version
     _
  __| |_ __ ___   __ _  ___  _ __
 / _` | '__/ _ \ / _` |/ _ \| '_ \
| (_| | | | (_) | (_| | (_) | | | |
 \__,_|_|  \___/ \__, |\___/|_| |_|
                 |___/
A utility for drogon
Version: 1.9.2
Git commit: baea2dce47172e7aaab67b20e6a4887a1f6464cf
Compilation: 
  Compiler: c++
  Compiler ID: GNU
  Compilation flags: -std=c++17 -I/usr/include -I/usr/local/include
Libraries: 
  postgresql: yes  (pipeline mode: yes)
  mariadb: yes
  sqlite3: yes
  ssl/tls backend: OpenSSL
  brotli: yes
  hiredis: no
  c-ares: yes
  yaml-cpp: no
- 
Database setup In this example I used mariadb running in the machine. To work this you need to create an user in the mariadb for the application with permission to use a database and tables. 
dbuser: drogon
dbpassword: drogon
dbname: drogondb
dbtable: user in drogondb databaseThis database settings should be in the config.json in the project root and in the model.json inside models folder. The model.json is used by drogon to create a header and source file based on each table in the database with this command (executed from the project root folder where is the models folder):
drogon_ctl create model modelsIn this case, the files are allready generated. If you want to test this, to create the table for the user model I used this:
CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT,first_name VARCHAR(30) NOT NULL, last_name VARCHAR(30) NOT NULL, username VARCHAR(20) NOT NULL, password BINARY(60) NOT NULL, PRIMARY KEY(id));Then run the command to create the models and you should have the files created.
- 
Compile the project Just compile with cmake 
mkdir build
cd build
cmake ..
makeYour should have the executable ready to run with ./drogon-auth-sample.
This example expose the login api for authentication. This return a session cookie for authorized endpoints. (Not implemented here). This example just compare the password strings just for demostration. This require BCrypt real comparation.
-> Login URL: localhost:8080/api/v1/auth/login
-> Body(raw/json)
{"username":"myusername","password":"samePasswordInDb"}The second endpoint exposed is for user creation. This return the json object of the new user created in case of a correct request. The body require names, username and passwords like this:
-> Login URL: localhost:8080/api/v1/auth/signup
-> Body(raw/json)
{"first_name":"myname", "last_name":"mylastname","username":"myusername","password":"verystrongpassword:)"}The controller validate if the username already exist and throw an exception in case of that. Also catch a bad json format.
- Implemen BCrypt for a real login password validation.
- Implement logoutandchange-password
- Fields validation in all endpoints