Skip to content
Open

Id #12

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0

MF_DOCKER_IMAGE_NAME_PREFIX ?= mainflux
MF_RELEASE ?= latest
BUILD_DIR = build
SERVICES = users things http coap lora influxdb-writer influxdb-reader mongodb-writer \
mongodb-reader cassandra-writer cassandra-reader postgres-writer postgres-reader cli \
Expand All @@ -23,7 +24,7 @@ define make_docker
--build-arg SVC=$(svc) \
--build-arg GOARCH=$(GOARCH) \
--build-arg GOARM=$(GOARM) \
--tag=$(MF_DOCKER_IMAGE_NAME_PREFIX)/$(svc) \
--tag=$(MF_DOCKER_IMAGE_NAME_PREFIX)/$(svc):$(MF_RELEASE) \
-f docker/Dockerfile .
endef

Expand All @@ -33,7 +34,7 @@ define make_docker_dev
docker build \
--no-cache \
--build-arg SVC=$(svc) \
--tag=$(MF_DOCKER_IMAGE_NAME_PREFIX)/$(svc) \
--tag=$(MF_DOCKER_IMAGE_NAME_PREFIX)/$(svc):$(MF_RELEASE) \
-f docker/Dockerfile.dev ./build
endef

Expand Down
35 changes: 26 additions & 9 deletions cmd/things/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ const (
defJaegerURL = ""
defAuthURL = "localhost:8181"
defAuthTimeout = "1s"
defOIDC = "false"

envLogLevel = "MF_THINGS_LOG_LEVEL"
envDBHost = "MF_THINGS_DB_HOST"
Expand Down Expand Up @@ -97,6 +98,7 @@ const (
envJaegerURL = "MF_JAEGER_URL"
envAuthURL = "MF_AUTH_GRPC_URL"
envAuthTimeout = "MF_AUTH_GRPC_TIMEOUT"
envOIDC = "MF_OIDC"
)

type config struct {
Expand All @@ -120,6 +122,7 @@ type config struct {
jaegerURL string
authURL string
authTimeout time.Duration
OIDC bool
}

func main() {
Expand All @@ -140,12 +143,16 @@ func main() {
db := connectToDB(cfg.dbConfig, logger)
defer db.Close()

authTracer, authCloser := initJaeger("auth", cfg.jaegerURL, logger)
defer authCloser.Close()
var auth mainflux.AuthServiceClient
var close func() error
if !cfg.OIDC {
authTracer, authCloser := initJaeger("auth", cfg.jaegerURL, logger)
defer authCloser.Close()

auth, close := createAuthClient(cfg, authTracer, logger)
if close != nil {
defer close()
auth, close = createAuthClient(cfg, authTracer, logger)
if close != nil {
defer close()
}
}

dbTracer, dbCloser := initJaeger("things_db", cfg.jaegerURL, logger)
Expand All @@ -154,7 +161,7 @@ func main() {
cacheTracer, cacheCloser := initJaeger("things_cache", cfg.jaegerURL, logger)
defer cacheCloser.Close()

svc := newService(auth, dbTracer, cacheTracer, db, cacheClient, esClient, logger)
svc := newService(auth, dbTracer, cacheTracer, db, cacheClient, esClient, cfg.OIDC, logger)
errs := make(chan error, 2)

go startHTTPServer(thhttpapi.MakeHandler(thingsTracer, svc), cfg.httpPort, cfg, logger, errs)
Expand Down Expand Up @@ -182,6 +189,11 @@ func loadConfig() config {
log.Fatalf("Invalid %s value: %s", envAuthTimeout, err.Error())
}

oidc, err := strconv.ParseBool(mainflux.Env(envOIDC, defOIDC))
if err != nil {
log.Fatalf("Invalid value passed for %s\n", envClientTLS)
}

dbConfig := postgres.Config{
Host: mainflux.Env(envDBHost, defDBHost),
Port: mainflux.Env(envDBPort, defDBPort),
Expand Down Expand Up @@ -215,6 +227,7 @@ func loadConfig() config {
jaegerURL: mainflux.Env(envJaegerURL, defJaegerURL),
authURL: mainflux.Env(envAuthURL, defAuthURL),
authTimeout: authTimeout,
OIDC: oidc,
}
}

Expand Down Expand Up @@ -295,11 +308,11 @@ func connectToAuth(cfg config, logger logger.Logger) *grpc.ClientConn {
logger.Error(fmt.Sprintf("Failed to connect to auth service: %s", err))
os.Exit(1)
}

logger.Info(fmt.Sprint("Connected to auth service %s", cfg.authURL))
return conn
}

func newService(auth mainflux.AuthServiceClient, dbTracer opentracing.Tracer, cacheTracer opentracing.Tracer, db *sqlx.DB, cacheClient *redis.Client, esClient *redis.Client, logger logger.Logger) things.Service {
func newService(auth mainflux.AuthServiceClient, dbTracer opentracing.Tracer, cacheTracer opentracing.Tracer, db *sqlx.DB, cacheClient *redis.Client, esClient *redis.Client, oidc bool, logger logger.Logger) things.Service {
database := postgres.NewDatabase(db)

thingsRepo := postgres.NewThingRepository(database)
Expand All @@ -315,7 +328,11 @@ func newService(auth mainflux.AuthServiceClient, dbTracer opentracing.Tracer, ca
thingCache = tracing.ThingCacheMiddleware(cacheTracer, thingCache)
idProvider := uuid.New()

svc := things.New(auth, thingsRepo, channelsRepo, chanCache, thingCache, idProvider)
if oidc {
logger.Info(("Using OIDC authentication"))
}

svc := things.New(auth, thingsRepo, channelsRepo, chanCache, thingCache, oidc, idProvider)
svc = rediscache.NewEventStoreMiddleware(svc, esClient)
svc = api.LoggingMiddleware(svc, logger)
svc = api.MetricsMiddleware(
Expand Down
34 changes: 28 additions & 6 deletions cmd/twins/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ const (
defNatsURL = "nats://localhost:4222"
defAuthURL = "localhost:8181"
defAuthTimeout = "1s"
defOIDC = "false"

envLogLevel = "MF_TWINS_LOG_LEVEL"
envHTTPPort = "MF_TWINS_HTTP_PORT"
Expand All @@ -80,6 +81,7 @@ const (
envNatsURL = "MF_NATS_URL"
envAuthURL = "MF_AUTH_GRPC_URL"
envAuthTimeout = "MF_AUTH_GRPC_TIMEOUT"
envOIDC = "MF_OIDC"
)

type config struct {
Expand All @@ -101,6 +103,7 @@ type config struct {

authURL string
authTimeout time.Duration
OIDC bool
}

func main() {
Expand All @@ -123,9 +126,17 @@ func main() {
dbTracer, dbCloser := initJaeger("twins_db", cfg.jaegerURL, logger)
defer dbCloser.Close()

authTracer, authCloser := initJaeger("auth", cfg.jaegerURL, logger)
defer authCloser.Close()
auth, _ := createAuthClient(cfg, authTracer, logger)
var auth mainflux.AuthServiceClient
var close func() error
if !cfg.OIDC {
authTracer, authCloser := initJaeger("auth", cfg.jaegerURL, logger)
defer authCloser.Close()

auth, close = createAuthClient(cfg, authTracer, logger)
if close != nil {
defer close()
}
}

pubSub, err := nats.NewPubSub(cfg.natsURL, queue, logger)
if err != nil {
Expand All @@ -134,7 +145,7 @@ func main() {
}
defer pubSub.Close()

svc := newService(pubSub, cfg.channelID, auth, dbTracer, db, cacheTracer, cacheClient, logger)
svc := newService(pubSub, cfg.channelID, auth, dbTracer, db, cacheTracer, cacheClient, cfg.OIDC, logger)

tracer, closer := initJaeger("twins", cfg.jaegerURL, logger)
defer closer.Close()
Expand Down Expand Up @@ -168,6 +179,11 @@ func loadConfig() config {
Port: mainflux.Env(envDBPort, defDBPort),
}

oidc, err := strconv.ParseBool(mainflux.Env(envOIDC, defOIDC))
if err != nil {
log.Fatalf("Invalid value passed for %s\n", envOIDC)
}

return config{
logLevel: mainflux.Env(envLogLevel, defLogLevel),
httpPort: mainflux.Env(envHTTPPort, defHTTPPort),
Expand All @@ -186,6 +202,7 @@ func loadConfig() config {
natsURL: mainflux.Env(envNatsURL, defNatsURL),
authURL: mainflux.Env(envAuthURL, defAuthURL),
authTimeout: authTimeout,
OIDC: oidc,
}
}

Expand Down Expand Up @@ -244,6 +261,8 @@ func connectToAuth(cfg config, logger logger.Logger) *grpc.ClientConn {
os.Exit(1)
}

logger.Info(fmt.Sprint("Connected to auth service %s", cfg.authURL))

return conn
}

Expand All @@ -261,18 +280,21 @@ func connectToRedis(cacheURL, cachePass, cacheDB string, logger logger.Logger) *
})
}

func newService(ps messaging.PubSub, chanID string, users mainflux.AuthServiceClient, dbTracer opentracing.Tracer, db *mongo.Database, cacheTracer opentracing.Tracer, cacheClient *redis.Client, logger logger.Logger) twins.Service {
func newService(ps messaging.PubSub, chanID string, users mainflux.AuthServiceClient, dbTracer opentracing.Tracer, db *mongo.Database, cacheTracer opentracing.Tracer, cacheClient *redis.Client, oidc bool, logger logger.Logger) twins.Service {
twinRepo := twmongodb.NewTwinRepository(db)
twinRepo = tracing.TwinRepositoryMiddleware(dbTracer, twinRepo)

stateRepo := twmongodb.NewStateRepository(db)
stateRepo = tracing.StateRepositoryMiddleware(dbTracer, stateRepo)
if oidc {
logger.Info(("Using OIDC authentication"))
}

idProvider := uuid.New()
twinCache := rediscache.NewTwinCache(cacheClient)
twinCache = tracing.TwinCacheMiddleware(cacheTracer, twinCache)

svc := twins.New(ps, users, twinRepo, twinCache, stateRepo, idProvider, chanID, logger)
svc := twins.New(ps, users, twinRepo, twinCache, stateRepo, idProvider, chanID, oidc, logger)
svc = api.LoggingMiddleware(svc, logger)
svc = api.MetricsMiddleware(
svc,
Expand Down
16 changes: 15 additions & 1 deletion cmd/users/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ const (
defAuthURL = "localhost:8181"
defAuthTimeout = "1s"

defOIDC = "false"

envLogLevel = "MF_USERS_LOG_LEVEL"
envDBHost = "MF_USERS_DB_HOST"
envDBPort = "MF_USERS_DB_PORT"
Expand Down Expand Up @@ -109,6 +111,8 @@ const (
envAuthCACerts = "MF_AUTH_CA_CERTS"
envAuthURL = "MF_AUTH_GRPC_URL"
envAuthTimeout = "MF_AUTH_GRPC_TIMEOUT"

envOIDC = "MF_OIDC"
)

type config struct {
Expand All @@ -127,6 +131,7 @@ type config struct {
adminEmail string
adminPassword string
passRegex *regexp.Regexp
OIDC bool
}

func main() {
Expand Down Expand Up @@ -179,6 +184,11 @@ func loadConfig() config {
log.Fatalf("Invalid value passed for %s\n", envAuthTLS)
}

oidc, err := strconv.ParseBool(mainflux.Env(envOIDC, defOIDC))
if err != nil {
log.Fatalf("Invalid value passed for %s\n", envAuthTLS)
}

passRegex, err := regexp.Compile(mainflux.Env(envPassRegex, defPassRegex))
if err != nil {
log.Fatalf("Invalid password validation rules %s\n", envPassRegex)
Expand Down Expand Up @@ -222,6 +232,7 @@ func loadConfig() config {
authTimeout: authTimeout,
adminEmail: mainflux.Env(envAdminEmail, defAdminEmail),
adminPassword: mainflux.Env(envAdminPassword, defAdminPassword),
OIDC: oidc,
passRegex: passRegex,
}

Expand Down Expand Up @@ -293,10 +304,13 @@ func newService(db *sqlx.DB, tracer opentracing.Tracer, auth mainflux.AuthServic
if err != nil {
logger.Error(fmt.Sprintf("Failed to configure e-mailing util: %s", err.Error()))
}
if c.OIDC {
logger.Info(("Using OIDC authentication"))
}

idProvider := uuid.New()

svc := users.New(userRepo, hasher, auth, emailer, idProvider, c.passRegex)
svc := users.New(userRepo, hasher, auth, emailer, idProvider, c.OIDC, c.passRegex)
svc = api.LoggingMiddleware(svc, logger)
svc = api.MetricsMiddleware(
svc,
Expand Down
1 change: 1 addition & 0 deletions docker/addons/bootstrap/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,6 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
MF_AUTH_GRPC_TIMMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
networks:
- docker_mainflux-base-net
1 change: 1 addition & 0 deletions docker/addons/cassandra-reader/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_CASSANDRA_READER_PORT}:${MF_CASSANDRA_READER_PORT}
networks:
Expand Down
1 change: 1 addition & 0 deletions docker/addons/influxdb-reader/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_INFLUX_READER_PORT}:${MF_INFLUX_READER_PORT}
networks:
Expand Down
1 change: 1 addition & 0 deletions docker/addons/mongodb-reader/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_MONGO_READER_PORT}:${MF_MONGO_READER_PORT}
networks:
Expand Down
1 change: 1 addition & 0 deletions docker/addons/postgres-reader/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_THINGS_AUTH_GRPC_URL: ${MF_THINGS_AUTH_GRPC_URL}
MF_THINGS_AUTH_GRPC_TIMEOUT: ${MF_THINGS_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_POSTGRES_READER_PORT}:${MF_POSTGRES_READER_PORT}
networks:
Expand Down
3 changes: 3 additions & 0 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ services:
MF_AUTH_GRPC_PORT: ${MF_AUTH_GRPC_PORT}
MF_AUTH_SECRET: ${MF_AUTH_SECRET}
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_AUTH_HTTP_PORT}:${MF_AUTH_HTTP_PORT}
- ${MF_AUTH_GRPC_PORT}:${MF_AUTH_GRPC_PORT}
Expand Down Expand Up @@ -136,6 +137,7 @@ services:
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
MF_USERS_ADMIN_EMAIL: ${MF_USERS_ADMIN_EMAIL}
MF_USERS_ADMIN_PASSWORD: ${MF_USERS_ADMIN_PASSWORD}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_USERS_HTTP_PORT}:${MF_USERS_HTTP_PORT}
networks:
Expand Down Expand Up @@ -185,6 +187,7 @@ services:
MF_JAEGER_URL: ${MF_JAEGER_URL}
MF_AUTH_GRPC_URL: ${MF_AUTH_GRPC_URL}
MF_AUTH_GRPC_TIMEOUT: ${MF_AUTH_GRPC_TIMEOUT}
MF_OIDC: ${MF_OIDC}
ports:
- ${MF_THINGS_HTTP_PORT}:${MF_THINGS_HTTP_PORT}
- ${MF_THINGS_AUTH_HTTP_PORT}:${MF_THINGS_AUTH_HTTP_PORT}
Expand Down
2 changes: 1 addition & 1 deletion pkg/sdk/go/users_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func newUserService() users.Service {
emailer := mocks.NewEmailer()
idProvider := uuid.New()

return users.New(usersRepo, hasher, auth, emailer, idProvider, passRegex)
return users.New(usersRepo, hasher, auth, emailer, idProvider, false, passRegex)
}

func newUserServer(svc users.Service) *httptest.Server {
Expand Down
Loading