From b9d2bfe3bdf424416b5708d905df36b47b1c5fed Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 12:35:56 +0100 Subject: [PATCH 1/7] Adding build status to README and fix title in npm --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8127cacf..b853489f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # two-factor-auth-server + [![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)][MIT License] +[![Build](https://travis-ci.org/clems4ever/two-factor-auth-server.svg?branch=master)](https://travis-ci.org/clems4ever/two-factor-auth-server) + **two-factor-auth-server** is the simplest to set up HTTP 2-factor authentication server. It is compatible with NGINX auth_request module and is used in production to secure internal services in a swarm cluster. From 885dceb76949f0b1f6fe3d76143d5811878fd5a7 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 12:50:33 +0100 Subject: [PATCH 2/7] Move images into separate directory and add link to http://localhost:8080 --- README.md | 6 ++++-- images/login.png | Bin 0 -> 40454 bytes secret-key.png => images/secret-key.png | Bin 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 images/login.png rename secret-key.png => images/secret-key.png (100%) diff --git a/README.md b/README.md index b853489f..c24d534a 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,9 @@ Before starting, make sure you don't have anything listening on port 8080. Then, docker-compose build docker-compose up -d -After few seconds the services should be running and you should be able to visit: http://localhost:8080/. +After few seconds the services should be running and you should be able to visit [http://localhost:8080/](http://localhost:8080/) and access the login page: + +![login-page](/images/login.png) ### LDAP authentication An LDAP server has been deployed with the following credentials: **admin/password**. @@ -24,7 +26,7 @@ You can use Google Authenticator for the verification of the TOTP token. You can Test secret key: GRWGIJS6IRHVEODVNRCXCOBMJ5AGC6ZE -![secret-key](https://github.com/clems4ever/two-factor-auth-server/raw/master/secret-key.png) +![secret-key](/images/secret-key.png) ## Documentation two-factor-auth-server provides a way to log in using LDAP credentials and TOTP tokens. When the user is logged in, diff --git a/images/login.png b/images/login.png new file mode 100644 index 0000000000000000000000000000000000000000..93d8c2287aa47e2975e2b22a4e9c71c7c97d8583 GIT binary patch literal 40454 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 Kf-Ki@iu@mT)|;0A literal 0 HcmV?d00001 diff --git a/secret-key.png b/images/secret-key.png similarity index 100% rename from secret-key.png rename to images/secret-key.png From 1dbbc9fed93970590851a598608298b1cc819ab3 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 12:56:24 +0100 Subject: [PATCH 3/7] Fix contributors link --- CONTRIBUTORS => CONTRIBUTORS.md | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename CONTRIBUTORS => CONTRIBUTORS.md (100%) diff --git a/CONTRIBUTORS b/CONTRIBUTORS.md similarity index 100% rename from CONTRIBUTORS rename to CONTRIBUTORS.md diff --git a/README.md b/README.md index c24d534a..dec520c8 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ And the parameters: | /_auth (POST) | { password: 'abc', username: 'user', token: '0982'} | @200 with access_token or @401 | ## Contributing to two-factor-auth-server -Follow [contributing](CONTRIBUTING.md) file. +Follow [contributing](CONTRIBUTORS.md) file. ## License two-factor-auth-server is **licensed** under the **[MIT License]**. The terms of the license are as follows: From 14bc709228ee46e8b71f3e9cb6cf2b91e1771d75 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 13:08:31 +0100 Subject: [PATCH 4/7] 1.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7cdbdb8c..30e8aa16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "two-factor-auth-server", - "version": "1.0.7", + "version": "1.0.8", "description": "", "main": "src/index.js", "scripts": { From be2b6a9add75343d35d2f29de2a71b7ef4b27084 Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 13:18:42 +0100 Subject: [PATCH 5/7] Fix images in npm --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dec520c8..cb3a4ce0 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Before starting, make sure you don't have anything listening on port 8080. Then, After few seconds the services should be running and you should be able to visit [http://localhost:8080/](http://localhost:8080/) and access the login page: -![login-page](/images/login.png) +![login-page](https://raw.githubusercontent.com/clems4ever/two-factor-auth-server/master/images/login.png) ### LDAP authentication An LDAP server has been deployed with the following credentials: **admin/password**. @@ -26,7 +26,7 @@ You can use Google Authenticator for the verification of the TOTP token. You can Test secret key: GRWGIJS6IRHVEODVNRCXCOBMJ5AGC6ZE -![secret-key](/images/secret-key.png) +![secret-key](https://raw.githubusercontent.com/clems4ever/two-factor-auth-server/master/images/secret-key.png) ## Documentation two-factor-auth-server provides a way to log in using LDAP credentials and TOTP tokens. When the user is logged in, From d27c597a73877d153a27093ee823eccb08ebfc8a Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 13:26:14 +0100 Subject: [PATCH 6/7] Fix title in npm --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cb3a4ce0..c369be8d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # two-factor-auth-server -[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)][MIT License] -[![Build](https://travis-ci.org/clems4ever/two-factor-auth-server.svg?branch=master)](https://travis-ci.org/clems4ever/two-factor-auth-server) - + [![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)][MIT License] + [![Build](https://travis-ci.org/clems4ever/two-factor-auth-server.svg?branch=master)](https://travis-ci.org/clems4ever/two-factor-auth-server) **two-factor-auth-server** is the simplest to set up HTTP 2-factor authentication server. It is compatible with NGINX auth_request module and is used in production to secure internal services in a swarm cluster. From b4e04ff330222a5cee4d2e936ffa34cd75f25aad Mon Sep 17 00:00:00 2001 From: Clement Michaud Date: Sun, 18 Dec 2016 13:32:01 +0100 Subject: [PATCH 7/7] 1.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 30e8aa16..1b83fd36 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "two-factor-auth-server", - "version": "1.0.8", + "version": "1.0.9", "description": "", "main": "src/index.js", "scripts": {