Compare commits
No commits in common. "master" and "v1.1.0" have entirely different histories.
3 changed files with 32 additions and 29 deletions
12
README.md
12
README.md
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
Install steps are for Debian 11 (bullseye)
|
Install steps are for Debian 9 (stretch)
|
||||||
|
|
||||||
1. Install docker-ce
|
1. Install docker-ce
|
||||||
```
|
```
|
||||||
|
@ -26,10 +26,12 @@ Install steps are for Debian 11 (bullseye)
|
||||||
sudo apt-get install docker-ce docker-ce-cli containerd.io
|
sudo apt-get install docker-ce docker-ce-cli containerd.io
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install golang
|
2. Install golang 1.11
|
||||||
```
|
```
|
||||||
|
# stretch doesn't have the latest golang so we install backports
|
||||||
|
sudo add-apt-repository "deb http://deb.debian.org/debian stretch-backports main"
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install golang
|
sudo apt-get -t stretch-backports install golang
|
||||||
# set the gopath manually for the rest of the setup
|
# set the gopath manually for the rest of the setup
|
||||||
export GOPATH=${HOME}/go
|
export GOPATH=${HOME}/go
|
||||||
```
|
```
|
||||||
|
@ -55,12 +57,10 @@ Install steps are for Debian 11 (bullseye)
|
||||||
```
|
```
|
||||||
# make sure your user is in the docker group
|
# make sure your user is in the docker group
|
||||||
sudo usermod -aG docker $(whoami)
|
sudo usermod -aG docker $(whoami)
|
||||||
|
|
||||||
# make sure you have some postgres client installed
|
# make sure you have some postgres client installed
|
||||||
sudo apt-get install postgres-client
|
sudo apt-get install postgres-client
|
||||||
docker pull postgres
|
docker pull postgres
|
||||||
docker run -e POSTGRES_PASSWORD=${DB_ADMIN_PW} --name sudosci-db -d postgres
|
docker run --name sudosci-db -e POSTGRES_PASWORD=${DB_ADMIN_PW} -d postgres # please set the db admin pw manually
|
||||||
|
|
||||||
# Initalize the postgres DB
|
# Initalize the postgres DB
|
||||||
cd ${GOPATH}/src/git.minhas.io/asara/sudoscientist
|
cd ${GOPATH}/src/git.minhas.io/asara/sudoscientist
|
||||||
for i in settings/*; do source $i; done
|
for i in settings/*; do source $i; done
|
||||||
|
|
9
main.go
9
main.go
|
@ -1,15 +1,12 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
// force pushing
|
|
||||||
import (
|
import (
|
||||||
"compress/flate"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
_ "github.com/lib/pq"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
_ "github.com/lib/pq"
|
|
||||||
|
|
||||||
"git.minhas.io/asara/sudoscientist-go-backend/packages/auth"
|
"git.minhas.io/asara/sudoscientist-go-backend/packages/auth"
|
||||||
"git.minhas.io/asara/sudoscientist-go-backend/packages/blog"
|
"git.minhas.io/asara/sudoscientist-go-backend/packages/blog"
|
||||||
"git.minhas.io/asara/sudoscientist-go-backend/packages/database"
|
"git.minhas.io/asara/sudoscientist-go-backend/packages/database"
|
||||||
|
@ -64,13 +61,11 @@ func Routes() *chi.Mux {
|
||||||
MaxAge: 360,
|
MaxAge: 360,
|
||||||
})
|
})
|
||||||
|
|
||||||
compressor := middleware.NewCompressor(flate.DefaultCompression)
|
|
||||||
|
|
||||||
router.Use(
|
router.Use(
|
||||||
compressor.Handler,
|
|
||||||
cors.Handler,
|
cors.Handler,
|
||||||
render.SetContentType(render.ContentTypeJSON),
|
render.SetContentType(render.ContentTypeJSON),
|
||||||
middleware.Logger,
|
middleware.Logger,
|
||||||
|
middleware.DefaultCompress,
|
||||||
middleware.RedirectSlashes,
|
middleware.RedirectSlashes,
|
||||||
middleware.Recoverer,
|
middleware.Recoverer,
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"git.minhas.io/asara/sudoscientist-go-backend/packages/middleware"
|
"git.minhas.io/asara/sudoscientist-go-backend/packages/middleware"
|
||||||
"git.minhas.io/asara/sudoscientist-go-backend/packages/users"
|
"git.minhas.io/asara/sudoscientist-go-backend/packages/users"
|
||||||
"github.com/badoux/checkmail"
|
"github.com/badoux/checkmail"
|
||||||
|
"github.com/dgrijalva/jwt-go"
|
||||||
"github.com/go-chi/chi"
|
"github.com/go-chi/chi"
|
||||||
"github.com/go-chi/jwtauth"
|
"github.com/go-chi/jwtauth"
|
||||||
"github.com/go-chi/render"
|
"github.com/go-chi/render"
|
||||||
|
@ -65,6 +66,7 @@ type Claims struct {
|
||||||
Username string `json:"username", db:"username"`
|
Username string `json:"username", db:"username"`
|
||||||
Admin bool `json:"admin", db:"admin"`
|
Admin bool `json:"admin", db:"admin"`
|
||||||
Verified bool `json:"verified", db:"verified"`
|
Verified bool `json:"verified", db:"verified"`
|
||||||
|
jwt.StandardClaims
|
||||||
}
|
}
|
||||||
|
|
||||||
type JWT struct {
|
type JWT struct {
|
||||||
|
@ -173,12 +175,14 @@ func register(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
users.CreateProfile(creds.Username, creds.Email)
|
users.CreateProfile(creds.Username, creds.Email)
|
||||||
expirationTime := time.Now().Add(24 * time.Hour)
|
expirationTime := time.Now().Add(24 * time.Hour)
|
||||||
claims := map[string]interface{}{
|
claims := &Claims{
|
||||||
"username": creds.Username,
|
Username: creds.Username,
|
||||||
"admin": false,
|
Admin: false,
|
||||||
"verified": false,
|
Verified: false,
|
||||||
|
StandardClaims: jwt.StandardClaims{
|
||||||
|
ExpiresAt: expirationTime.Unix(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
jwtauth.SetExpiry(claims, expirationTime)
|
|
||||||
if PostalEnabled {
|
if PostalEnabled {
|
||||||
_, emailToken, _ := EmailAuth.Encode(claims)
|
_, emailToken, _ := EmailAuth.Encode(claims)
|
||||||
returnMessage, ok := sendEmailToken(w, emailToken, creds.Username, creds.Email)
|
returnMessage, ok := sendEmailToken(w, emailToken, creds.Username, creds.Email)
|
||||||
|
@ -223,12 +227,14 @@ func signin(w http.ResponseWriter, r *http.Request) {
|
||||||
user_claims := &Claims{}
|
user_claims := &Claims{}
|
||||||
user_claims_query := DB.QueryRow("SELECT username, admin, verified FROM users WHERE username=$1", creds.Username)
|
user_claims_query := DB.QueryRow("SELECT username, admin, verified FROM users WHERE username=$1", creds.Username)
|
||||||
err = user_claims_query.Scan(&user_claims.Username, &user_claims.Admin, &user_claims.Verified)
|
err = user_claims_query.Scan(&user_claims.Username, &user_claims.Admin, &user_claims.Verified)
|
||||||
claims := map[string]interface{}{
|
claims := &Claims{
|
||||||
"username": user_claims.Username,
|
Username: user_claims.Username,
|
||||||
"admin": user_claims.Admin,
|
Admin: user_claims.Admin,
|
||||||
"verified": user_claims.Verified,
|
Verified: user_claims.Verified,
|
||||||
|
StandardClaims: jwt.StandardClaims{
|
||||||
|
ExpiresAt: expirationTime.Unix(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
jwtauth.SetExpiry(claims, expirationTime)
|
|
||||||
_, tokenString, _ := TokenAuth.Encode(claims)
|
_, tokenString, _ := TokenAuth.Encode(claims)
|
||||||
setCookies(w, tokenString, expirationTime)
|
setCookies(w, tokenString, expirationTime)
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
@ -252,12 +258,14 @@ func refresh(w http.ResponseWriter, r *http.Request) {
|
||||||
render.JSON(w, r, returnMessage)
|
render.JSON(w, r, returnMessage)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
newClaims := map[string]interface{}{
|
newClaims := &Claims{
|
||||||
"username": user_claims.Username,
|
Username: user_claims.Username,
|
||||||
"admin": user_claims.Admin,
|
Admin: user_claims.Admin,
|
||||||
"verified": user_claims.Verified,
|
Verified: user_claims.Verified,
|
||||||
|
StandardClaims: jwt.StandardClaims{
|
||||||
|
ExpiresAt: expirationTime.Unix(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
jwtauth.SetExpiry(newClaims, expirationTime)
|
|
||||||
_, tokenString, _ := TokenAuth.Encode(newClaims)
|
_, tokenString, _ := TokenAuth.Encode(newClaims)
|
||||||
setCookies(w, tokenString, expirationTime)
|
setCookies(w, tokenString, expirationTime)
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
Reference in a new issue