mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 06:50:18 +00:00
NOISSUE - Update SMQ version
Signed-off-by: dusan <borovcanindusan1@gmail.com>
This commit is contained in:
@@ -114,6 +114,11 @@ services:
|
||||
networks: !override
|
||||
- magistrala-base-net
|
||||
|
||||
|
||||
notifications:
|
||||
networks: !override
|
||||
- magistrala-base-net
|
||||
|
||||
openbao:
|
||||
volumes:
|
||||
- ./addons/certs/openbao-entrypoint.sh:/entrypoint.sh
|
||||
|
||||
@@ -239,6 +239,11 @@ SMQ_USERS_HTTP_HOST=users
|
||||
SMQ_USERS_HTTP_PORT=9002
|
||||
SMQ_USERS_HTTP_SERVER_CERT=
|
||||
SMQ_USERS_HTTP_SERVER_KEY=
|
||||
SMQ_USERS_GRPC_HOST=users
|
||||
SMQ_USERS_GRPC_PORT=7002
|
||||
SMQ_USERS_GRPC_SERVER_CERT=${GRPC_MTLS:+./ssl/certs/domains-grpc-server.crt}${GRPC_TLS:+./ssl/certs/domains-grpc-server.crt}
|
||||
SMQ_USERS_GRPC_SERVER_KEY=${GRPC_MTLS:+./ssl/certs/domains-grpc-server.key}${GRPC_TLS:+./ssl/certs/domains-grpc-server.key}
|
||||
SMQ_USERS_GRPC_SERVER_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}${GRPC_TLS:+./ssl/certs/ca.crt}
|
||||
SMQ_USERS_DB_HOST=users-db
|
||||
SMQ_USERS_DB_PORT=5432
|
||||
SMQ_USERS_DB_USER=supermq
|
||||
@@ -266,7 +271,12 @@ SMQ_VERIFICATION_URL_PREFIX=http://localhost/verify-email
|
||||
SMQ_VERIFICATION_EMAIL_TEMPLATE=verification-email.tmpl
|
||||
|
||||
#### Users Client Config
|
||||
SMQ_USERS_URL=users:9002
|
||||
SMQ_USERS_URL=http://users:9002
|
||||
SMQ_USERS_GRPC_URL=users:7002
|
||||
SMQ_USERS_GRPC_TIMEOUT=300s
|
||||
SMQ_USERS_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.crt}
|
||||
SMQ_USERS_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.key}
|
||||
SMQ_USERS_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
|
||||
|
||||
### Email utility
|
||||
SMQ_EMAIL_HOST=host.docker.internal
|
||||
@@ -275,6 +285,13 @@ SMQ_EMAIL_USERNAME=from@example.com
|
||||
SMQ_EMAIL_PASSWORD=password
|
||||
SMQ_EMAIL_FROM_ADDRESS=from@example.com
|
||||
SMQ_EMAIL_FROM_NAME=Example
|
||||
SMQ_EMAIL_INVITATION_TEMPLATE=invitation-sent-email.tmpl
|
||||
SMQ_EMAIL_ACCEPTANCE_TEMPLATE=invitation-accepted-email.tmpl
|
||||
SMQ_EMAIL_REJECTION_TEMPLATE=invitation-rejected-email.tmpl
|
||||
|
||||
### Notifications
|
||||
SMQ_NOTIFICATIONS_LOG_LEVEL=debug
|
||||
SMQ_NOTIFICATIONS_INSTANCE_ID=
|
||||
|
||||
### Google OAuth2
|
||||
SMQ_GOOGLE_CLIENT_ID=
|
||||
@@ -542,5 +559,6 @@ SMQ_GRAFANA_ADMIN_PASSWORD=supermq
|
||||
## Allow unverified user to access
|
||||
SMQ_ALLOW_UNVERIFIED_USER=true
|
||||
|
||||
|
||||
# Docker image tag
|
||||
SMQ_RELEASE_TAG=latest
|
||||
|
||||
@@ -846,6 +846,15 @@ services:
|
||||
SMQ_USERS_HTTP_PORT: ${SMQ_USERS_HTTP_PORT}
|
||||
SMQ_USERS_HTTP_SERVER_CERT: ${SMQ_USERS_HTTP_SERVER_CERT}
|
||||
SMQ_USERS_HTTP_SERVER_KEY: ${SMQ_USERS_HTTP_SERVER_KEY}
|
||||
SMQ_USERS_GRPC_HOST: ${SMQ_USERS_GRPC_HOST}
|
||||
SMQ_USERS_GRPC_PORT: ${SMQ_USERS_GRPC_PORT}
|
||||
## Compose supports parameter expansion in environment,
|
||||
## Eg: ${VAR:+replacement} or ${VAR+replacement} -> replacement if VAR is set and non-empty, otherwise empty
|
||||
## Eg :${VAR:-default} or ${VAR-default} -> value of VAR if set and non-empty, otherwise default
|
||||
SMQ_USERS_GRPC_SERVER_CERT: ${SMQ_USERS_GRPC_SERVER_CERT:+/users-grpc-server.crt}
|
||||
SMQ_USERS_GRPC_SERVER_KEY: ${SMQ_USERS_GRPC_SERVER_KEY:+/users-grpc-server.key}
|
||||
SMQ_USERS_GRPC_SERVER_CA_CERTS: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:+/users-grpc-server-ca.crt}
|
||||
SMQ_USERS_GRPC_CLIENT_CA_CERTS: ${SMQ_USERS_GRPC_CLIENT_CA_CERTS:+/users-grpc-client-ca.crt}
|
||||
SMQ_USERS_DB_HOST: ${SMQ_USERS_DB_HOST}
|
||||
SMQ_USERS_DB_PORT: ${SMQ_USERS_DB_PORT}
|
||||
SMQ_USERS_DB_USER: ${SMQ_USERS_DB_USER}
|
||||
@@ -894,6 +903,7 @@ services:
|
||||
SMQ_ALLOW_UNVERIFIED_USER: ${SMQ_ALLOW_UNVERIFIED_USER}
|
||||
ports:
|
||||
- ${SMQ_USERS_HTTP_PORT}:${SMQ_USERS_HTTP_PORT}
|
||||
- ${SMQ_USERS_GRPC_PORT}:${SMQ_USERS_GRPC_PORT}
|
||||
networks:
|
||||
- supermq-base-net
|
||||
volumes:
|
||||
@@ -932,6 +942,56 @@ services:
|
||||
bind:
|
||||
create_host_path: true
|
||||
|
||||
notifications:
|
||||
image: docker.io/supermq/notifications:${SMQ_RELEASE_TAG}
|
||||
container_name: supermq-notifications
|
||||
depends_on:
|
||||
- nats
|
||||
restart: on-failure
|
||||
environment:
|
||||
SMQ_NOTIFICATIONS_LOG_LEVEL: ${SMQ_NOTIFICATIONS_LOG_LEVEL}
|
||||
SMQ_NOTIFICATIONS_INSTANCE_ID: ${SMQ_NOTIFICATIONS_INSTANCE_ID}
|
||||
SMQ_ES_URL: ${SMQ_ES_URL}
|
||||
SMQ_JAEGER_URL: ${SMQ_JAEGER_URL}
|
||||
SMQ_JAEGER_TRACE_RATIO: ${SMQ_JAEGER_TRACE_RATIO}
|
||||
SMQ_SEND_TELEMETRY: ${SMQ_SEND_TELEMETRY}
|
||||
SMQ_EMAIL_HOST: ${SMQ_EMAIL_HOST}
|
||||
SMQ_EMAIL_PORT: ${SMQ_EMAIL_PORT}
|
||||
SMQ_EMAIL_USERNAME: ${SMQ_EMAIL_USERNAME}
|
||||
SMQ_EMAIL_PASSWORD: ${SMQ_EMAIL_PASSWORD}
|
||||
SMQ_EMAIL_FROM_ADDRESS: ${SMQ_EMAIL_FROM_ADDRESS}
|
||||
SMQ_EMAIL_FROM_NAME: ${SMQ_EMAIL_FROM_NAME}
|
||||
SMQ_EMAIL_INVITATION_TEMPLATE: ${SMQ_EMAIL_INVITATION_TEMPLATE}
|
||||
SMQ_EMAIL_ACCEPTANCE_TEMPLATE: ${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}
|
||||
SMQ_EMAIL_REJECTION_TEMPLATE: ${SMQ_EMAIL_REJECTION_TEMPLATE}
|
||||
SMQ_USERS_GRPC_URL: ${SMQ_USERS_GRPC_URL}
|
||||
SMQ_USERS_GRPC_TIMEOUT: ${SMQ_USERS_GRPC_TIMEOUT}
|
||||
SMQ_USERS_GRPC_CLIENT_CERT: ${SMQ_USERS_GRPC_CLIENT_CERT:+/users-grpc-client.crt}
|
||||
SMQ_USERS_GRPC_CLIENT_KEY: ${SMQ_USERS_GRPC_CLIENT_KEY:+/users-grpc-client.key}
|
||||
SMQ_USERS_GRPC_SERVER_CA_CERTS: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:+/users-grpc-server-ca.crt}
|
||||
networks:
|
||||
- supermq-base-net
|
||||
volumes:
|
||||
- ./templates/${SMQ_EMAIL_INVITATION_TEMPLATE}:/${SMQ_EMAIL_INVITATION_TEMPLATE}
|
||||
- ./templates/${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}:/${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}
|
||||
- ./templates/${SMQ_EMAIL_REJECTION_TEMPLATE}:/${SMQ_EMAIL_REJECTION_TEMPLATE}
|
||||
# Users gRPC client certificates
|
||||
- type: bind
|
||||
source: ${SMQ_USERS_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
|
||||
target: /users-grpc-client${SMQ_USERS_GRPC_CLIENT_CERT:+.crt}
|
||||
bind:
|
||||
create_host_path: true
|
||||
- type: bind
|
||||
source: ${SMQ_USERS_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
|
||||
target: /users-grpc-client${SMQ_USERS_GRPC_CLIENT_KEY:+.key}
|
||||
bind:
|
||||
create_host_path: true
|
||||
- type: bind
|
||||
source: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
|
||||
target: /users-grpc-server-ca${SMQ_USERS_GRPC_SERVER_CA_CERTS:+.crt}
|
||||
bind:
|
||||
create_host_path: true
|
||||
|
||||
groups-db:
|
||||
image: docker.io/postgres:18.0-alpine3.22
|
||||
container_name: supermq-groups-db
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{.Subject}}</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background-color: #f5f7fa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 30px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
overflow: hidden;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #27ae60 0%, #2ecc71 100%);
|
||||
padding: 30px 40px;
|
||||
text-align: center;
|
||||
}
|
||||
.header h1 {
|
||||
color: #ffffff;
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.content {
|
||||
padding: 40px;
|
||||
}
|
||||
.content p {
|
||||
margin: 0 0 15px 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.success-details {
|
||||
background-color: #eafaf1;
|
||||
border-left: 4px solid #27ae60;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.success-details p {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.icon-success {
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
font-size: 48px;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f9fb;
|
||||
padding: 25px 40px;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
}
|
||||
.footer-divider {
|
||||
border: none;
|
||||
border-top: 1px solid #e0e3e8;
|
||||
margin: 30px 0 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Invitation Accepted</h1>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="icon-success">✓</div>
|
||||
|
||||
<p>Dear <strong>{{.User}}</strong>,</p>
|
||||
|
||||
<div class="success-details">
|
||||
<p>{{.Content}}</p>
|
||||
</div>
|
||||
|
||||
<p>You can now collaborate with them in the domain.</p>
|
||||
|
||||
<hr class="footer-divider">
|
||||
|
||||
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated email. Please do not reply directly to this message.</p>
|
||||
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{.Subject}}</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background-color: #f5f7fa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 30px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
overflow: hidden;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
|
||||
padding: 30px 40px;
|
||||
text-align: center;
|
||||
}
|
||||
.header h1 {
|
||||
color: #ffffff;
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.content {
|
||||
padding: 40px;
|
||||
}
|
||||
.content p {
|
||||
margin: 0 0 15px 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.rejection-details {
|
||||
background-color: #fadbd8;
|
||||
border-left: 4px solid #e74c3c;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.rejection-details p {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f9fb;
|
||||
padding: 25px 40px;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
}
|
||||
.footer-divider {
|
||||
border: none;
|
||||
border-top: 1px solid #e0e3e8;
|
||||
margin: 30px 0 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Invitation Declined</h1>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<p>Dear <strong>{{.User}}</strong>,</p>
|
||||
|
||||
<div class="rejection-details">
|
||||
<p>{{.Content}}</p>
|
||||
</div>
|
||||
|
||||
<p>If you would like to extend another invitation or have any questions, please don't hesitate to contact us.</p>
|
||||
|
||||
<hr class="footer-divider">
|
||||
|
||||
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated email. Please do not reply directly to this message.</p>
|
||||
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{{.Subject}}</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
background-color: #f5f7fa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 30px auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
overflow: hidden;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #083662 0%, #0a4d8f 100%);
|
||||
padding: 30px 40px;
|
||||
text-align: center;
|
||||
}
|
||||
.header h1 {
|
||||
color: #ffffff;
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.content {
|
||||
padding: 40px;
|
||||
}
|
||||
.content p {
|
||||
margin: 0 0 15px 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.invitation-details {
|
||||
background-color: #f8f9fb;
|
||||
border-left: 4px solid #083662;
|
||||
padding: 20px;
|
||||
margin: 25px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.invitation-details p {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background-color: #083662;
|
||||
color: #ffffff;
|
||||
padding: 14px 32px;
|
||||
text-decoration: none;
|
||||
border-radius: 6px;
|
||||
margin: 20px 0;
|
||||
font-weight: 600;
|
||||
font-size: 15px;
|
||||
}
|
||||
.footer {
|
||||
background-color: #f8f9fb;
|
||||
padding: 25px 40px;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
}
|
||||
.footer-divider {
|
||||
border: none;
|
||||
border-top: 1px solid #e0e3e8;
|
||||
margin: 30px 0 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>Domain Invitation</h1>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<p>Dear <strong>{{.User}}</strong>,</p>
|
||||
|
||||
<div class="invitation-details">
|
||||
<p>{{.Content}}</p>
|
||||
</div>
|
||||
|
||||
<p>Please log in to your account to view and respond to this invitation.</p>
|
||||
|
||||
<p>If you have any questions, please don't hesitate to contact us.</p>
|
||||
|
||||
<hr class="footer-divider">
|
||||
|
||||
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated email. Please do not reply directly to this message.</p>
|
||||
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user