Implement basic user registration system

pull/30/head
Aloïs Micard 4 years ago
parent 49bbb8e91b
commit 27e7c9d2fa
No known key found for this signature in database
GPG Key ID: 1A0EB82F071F5EFE

@ -48,7 +48,7 @@ services:
- api
api:
image: creekorful/tdsh-api:latest
command: --log-level debug --nats-uri nats --elasticsearch-uri http://elasticsearch:9200 --signing-key K==M5RsU_DQa4_XSbkX?L27s^xWmde25
command: --log-level debug --nats-uri nats --elasticsearch-uri http://elasticsearch:9200 --signing-key K==M5RsU_DQa4_XSbkX?L27s^xWmde25 --users demo:demo
restart: always
depends_on:
- elasticsearch

@ -36,6 +36,11 @@ func GetApp() *cli.App {
Usage: "Signing key for the JWT token",
Required: true,
},
&cli.StringSliceFlag{
Name: "users",
Usage: "List of API users. (Format user:password)",
Required: false,
},
},
Action: execute,
}
@ -62,12 +67,12 @@ func execute(c *cli.Context) error {
}
// Setup middlewares
e.Use(middleware.JWT(signingKey))
jwtMiddleware := middleware.JWT(signingKey)
// Add endpoints
e.GET("/v1/resources", searchResourcesEndpoint(svc))
e.POST("/v1/resources", addResourceEndpoint(svc))
e.POST("/v1/urls", scheduleURLEndpoint(svc))
e.GET("/v1/resources", searchResourcesEndpoint(svc), jwtMiddleware)
e.POST("/v1/resources", addResourceEndpoint(svc), jwtMiddleware)
e.POST("/v1/urls", scheduleURLEndpoint(svc), jwtMiddleware)
e.POST("/v1/sessions", authenticateEndpoint(svc))
log.Info().Msg("Successfully initialized tdsh-api. Waiting for requests")

@ -143,6 +143,10 @@ func newSearchParams(c echo.Context) (*database.ResSearchParams, error) {
}
func getRawQueryParam(url string) map[string]string {
if url == "" {
return map[string]string{}
}
val := map[string]string{}
parts := strings.Split(url, "&")

@ -10,6 +10,7 @@ import (
"github.com/urfave/cli/v2"
"golang.org/x/crypto/bcrypt"
"net/http"
"strings"
)
type service interface {
@ -28,6 +29,22 @@ type svc struct {
}
func newService(c *cli.Context, signingKey []byte) (service, error) {
users := map[string][]byte{}
for _, userEntry := range c.StringSlice("users") {
parts := strings.Split(userEntry, ":")
user := parts[0]
pass := parts[1]
passBytes, err := bcrypt.GenerateFromPassword([]byte(pass), bcrypt.DefaultCost)
if err != nil {
log.Err(err).Msg("Unable to generate user password")
return nil, err
}
log.Debug().Str("username", user).Msg("Register new user")
users[user] = passBytes
}
// Connect to the NATS server
pub, err := messaging.NewPublisher(c.String("nats-uri"))
if err != nil {
@ -44,7 +61,7 @@ func newService(c *cli.Context, signingKey []byte) (service, error) {
return &svc{
db: db,
users: map[string][]byte{},
users: users,
signingKey: signingKey,
pub: pub,
}, nil

@ -55,7 +55,6 @@ func NewElasticDB(uri string) (Database, error) {
elastic.SetHealthcheck(false),
)
if err != nil {
log.Err(err).Msg("Error while creating ES client")
return nil, err
}
@ -79,7 +78,6 @@ func (e *elasticSearchDB) SearchResources(params *ResSearchParams) ([]ResourceId
Size(params.PageSize).
Do(context.Background())
if err != nil {
log.Err(err).Msg("Error while searching on ES")
return nil, err
}
@ -165,13 +163,11 @@ func setupElasticSearch(ctx context.Context, es *elastic.Client) error {
// Setup index if doesn't exist
exist, err := es.IndexExists(resourcesIndex).Do(ctx)
if err != nil {
log.Err(err).Str("index", resourcesIndex).Msg("Error while checking if index exist")
return err
}
if !exist {
log.Debug().Str("index", resourcesIndex).Msg("Creating missing index")
if _, err := es.CreateIndex(resourcesIndex).Do(ctx); err != nil {
log.Err(err).Str("index", resourcesIndex).Msg("Error while creating index")
return err
}
} else {

Loading…
Cancel
Save