Compare commits
50
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
947a48dc90 | ||
|
|
c2e962a2be | ||
|
|
230e7fcf5e | ||
|
|
180e642ce3 | ||
|
|
38def362f6 | ||
|
|
f3d3293e9e | ||
|
|
2c82f844b1 | ||
|
|
b805fbbd1a | ||
|
|
b7c883068a | ||
|
|
df5d011a3a | ||
|
|
e0df60bc8b | ||
|
|
8b21dcd843 | ||
|
|
a140d6806f | ||
|
|
6eeef4cfbe | ||
|
|
fd30fd4555 | ||
|
|
d4616bfdb2 | ||
|
|
3409eb4eec | ||
|
|
28e32e34a2 | ||
|
|
c7378dd9c2 | ||
|
|
6c5f4493dc | ||
|
|
4f3da7361a | ||
|
|
53404852e1 | ||
|
|
75743d2391 | ||
|
|
6a8b1e2628 | ||
|
|
932159b238 | ||
|
|
135739da10 | ||
|
|
f1a47aa620 | ||
|
|
3d06a59303 | ||
|
|
ccbe4de116 | ||
|
|
5c25ab9d3d | ||
|
|
02a2ec72c0 | ||
|
|
720346e9d7 | ||
|
|
68e0652872 | ||
|
|
b81db4fc0f | ||
|
|
c377995a1d | ||
|
|
e223fd99a3 | ||
|
|
5beadf9f35 | ||
|
|
89eec1edec | ||
|
|
3db235a532 | ||
|
|
24337f3a13 | ||
|
|
04988e43dd | ||
|
|
f94f3e82e8 | ||
|
|
cb5d306478 | ||
|
|
abaa41345a | ||
|
|
f46dacad9d | ||
|
|
0488b3402d | ||
|
|
fad6fe1c2a | ||
|
|
2789af0bd7 | ||
|
|
91da0dedb6 | ||
|
|
8d3c4987f0 |
@@ -4,4 +4,3 @@ ALFRESCO_LICENSE_DIR=~/alfresco/license
|
|||||||
PROXY_PROTOCOL=http
|
PROXY_PROTOCOL=http
|
||||||
PROXY_HOST=localhost
|
PROXY_HOST=localhost
|
||||||
PROXY_PORT=8080
|
PROXY_PORT=8080
|
||||||
IDENTITY_SERVICE_BASEURL=http://auth.example.org:8080
|
|
||||||
|
|||||||
+18
-112
@@ -5,7 +5,7 @@ version: "2"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
platform:
|
platform:
|
||||||
image: quay.io/alfresco/alfresco-governance-repository-enterprise:V3.4-latest
|
image: alfresco/alfresco-content-repository:6.2.2.3
|
||||||
mem_limit: 1700m
|
mem_limit: 1700m
|
||||||
environment:
|
environment:
|
||||||
JAVA_OPTS: "
|
JAVA_OPTS: "
|
||||||
@@ -48,10 +48,6 @@ services:
|
|||||||
|
|
||||||
-Ddsync.service.uris=${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}/sync
|
-Ddsync.service.uris=${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}/sync
|
||||||
|
|
||||||
-Dauthentication.chain=aims:identity-service,builtin:alfrescoNtlm
|
|
||||||
-Didentity-service.authentication.defaultAdministratorUserNames=admin.1
|
|
||||||
-Didentity-service.auth-server-url=${IDENTITY_SERVICE_BASEURL}/auth
|
|
||||||
|
|
||||||
-Dsystem.content.eagerOrphanCleanup=true
|
-Dsystem.content.eagerOrphanCleanup=true
|
||||||
-Dsystem.content.orphanProtectDays=0
|
-Dsystem.content.orphanProtectDays=0
|
||||||
-Djodconverter.enabled=false
|
-Djodconverter.enabled=false
|
||||||
@@ -62,6 +58,7 @@ services:
|
|||||||
- shared-file-store
|
- shared-file-store
|
||||||
volumes:
|
volumes:
|
||||||
- "$ALFRESCO_LICENSE_DIR/acs:/usr/local/tomcat/shared/classes/alfresco/extension/license:ro"
|
- "$ALFRESCO_LICENSE_DIR/acs:/usr/local/tomcat/shared/classes/alfresco/extension/license:ro"
|
||||||
|
- acsbin-volume:/usr/local/tomcat/alf_data:rw
|
||||||
|
|
||||||
transform-router:
|
transform-router:
|
||||||
image: quay.io/alfresco/alfresco-transform-router:1.3.1
|
image: quay.io/alfresco/alfresco-transform-router:1.3.1
|
||||||
@@ -88,7 +85,7 @@ services:
|
|||||||
- shared-file-store-volume:/tmp/Alfresco/sfs
|
- shared-file-store-volume:/tmp/Alfresco/sfs
|
||||||
|
|
||||||
share:
|
share:
|
||||||
image: quay.io/alfresco/alfresco-governance-share-enterprise:V3.4-latest
|
image: alfresco/alfresco-share:6.2.2
|
||||||
mem_limit: 512m
|
mem_limit: 512m
|
||||||
environment:
|
environment:
|
||||||
REPO_HOST: "platform"
|
REPO_HOST: "platform"
|
||||||
@@ -101,16 +98,6 @@ services:
|
|||||||
-Dalfresco.host=${PROXY_HOST}
|
-Dalfresco.host=${PROXY_HOST}
|
||||||
-Dalfresco.port=${PROXY_PORT}
|
-Dalfresco.port=${PROXY_PORT}
|
||||||
-Dalfresco.protocol=${PROXY_PROTOCOL}
|
-Dalfresco.protocol=${PROXY_PROTOCOL}
|
||||||
-Daims.enabled=true
|
|
||||||
-Daims.realm=alfresco
|
|
||||||
-Daims.resource=acs-share
|
|
||||||
-Daims.authServerUrl=${IDENTITY_SERVICE_BASEURL}/auth
|
|
||||||
-Daims.sslRequired=none
|
|
||||||
-Daims.publicClient=true
|
|
||||||
-Daims.autodetectBearerOnly=true
|
|
||||||
-Daims.alwaysRefreshToken=true
|
|
||||||
-Daims.principalAttribute=preferred_username
|
|
||||||
-Daims.enableBasicAuth=true
|
|
||||||
"
|
"
|
||||||
|
|
||||||
postgres-acs:
|
postgres-acs:
|
||||||
@@ -121,6 +108,8 @@ services:
|
|||||||
- POSTGRES_USER=alfresco
|
- POSTGRES_USER=alfresco
|
||||||
- POSTGRES_DB=alfresco
|
- POSTGRES_DB=alfresco
|
||||||
command: postgres -c max_connections=300 -c log_min_messages=LOG
|
command: postgres -c max_connections=300 -c log_min_messages=LOG
|
||||||
|
volumes:
|
||||||
|
- acsdb-volume:/var/lib/postgresql/data:rw
|
||||||
|
|
||||||
search:
|
search:
|
||||||
image: alfresco/alfresco-search-services:2.0.1
|
image: alfresco/alfresco-search-services:2.0.1
|
||||||
@@ -132,10 +121,14 @@ services:
|
|||||||
- SOLR_SOLR_PORT=8983
|
- SOLR_SOLR_PORT=8983
|
||||||
- SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
|
- SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive
|
||||||
- ALFRESCO_SECURE_COMMS=none
|
- ALFRESCO_SECURE_COMMS=none
|
||||||
|
volumes:
|
||||||
|
- solrindex-volume:/opt/alfresco-search-services/data:rw
|
||||||
|
|
||||||
activemq:
|
activemq:
|
||||||
image: alfresco/alfresco-activemq:5.15.8
|
image: alfresco/alfresco-activemq:5.15.8
|
||||||
mem_limit: 256m
|
mem_limit: 256m
|
||||||
|
volumes:
|
||||||
|
- activemq-volume:/opt/activemq/data:rw
|
||||||
|
|
||||||
sync:
|
sync:
|
||||||
image: quay.io/alfresco/service-sync:3.3.3.1
|
image: quay.io/alfresco/service-sync:3.3.3.1
|
||||||
@@ -151,8 +144,6 @@ services:
|
|||||||
-Drepo.port=8080
|
-Drepo.port=8080
|
||||||
-Ddw.server.applicationConnectors[0].type=http
|
-Ddw.server.applicationConnectors[0].type=http
|
||||||
-XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80
|
-XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80
|
||||||
-Didentity-service.auth-server-url=${IDENTITY_SERVICE_BASEURL}/auth
|
|
||||||
-Didentity-service.resource=acs-sync
|
|
||||||
"
|
"
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgres-acs
|
- postgres-acs
|
||||||
@@ -165,100 +156,10 @@ services:
|
|||||||
BASE_PATH: ./
|
BASE_PATH: ./
|
||||||
APP_CONFIG_ECM_HOST: "${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}"
|
APP_CONFIG_ECM_HOST: "${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}"
|
||||||
APP_BASE_SHARE_URL: "${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}/#/preview/s"
|
APP_BASE_SHARE_URL: "${PROXY_PROTOCOL}://${PROXY_HOST}:${PROXY_PORT}/#/preview/s"
|
||||||
APP_CONFIG_AUTH_TYPE: OAUTH
|
|
||||||
APP_CONFIG_OAUTH2_HOST: "${IDENTITY_SERVICE_BASEURL}/auth/realms/alfresco"
|
|
||||||
APP_CONFIG_OAUTH2_CLIENTID: alfresco
|
|
||||||
APP_CONFIG_OAUTH2_IMPLICIT_FLOW: "true"
|
|
||||||
APP_CONFIG_OAUTH2_REDIRECT_LOGIN: "/workspace/"
|
|
||||||
APP_CONFIG_OAUTH2_REDIRECT_LOGOUT: "/workspace/logout"
|
|
||||||
|
|
||||||
activiti-app:
|
|
||||||
image: alfresco/process-services:1.11.1.1
|
|
||||||
mem_limit: 512m
|
|
||||||
environment:
|
|
||||||
ACTIVITI_DATASOURCE_USERNAME: alfresco
|
|
||||||
ACTIVITI_DATASOURCE_PASSWORD: alfresco
|
|
||||||
ACTIVITI_DATASOURCE_DRIVER: org.postgresql.Driver
|
|
||||||
ACTIVITI_HIBERNATE_DIALECT: org.hibernate.dialect.PostgreSQLDialect
|
|
||||||
ACTIVITI_DATASOURCE_URL: 'jdbc:postgresql://postgres-aps:5432/activiti?characterEncoding=UTF-8'
|
|
||||||
ACTIVITI_ES_SERVER_TYPE: rest
|
|
||||||
ACTIVITI_ES_REST_CLIENT_ADDRESS: search-aps
|
|
||||||
ACTIVITI_ES_REST_CLIENT_PORT: 9200
|
|
||||||
ACTIVITI_ES_REST_CLIENT_SCHEMA: http
|
|
||||||
IDENTITY_SERVICE_ENABLED: "true"
|
|
||||||
IDENTITY_SERVICE_AUTH: $IDENTITY_SERVICE_BASEURL/auth
|
|
||||||
JAVA_OPTS: "-XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80"
|
|
||||||
depends_on:
|
|
||||||
- postgres-aps
|
|
||||||
volumes:
|
|
||||||
- "$ALFRESCO_LICENSE_DIR/aps:/root/.activiti/enterprise-license:ro"
|
|
||||||
|
|
||||||
activiti-admin:
|
|
||||||
image: alfresco/process-services-admin:1.11.1.1
|
|
||||||
mem_limit: 256m
|
|
||||||
environment:
|
|
||||||
ACTIVITI_ADMIN_DATASOURCE_USERNAME: alfresco
|
|
||||||
ACTIVITI_ADMIN_DATASOURCE_PASSWORD: alfresco
|
|
||||||
ACTIVITI_ADMIN_DATASOURCE_DRIVER: org.postgresql.Driver
|
|
||||||
ACTIVITI_ADMIN_HIBERNATE_DIALECT: org.hibernate.dialect.PostgreSQLDialect
|
|
||||||
ACTIVITI_ADMIN_DATASOURCE_URL: 'jdbc:postgresql://postgres-aps-admin:5432/activiti-admin?characterEncoding=UTF-8'
|
|
||||||
ACTIVITI_ADMIN_REST_APP_HOST: http://activiti-app
|
|
||||||
ACTIVITI_ADMIN_REST_APP_PORT: 8080
|
|
||||||
JAVA_OPTS: "-XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80"
|
|
||||||
depends_on:
|
|
||||||
- postgres-aps-admin
|
|
||||||
- activiti-app
|
|
||||||
|
|
||||||
postgres-aps:
|
|
||||||
image: postgres:11.6
|
|
||||||
mem_limit: 256m
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: activiti
|
|
||||||
POSTGRES_USER: alfresco
|
|
||||||
POSTGRES_PASSWORD: alfresco
|
|
||||||
command: postgres -c max_connections=300 -c log_min_messages=LOG
|
|
||||||
|
|
||||||
postgres-aps-admin:
|
|
||||||
image: postgres:11.6
|
|
||||||
mem_limit: 128m
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: activiti-admin
|
|
||||||
POSTGRES_USER: alfresco
|
|
||||||
POSTGRES_PASSWORD: alfresco
|
|
||||||
command: postgres -c max_connections=50 -c log_min_messages=LOG
|
|
||||||
|
|
||||||
search-aps:
|
|
||||||
image: elasticsearch:7.6.0
|
|
||||||
mem_limit: 512m
|
|
||||||
environment:
|
|
||||||
discovery.type: single-node
|
|
||||||
ES_JAVA_OPTS: "-Xms128m -Xmx256m"
|
|
||||||
ulimits:
|
|
||||||
memlock:
|
|
||||||
soft: -1
|
|
||||||
hard: -1
|
|
||||||
depends_on:
|
|
||||||
- activiti-app
|
|
||||||
|
|
||||||
identity:
|
|
||||||
image: alfresco/alfresco-identity-service:1.3
|
|
||||||
user: jboss
|
|
||||||
environment:
|
|
||||||
KEYCLOAK_USER: admin
|
|
||||||
KEYCLOAK_PASSWORD: admin
|
|
||||||
KEYCLOAK_HOSTNAME: auth.example.org
|
|
||||||
KEYCLOAK_IMPORT: /tmp/keycloak-alfresco-realm.json
|
|
||||||
KEYCLOAK_STATISTICS: enabled
|
|
||||||
networks:
|
|
||||||
default:
|
|
||||||
aliases:
|
|
||||||
- "auth.example.org"
|
|
||||||
volumes:
|
|
||||||
- ./keycloak-alfresco-realm.json:/tmp/keycloak-alfresco-realm.json:ro
|
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
build: ./nginx-ingress
|
build: ./nginx-ingress
|
||||||
image: local/nginx-ingress:acs-sync-share-adw-aps-aims
|
image: local/nginx-ingress:acs-sync-share-adw
|
||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -266,12 +167,17 @@ services:
|
|||||||
- sync
|
- sync
|
||||||
- share
|
- share
|
||||||
- digital-workspace
|
- digital-workspace
|
||||||
- activiti-app
|
|
||||||
- activiti-admin
|
|
||||||
- identity
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
shared-file-store-volume:
|
shared-file-store-volume:
|
||||||
driver_opts:
|
driver_opts:
|
||||||
type: tmpfs
|
type: tmpfs
|
||||||
device: tmpfs
|
device: tmpfs
|
||||||
|
acsbin-volume:
|
||||||
|
driver: local
|
||||||
|
acsdb-volume:
|
||||||
|
driver: local
|
||||||
|
activemq-volume:
|
||||||
|
driver: local
|
||||||
|
solrindex-volume:
|
||||||
|
driver: local
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"realm": "alfresco",
|
|
||||||
"enabled": true,
|
|
||||||
"sslRequired": "external",
|
|
||||||
"registrationAllowed": false,
|
|
||||||
"roles": {
|
|
||||||
"realm": [ {
|
|
||||||
"name": "user",
|
|
||||||
"description": "User privileges"
|
|
||||||
}, {
|
|
||||||
"name": "admin",
|
|
||||||
"description": "Administrator privileges"
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"clients": [
|
|
||||||
{
|
|
||||||
"clientId": "alfresco",
|
|
||||||
"name": "Alfresco Products",
|
|
||||||
"enabled": true,
|
|
||||||
"alwaysDisplayInConsole": false,
|
|
||||||
"redirectUris": [ "*" ],
|
|
||||||
"standardFlowEnabled": true,
|
|
||||||
"implicitFlowEnabled": true,
|
|
||||||
"directAccessGrantsEnabled": false,
|
|
||||||
"publicClient": true,
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"attributes": {
|
|
||||||
"login_theme": "alfresco"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"clientId": "acs-share",
|
|
||||||
"name": "ACS Share",
|
|
||||||
"enabled": true,
|
|
||||||
"alwaysDisplayInConsole": false,
|
|
||||||
"redirectUris": [ "*" ],
|
|
||||||
"standardFlowEnabled": true,
|
|
||||||
"implicitFlowEnabled": false,
|
|
||||||
"directAccessGrantsEnabled": false,
|
|
||||||
"publicClient": true,
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"attributes": {
|
|
||||||
"login_theme": "alfresco"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"clientId": "acs-sync",
|
|
||||||
"name": "Alfresco Sync Service Clients",
|
|
||||||
"enabled": true,
|
|
||||||
"alwaysDisplayInConsole": false,
|
|
||||||
"redirectUris": [
|
|
||||||
"http://127.0.0.1*",
|
|
||||||
"http://localhost*"
|
|
||||||
],
|
|
||||||
"standardFlowEnabled": true,
|
|
||||||
"implicitFlowEnabled": false,
|
|
||||||
"directAccessGrantsEnabled": false,
|
|
||||||
"publicClient": true,
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"attributes": {
|
|
||||||
"login_theme": "alfresco"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"requiredCredentials": [ "password" ],
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"username": "admin",
|
|
||||||
"email": "admin@app.activiti.com",
|
|
||||||
"enabled": true,
|
|
||||||
"credentials" : [
|
|
||||||
{
|
|
||||||
"type" : "password",
|
|
||||||
"value" : "admin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"realmRoles": [ "user", "admin" ]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -16,18 +16,6 @@ if [[ $ADW_URL ]]; then
|
|||||||
sed -i s%http:\/\/digital-workspace:8080%"$ADW_URL"%g /etc/nginx/nginx.conf
|
sed -i s%http:\/\/digital-workspace:8080%"$ADW_URL"%g /etc/nginx/nginx.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $APS_APP_URL ]]; then
|
|
||||||
sed -i s%http:\/\/activiti-app:8080%"$APS_APP_URL"%g /etc/nginx/nginx.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $APS_ADMIN_URL ]]; then
|
|
||||||
sed -i s%http:\/\/activiti-admin:8080%"$APS_ADMIN_URL"%g /etc/nginx/nginx.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $AIMS_URL ]]; then
|
|
||||||
sed -i s%http:\/\/identity:8080%"$AIMS_URL"%g /etc/nginx/nginx.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $ACCESS_LOG ]]; then
|
if [[ $ACCESS_LOG ]]; then
|
||||||
sed -i s%\#ENV_ACCESS_LOG%"access_log $ACCESS_LOG;"%g /etc/nginx/nginx.conf
|
sed -i s%\#ENV_ACCESS_LOG%"access_log $ACCESS_LOG;"%g /etc/nginx/nginx.conf
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -19,10 +19,7 @@ http {
|
|||||||
|
|
||||||
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
|
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
|
||||||
proxy_redirect off;
|
proxy_redirect off;
|
||||||
# proxy_buffering off;
|
proxy_buffering off;
|
||||||
proxy_buffer_size 64k;
|
|
||||||
proxy_buffers 4 256k;
|
|
||||||
proxy_busy_buffers_size 256k;
|
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
@@ -56,22 +53,11 @@ http {
|
|||||||
proxy_pass http://sync:9090/alfresco/;
|
proxy_pass http://sync:9090/alfresco/;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /activiti-app/ {
|
|
||||||
proxy_pass http://activiti-app:8080;
|
|
||||||
|
|
||||||
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
|
||||||
absolute_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /activiti-admin/ {
|
|
||||||
proxy_pass http://activiti-admin:8080;
|
|
||||||
|
|
||||||
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
|
||||||
absolute_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /share/ {
|
location /share/ {
|
||||||
proxy_pass http://share:8080;
|
proxy_pass http://share:8080;
|
||||||
|
|
||||||
|
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
||||||
|
absolute_redirect off;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /workspace/ {
|
location /workspace/ {
|
||||||
@@ -80,12 +66,5 @@ http {
|
|||||||
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
||||||
absolute_redirect off;
|
absolute_redirect off;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /auth/ {
|
|
||||||
proxy_pass http://identity:8080;
|
|
||||||
|
|
||||||
# If using external proxy / load balancer (for initial redirect if no trailing slash)
|
|
||||||
absolute_redirect off;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user