diff --git a/.github/workflows/api-test.yml b/.github/workflows/api-test.yml deleted file mode 100644 index 0bbc86619..000000000 --- a/.github/workflows/api-test.yml +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright © 2023 OpenIM. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: OpenIM API TEST - -on: - push: - branches: - - main - paths-ignore: - - "docs/**" - - "README.md" - - "README_zh-CN.md" - - "CONTRIBUTING.md" - pull_request: - branches: - - main - paths-ignore: - - "README.md" - - "README_zh-CN.md" - - "CONTRIBUTING.md" - - "docs/**" - -env: - GO_VERSION: "1.19" - GOLANGCI_VERSION: "v1.50.1" - -jobs: - execute-linux-systemd-scripts: - name: Execute OpenIM script on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - environment: - name: openim - strategy: - matrix: - go_version: ["1.20"] - os: ["ubuntu-latest"] - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Go ${{ matrix.go_version }} - uses: actions/setup-go@v4 - with: - go-version: ${{ matrix.go_version }} - id: go - - - name: Install Task - uses: arduino/setup-task@v1 - with: - version: '3.x' # If available, use the latest major version that's compatible - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Docker Operations - run: | - curl -o docker-compose.yml https://raw.githubusercontent.com/OpenIMSDK/openim-docker/main/example/basic-openim-server-dependency.yml - sudo docker compose up -d - sudo sleep 60 - - - name: Module Operations - run: | - sudo make tidy - sudo make tools.verify.go-gitlint - - - name: Build, Start, Check Services and Print Logs - run: | - sudo ./scripts/install/install.sh -i && \ - sudo ./scripts/install/install.sh -s && \ - (echo "An error occurred, printing logs:" && sudo cat ./_output/logs/* 2>/dev/null) - - - name: Run Test - run: | - sudo make test-api && \ - (echo "An error occurred, printing logs:" && sudo cat ./_output/logs/* 2>/dev/null) - - - name: Stop Services - run: | - sudo ./scripts/install/install.sh -u && \ - (echo "An error occurred, printing logs:" && sudo cat ./_output/logs/* 2>/dev/null) \ No newline at end of file diff --git a/.github/workflows/build-openim-web-image.yml b/.github/workflows/build-openim-web-image.yml index e040d5270..999c2e1e3 100644 --- a/.github/workflows/build-openim-web-image.yml +++ b/.github/workflows/build-openim-web-image.yml @@ -15,11 +15,11 @@ name: Build OpenIM Web Docker image on: - schedule: - - cron: '30 3 * * *' +# schedule: +# - cron: '30 3 * * *' push: branches: - - main + # - main - release-* tags: - v* diff --git a/.github/workflows/create_branch_on_tag.yml b/.github/workflows/create-branch-on-tag.yml similarity index 100% rename from .github/workflows/create_branch_on_tag.yml rename to .github/workflows/create-branch-on-tag.yml diff --git a/chat b/chat deleted file mode 100755 index b79e06dd7..000000000 Binary files a/chat and /dev/null differ diff --git a/deployments/README.md b/deployments/README.md index e952830ea..0f73a553e 100644 --- a/deployments/README.md +++ b/deployments/README.md @@ -123,6 +123,30 @@ Explore our Helm-Charts repository and read through: [Helm-Charts Repository](ht Using the helm charts repository, you can ignore the following configuration, but if you want to just use the server and scale on top of it, you can go ahead: +**Use the Helm template to generate the deployment yaml file: `openim-charts.yaml`** + +**Gen Image:** + +```bash +../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml +``` + +**Gen Charts:** + +```bash +for chart in ./charts/*/; do + if [[ "$chart" == *"generated-configs"* || "$chart" == *"helmfile.yaml"* ]]; then + continue + fi + + if [ -f "${chart}values.yaml" ]; then + helm template "$chart" -f "./charts/generated-configs/helm-image.yaml" -f "./charts/generated-configs/config.yaml" -f "./charts/generated-configs/notification.yaml" >> openim-charts.yaml + else + helm template "$chart" >> openim-charts.yaml + fi +done +``` + **Use Helmfile:** ```bash diff --git a/deployments/openim-charts.yaml b/deployments/openim-charts.yaml new file mode 100644 index 000000000..59815dbd5 --- /dev/null +++ b/deployments/openim-charts.yaml @@ -0,0 +1,1262 @@ +--- +# Source: openim-api/templates/app-cm.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: openim-cm +data: + config.yaml: |+ + notification.yaml: |+ +--- +# Source: openim-api/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-api + labels: + helm.sh/chart: openim-api-0.1.0 + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name +--- +# Source: openim-api/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-api + labels: + helm.sh/chart: openim-api-0.1.0 + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-api + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-api/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-api + labels: + helm.sh/chart: openim-api-0.1.0 + app.kubernetes.io/name: openim-api + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-api + port: + number: 80 +--- +# Source: openim-msggateway/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-msggateway + labels: + helm.sh/chart: openim-msggateway-0.1.0 + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + - port: 88 + targetPort: rpc + protocol: TCP + name: rpc + selector: + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name +--- +# Source: openim-msggateway/templates/deployment.yaml +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-msggateway + labels: + helm.sh/chart: openim-msggateway-0.1.0 + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-msggateway + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + - name: rpc + containerPort: 88 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-msggateway/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-msggateway + labels: + helm.sh/chart: openim-msggateway-0.1.0 + app.kubernetes.io/name: openim-msggateway + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-msggateway + port: + number: 80 +--- +# Source: openim-msgtransfer/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-msgtransfer + labels: + helm.sh/chart: openim-msgtransfer-0.1.0 + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name +--- +# Source: openim-msgtransfer/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-msgtransfer + labels: + helm.sh/chart: openim-msgtransfer-0.1.0 + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-msgtransfer + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-msgtransfer/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-msgtransfer + labels: + helm.sh/chart: openim-msgtransfer-0.1.0 + app.kubernetes.io/name: openim-msgtransfer + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-msgtransfer + port: + number: 80 +--- +# Source: openim-push/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-push + labels: + helm.sh/chart: openim-push-0.1.0 + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name +--- +# Source: openim-push/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-push + labels: + helm.sh/chart: openim-push-0.1.0 + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-push + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-push/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-push + labels: + helm.sh/chart: openim-push-0.1.0 + app.kubernetes.io/name: openim-push + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-push + port: + number: 80 +--- +# Source: openim-rpc-auth/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-auth + labels: + helm.sh/chart: openim-rpc-auth-0.1.0 + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-auth/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-auth + labels: + helm.sh/chart: openim-rpc-auth-0.1.0 + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-auth + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-auth/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-auth + labels: + helm.sh/chart: openim-rpc-auth-0.1.0 + app.kubernetes.io/name: openim-rpc-auth + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-auth + port: + number: 80 +--- +# Source: openim-rpc-conversation/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-conversation + labels: + helm.sh/chart: openim-rpc-conversation-0.1.0 + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-conversation/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-conversation + labels: + helm.sh/chart: openim-rpc-conversation-0.1.0 + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-conversation + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-conversation/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-conversation + labels: + helm.sh/chart: openim-rpc-conversation-0.1.0 + app.kubernetes.io/name: openim-rpc-conversation + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-conversation + port: + number: 80 +--- +# Source: openim-rpc-friend/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-friend + labels: + helm.sh/chart: openim-rpc-friend-0.1.0 + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-friend/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-friend + labels: + helm.sh/chart: openim-rpc-friend-0.1.0 + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-friend + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-friend/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-friend + labels: + helm.sh/chart: openim-rpc-friend-0.1.0 + app.kubernetes.io/name: openim-rpc-friend + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-friend + port: + number: 80 +--- +# Source: openim-rpc-group/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-group + labels: + helm.sh/chart: openim-rpc-group-0.1.0 + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-group/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-group + labels: + helm.sh/chart: openim-rpc-group-0.1.0 + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-group + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-group/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-group + labels: + helm.sh/chart: openim-rpc-group-0.1.0 + app.kubernetes.io/name: openim-rpc-group + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-group + port: + number: 80 +--- +# Source: openim-rpc-msg/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-msg + labels: + helm.sh/chart: openim-rpc-msg-0.1.0 + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-msg/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-msg + labels: + helm.sh/chart: openim-rpc-msg-0.1.0 + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-msg + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-msg/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-msg + labels: + helm.sh/chart: openim-rpc-msg-0.1.0 + app.kubernetes.io/name: openim-rpc-msg + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-msg + port: + number: 80 +--- +# Source: openim-rpc-third/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-third + labels: + helm.sh/chart: openim-rpc-third-0.1.0 + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-third/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-third + labels: + helm.sh/chart: openim-rpc-third-0.1.0 + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-third + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-third/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-third + labels: + helm.sh/chart: openim-rpc-third-0.1.0 + app.kubernetes.io/name: openim-rpc-third + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-third + port: + number: 80 +--- +# Source: openim-rpc-user/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: release-name-openim-rpc-user + labels: + helm.sh/chart: openim-rpc-user-0.1.0 + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name +--- +# Source: openim-rpc-user/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: release-name-openim-rpc-user + labels: + helm.sh/chart: openim-rpc-user-0.1.0 + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name + template: + metadata: + labels: + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name + spec: + serviceAccountName: default + securityContext: + {} + containers: + - name: openim-rpc-user + securityContext: + {} + image: "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api:latest" + imagePullPolicy: Always + ports: + - name: http + containerPort: 80 + protocol: TCP + #livenessProbe: + # httpGet: + # path: / + # port: http + #readinessProbe: + # httpGet: + # path: / + # port: http + resources: + {} + volumeMounts: + - mountPath: /openim/openim-server/config/config.yaml + name: config + subPath: config.yaml + - mountPath: /openim/openim-server/config/ + name: config + subPath: notification.yaml + volumes: + - name: config + configMap: + name: openim-cm +--- +# Source: openim-rpc-user/templates/ingress.yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: release-name-openim-rpc-user + labels: + helm.sh/chart: openim-rpc-user-0.1.0 + app.kubernetes.io/name: openim-rpc-user + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: "1.16.0" + app.kubernetes.io/managed-by: Helm + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /./templates/helm-image.yaml + nginx.ingress.kubernetes.io/use-regex: "true" +spec: + ingressClassName: nginx + tls: + - hosts: + - "openim.server.com" + secretName: webapitls + rules: + - host: "openim.server.com" + http: + paths: + - path: /api(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: release-name-openim-rpc-user + port: + number: 80 diff --git a/deployments/templates/chat.yaml b/deployments/templates/chat.yaml index 4f4936b13..3c3862bce 100644 --- a/deployments/templates/chat.yaml +++ b/deployments/templates/chat.yaml @@ -96,7 +96,14 @@ verifyCode: accessKeySecret: "" signName: "" verificationCodeTemplateCode: "" - + mail: # 根据对应的发件邮箱更改 sendMail、senderAuthorizationCode、smtpAddr、smtpPort 即可 + title: "" + senderMail: "" # 发送者 + senderAuthorizationCode: "" # 授权码 + smtpAddr: "smtp.qq.com" # smtp 服务器地址 + smtpPort: 25 # smtp 服务器邮件发送端口 + testDepartMentID: 001 + imAPIURL: http://127.0.0.1:10002 ###################### Proxy Header ###################### # 获取ip的header,没有配置直接获取远程地址 diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 1e7fe08f8..f9d6f507f 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -29,8 +29,6 @@ import ( "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" - "go.mongodb.org/mongo-driver/mongo" - "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/convert" "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" @@ -38,6 +36,8 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/common/db/unrelation" "github.com/openimsdk/open-im-server/v3/pkg/common/kafka" + "go.mongodb.org/mongo-driver/mongo" + pbmsg "github.com/OpenIMSDK/protocol/msg" "github.com/OpenIMSDK/protocol/sdkws" "github.com/OpenIMSDK/tools/utils" diff --git a/scripts/README.md b/scripts/README.md index 242e76017..b55049a7b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -39,7 +39,7 @@ scripts/ ├── demo.sh # Demonstration or example script. ├── docker-check-service.sh # Docker script to check services' status. ├── docker-start-all.sh # Docker script to start all containers/services. -├── ensure_tag.sh # Ensure correct tags or labeling. +├── ensure-tag.sh # Ensure correct tags or labeling. ├── env_check.sh # Environment verification and checking. ├── gen-swagger-docs.sh # Script to generate Swagger documentation. ├── genconfig.sh # Generate configuration files. diff --git a/scripts/ensure_tag.sh b/scripts/ensure-tag.sh similarity index 100% rename from scripts/ensure_tag.sh rename to scripts/ensure-tag.sh diff --git a/scripts/env_check.sh b/scripts/env_check.sh deleted file mode 100755 index 08d6a84b1..000000000 --- a/scripts/env_check.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash - -# Copyright © 2023 OpenIM. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#Include shell font styles and some basic information -SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) -OPENIM_ROOT=$(dirname "${SCRIPTS_ROOT}")/.. - -#Include shell font styles and some basic information -source $SCRIPTS_ROOT/path_info.sh -source $SCRIPTS_ROOT/lib/init.sh - -cd $SCRIPTS_ROOT - -echo -e "check time synchronize.................................." -t=`curl http://time.akamai.com/?iso -s` -t1=`date -d $t +%s` -t2=`date +%s` -let between=t2-t1 -if [[ $between -gt 10 ]] || [[ $between -lt -10 ]]; then - echo -e ${RED_PREFIX}"Warning: The difference between the iso time and the server's time is too large: "$between"s" ${COLOR_SUFFIX} -else - echo -e ${GREEN_PREFIX} "ok: Server time is synchronized " ${COLOR_SUFFIX} -fi - - -echo -e "check login user........................................" -user=`whoami` -if [ $user == "root" ] ; then - echo -e ${GREEN_PREFIX} "ok: login user is root" ${COLOR_SUFFIX} -else - echo -e ${RED_PREFIX}"Warning: The current user is not root "${COLOR_SUFFIX} -fi - -echo -e "check docker............................................" -docker_running=`systemctl status docker | grep running | grep active | wc -l` - -docker_version=`docker-compose -v; docker -v` - -if [ $docker_running -gt 0 ]; then - echo -e ${GREEN_PREFIX} "ok: docker is running" ${COLOR_SUFFIX} - echo -e ${GREEN_PREFIX} $docker_version ${COLOR_SUFFIX} - -else - echo -e ${RED_PREFIX}"docker not running"${COLOR_SUFFIX} -fi - - -echo -e "check environment......................................." -SYSTEM=`uname -s` -if [ $SYSTEM != "Linux" ] ; then - echo -e ${RED_PREFIX}"Warning: Currently only Linux is supported"${COLOR_SUFFIX} -else - echo -e ${GREEN_PREFIX} "ok: system is linux"${COLOR_SUFFIX} -fi - -echo -e "check memory............................................" -available=`free -m | grep Mem | awk '{print $NF}'` -if [ $available -lt 2000 ] ; then - echo -e ${RED_PREFIX}"Warning: Your memory not enough, available is: " "$available"m${COLOR_SUFFIX}"\c" - echo -e ${RED_PREFIX}", must be greater than 2000m"${COLOR_SUFFIX} -else - echo -e ${GREEN_PREFIX} "ok: available memory is: "$available"m${COLOR_SUFFIX}" -fi diff --git a/scripts/install/test.sh b/scripts/install/test.sh index 2e4d8cbb9..7bcea3b82 100755 --- a/scripts/install/test.sh +++ b/scripts/install/test.sh @@ -38,9 +38,8 @@ IAM_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. [[ -z ${COMMON_SOURCED} ]] && source ${IAM_ROOT}/scripts/install/common.sh # API Server API Address:Port -INSECURE_OPENIMAPI=${IAM_APISERVER_HOST}:${API_OPENIM_PORT} +INSECURE_OPENIMAPI="http://${OPENIM_API_HOST}:${API_OPENIM_PORT}" INSECURE_OPENIMAUTO=${OPENIM_RPC_AUTH_HOST}:${OPENIM_AUTH_PORT} - CCURL="curl -f -s -XPOST" # Create UCURL="curl -f -s -XPUT" # Update RCURL="curl -f -s -XGET" # Retrieve @@ -73,7 +72,7 @@ function openim::test::auth() { # Define a function to get a token (Admin Token) openim::test::get_token() { - token_response=$(${CCURL} "${OperationID}" "${Header}" http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/auth/user_token \ + token_response=$(${CCURL} "${OperationID}" "${Header}" ${INSECURE_OPENIMAPI}/auth/user_token \ -d'{"secret": "'"$SECRET"'","platformID": 1,"userID": "openIM123456"}') token=$(echo $token_response | grep -Po 'token[" :]+\K[^"]+') echo "$token" @@ -94,7 +93,7 @@ EOF ) echo "Requesting force logout for user: $request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/auth/force_logout" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/auth/force_logout" -d "${request_body}") openim::test::check_error "$response" } @@ -127,7 +126,7 @@ EOF echo "Request body for user registration: $request_body" # Send the registration request - local user_register_response=$(${CCURL} "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/user_register" -d "${request_body}") + local user_register_response=$(${CCURL} "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/user_register" -d "${request_body}") # Check for errors in the response openim::test::check_error "$user_register_response" @@ -148,7 +147,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/account_check" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/account_check" -d "${request_body}") openim::test::check_error "$response" } @@ -166,7 +165,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/get_users" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/get_users" -d "${request_body}") openim::test::check_error "$response" } @@ -184,7 +183,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/get_users_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/get_users_info" -d "${request_body}") openim::test::check_error "$response" } @@ -204,7 +203,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/get_users_online_status" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/get_users_online_status" -d "${request_body}") openim::test::check_error "$response" } @@ -223,7 +222,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/update_user_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/update_user_info" -d "${request_body}") openim::test::check_error "$response" } @@ -238,7 +237,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/get_subscribe_users_status" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/get_subscribe_users_status" -d "${request_body}") openim::test::check_error "$response" } @@ -259,7 +258,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/subscribe_users_status" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/subscribe_users_status" -d "${request_body}") openim::test::check_error "$response" } @@ -275,7 +274,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/set_global_msg_recv_opt" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/user/set_global_msg_recv_opt" -d "${request_body}") openim::test::check_error "$response" } @@ -330,7 +329,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/is_friend" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/is_friend" -d "${request_body}") openim::test::check_error "$response" } @@ -346,7 +345,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/delete_friend" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/delete_friend" -d "${request_body}") openim::test::check_error "$response" } @@ -365,7 +364,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/get_friend_apply_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/get_friend_apply_list" -d "${request_body}") openim::test::check_error "$response" } @@ -384,7 +383,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/get_friend_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/get_friend_list" -d "${request_body}") openim::test::check_error "$response" } @@ -401,7 +400,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/set_friend_remark" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/set_friend_remark" -d "${request_body}") openim::test::check_error "$response" } @@ -419,7 +418,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/add_friend" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/add_friend" -d "${request_body}") openim::test::check_error "$response" } @@ -437,7 +436,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/import_friend" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/import_friend" -d "${request_body}") openim::test::check_error "$response" } @@ -456,7 +455,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/add_friend_response" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/add_friend_response" -d "${request_body}") openim::test::check_error "$response" } @@ -475,7 +474,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/get_self_friend_apply_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/get_self_friend_apply_list" -d "${request_body}") openim::test::check_error "$response" } @@ -491,7 +490,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/add_black" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/add_black" -d "${request_body}") openim::test::check_error "$response" } @@ -507,7 +506,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/remove_black" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/remove_black" -d "${request_body}") openim::test::check_error "$response" } @@ -526,7 +525,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/friend/get_black_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/friend/get_black_list" -d "${request_body}") openim::test::check_error "$response" } @@ -619,7 +618,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/create_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/create_group" -d "${request_body}") openim::test::check_error "$response" } @@ -639,7 +638,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/invite_user_to_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/invite_user_to_group" -d "${request_body}") openim::test::check_error "$response" } @@ -656,7 +655,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/transfer_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/transfer_group" -d "${request_body}") openim::test::check_error "$response" } @@ -671,7 +670,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_groups_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_groups_info" -d "${request_body}") openim::test::check_error "$response" } @@ -690,7 +689,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/kick_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/kick_group" -d "${request_body}") openim::test::check_error "$response" } @@ -706,7 +705,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_group_members_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_group_members_info" -d "${request_body}") openim::test::check_error "$response" } @@ -725,7 +724,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_group_member_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_group_member_list" -d "${request_body}") openim::test::check_error "$response" } @@ -744,7 +743,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_joined_group_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_joined_group_list" -d "${request_body}") openim::test::check_error "$response" } @@ -769,7 +768,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/set_group_member_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/set_group_member_info" -d "${request_body}") openim::test::check_error "$response" } @@ -784,7 +783,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/mute_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/mute_group" -d "${request_body}") openim::test::check_error "$response" } @@ -799,7 +798,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/cancel_mute_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/cancel_mute_group" -d "${request_body}") openim::test::check_error "$response" } @@ -814,7 +813,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/dismiss_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/dismiss_group" -d "${request_body}") openim::test::check_error "$response" } @@ -830,7 +829,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/cancel_mute_group_member" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/cancel_mute_group_member" -d "${request_body}") openim::test::check_error "$response" } @@ -848,7 +847,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/join_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/join_group" -d "${request_body}") openim::test::check_error "$response" } @@ -873,7 +872,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/set_group_info" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/set_group_info" -d "${request_body}") openim::test::check_error "$response" } @@ -890,7 +889,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/quit_group" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/quit_group" -d "${request_body}") openim::test::check_error "$response" } @@ -909,7 +908,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_recv_group_applicationList" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_recv_group_applicationList" -d "${request_body}") openim::test::check_error "$response" } @@ -927,7 +926,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/group_application_response" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/group_application_response" -d "${request_body}") openim::test::check_error "$response" } @@ -946,7 +945,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_user_req_group_applicationList" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_user_req_group_applicationList" -d "${request_body}") openim::test::check_error "$response" } @@ -963,7 +962,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/mute_group_member" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/mute_group_member" -d "${request_body}") openim::test::check_error "$response" } @@ -981,7 +980,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/group/get_group_users_req_application_list" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/group/get_group_users_req_application_list" -d "${request_body}") openim::test::check_error "$response" } @@ -1078,7 +1077,7 @@ function openim::test::group() { # Define a function to register a user openim::register_user() { - user_register_response=$(${CCURL} "${Header}" http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/user/user_register \ + user_register_response=$(${CCURL} "${Header}" ${INSECURE_OPENIMAPI}/user/user_register \ -d'{ "secret": "openIM123", "users": [{"userID": "11111112","nickname": "yourNickname","faceURL": "yourFaceURL"}] @@ -1090,7 +1089,7 @@ openim::register_user() { # Define a function to check the account openim::test::check_account() { local token=$1 - account_check_response=$(${CCURL} "${Header}" -H"operationID: 1646445464564" -H"token: ${token}" http://localhost:${API_OPENIM_PORT}/user/account_check \ + account_check_response=$(${CCURL} "${Header}" -H"operationID: 1646445464564" -H"token: ${token}" ${INSECURE_OPENIMAPI}/user/account_check \ -d'{ "checkUserIDs": ["11111111","11111112"] }') @@ -1164,7 +1163,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/msg/send_msg" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/msg/send_msg" -d "${request_body}") openim::test::check_error "$response" } @@ -1185,7 +1184,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/msg/revoke_msg" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/msg/revoke_msg" -d "${request_body}") openim::test::check_error "$response" } @@ -1203,7 +1202,7 @@ EOF ) echo "$request_body" - local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "http://${OPENIM_API_HOST}:${API_OPENIM_PORT}/msg/user_clear_all_msg" -d "${request_body}") + local response=$(${CCURL} "${Token}" "${OperationID}" "${Header}" "${INSECURE_OPENIMAPI}/msg/user_clear_all_msg" -d "${request_body}") openim::test::check_error "$response" } diff --git a/scripts/make-rules/release.mk b/scripts/make-rules/release.mk index 862aa3065..68bf05898 100644 --- a/scripts/make-rules/release.mk +++ b/scripts/make-rules/release.mk @@ -34,7 +34,7 @@ release.tag: tools.verify.gsemver release.ensure-tag ## release.ensure-tag: ensure tag .PHONY: release.ensure-tag release.ensure-tag: tools.verify.gsemver - @scripts/ensure_tag.sh + @scripts/ensure-tag.sh ## release.help: Display help information about the release package .PHONY: release.help diff --git a/test/e2e/api/.keep b/test/e2e/api/.keep deleted file mode 100644 index 4f07f1caf..000000000 --- a/test/e2e/api/.keep +++ /dev/null @@ -1 +0,0 @@ -.keep \ No newline at end of file diff --git a/test/e2e/api/user/curd.go b/test/e2e/api/user/curd.go index 28b55b682..9e8286384 100644 --- a/test/e2e/api/user/curd.go +++ b/test/e2e/api/user/curd.go @@ -1,7 +1,10 @@ package user import ( + "fmt" + gettoken "github.com/openimsdk/open-im-server/v3/test/e2e/api/token" + "github.com/openimsdk/open-im-server/v3/test/e2e/framework/config" ) // UserInfoRequest represents a request to get or update user information @@ -17,14 +20,20 @@ type GetUsersOnlineStatusRequest struct { // GetUsersInfo retrieves detailed information for a list of user IDs func GetUsersInfo(token string, userIDs []string) error { + + url := fmt.Sprintf("http://%s:%s/user/get_users_info", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := UserInfoRequest{ UserIDs: userIDs, } - return sendPostRequestWithToken("http://your-api-host:port/user/get_users_info", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } // UpdateUserInfo updates the information for a user func UpdateUserInfo(token, userID, nickname, faceURL string) error { + + url := fmt.Sprintf("http://%s:%s/user/update_user_info", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := UserInfoRequest{ UserInfo: &gettoken.User{ UserID: userID, @@ -32,13 +41,16 @@ func UpdateUserInfo(token, userID, nickname, faceURL string) error { FaceURL: faceURL, }, } - return sendPostRequestWithToken("http://your-api-host:port/user/update_user_info", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } // GetUsersOnlineStatus retrieves the online status for a list of user IDs func GetUsersOnlineStatus(token string, userIDs []string) error { + + url := fmt.Sprintf("http://%s:%s/user/get_users_online_status", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := GetUsersOnlineStatusRequest{ UserIDs: userIDs, } - return sendPostRequestWithToken("http://your-api-host:port/user/get_users_online_status", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } diff --git a/test/e2e/api/user/user.go b/test/e2e/api/user/user.go index 63c6659a0..66419b735 100644 --- a/test/e2e/api/user/user.go +++ b/test/e2e/api/user/user.go @@ -8,6 +8,7 @@ import ( "net/http" gettoken "github.com/openimsdk/open-im-server/v3/test/e2e/api/token" + "github.com/openimsdk/open-im-server/v3/test/e2e/framework/config" ) // ForceLogoutRequest represents a request to force a user logout @@ -34,30 +35,39 @@ type Pagination struct { // ForceLogout forces a user to log out func ForceLogout(token, userID string, platformID int) error { + + url := fmt.Sprintf("http://%s:%s/auth/force_logout", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := ForceLogoutRequest{ PlatformID: platformID, UserID: userID, } - return sendPostRequestWithToken("http://your-api-host:port/auth/force_logout", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } // CheckUserAccount checks if the user accounts exist func CheckUserAccount(token string, userIDs []string) error { + + url := fmt.Sprintf("http://%s:%s/user/account_check", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := CheckUserAccountRequest{ CheckUserIDs: userIDs, } - return sendPostRequestWithToken("http://your-api-host:port/user/account_check", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } // GetUsers retrieves a list of users with pagination func GetUsers(token string, pageNumber, showNumber int) error { + + url := fmt.Sprintf("http://%s:%s/user/account_check", config.LoadConfig().APIHost, config.LoadConfig().APIPort) + requestBody := GetUsersRequest{ Pagination: Pagination{ PageNumber: pageNumber, ShowNumber: showNumber, }, } - return sendPostRequestWithToken("http://your-api-host:port/user/get_users", token, requestBody) + return sendPostRequestWithToken(url, token, requestBody) } // sendPostRequestWithToken sends a POST request with a token in the header diff --git a/test/e2e/framework/config/.keep b/test/e2e/framework/config/.keep deleted file mode 100644 index 4f07f1caf..000000000 --- a/test/e2e/framework/config/.keep +++ /dev/null @@ -1 +0,0 @@ -.keep \ No newline at end of file diff --git a/test/e2e/framework/config/config.go b/test/e2e/framework/config/config.go index dcf87cecf..f790de5f3 100644 --- a/test/e2e/framework/config/config.go +++ b/test/e2e/framework/config/config.go @@ -1,6 +1,9 @@ package config -import "flag" +import ( + "flag" + "os" +) // Flags is the flag set that AddOptions adds to. Test authors should // also use it instead of directly adding to the global command line. @@ -19,3 +22,49 @@ func CopyFlags(source *flag.FlagSet, target *flag.FlagSet) { target.Var(flag.Value, flag.Name, flag.Usage) }) } + +// Config defines the configuration structure for the OpenIM components. +type Config struct { + APIHost string + APIPort string + MsgGatewayHost string + MsgTransferHost string + PushHost string + RPCAuthHost string + RPCConversationHost string + RPCFriendHost string + RPCGroupHost string + RPCMsgHost string + RPCThirdHost string + RPCUserHost string + // Add other configuration fields as needed +} + +// LoadConfig loads the configurations from environment variables or default values. +func LoadConfig() *Config { + return &Config{ + APIHost: getEnv("OPENIM_API_HOST", "127.0.0.1"), + APIPort: getEnv("API_OPENIM_PORT", "10002"), + + // TODO: Set default variable + MsgGatewayHost: getEnv("OPENIM_MSGGATEWAY_HOST", "default-msggateway-host"), + MsgTransferHost: getEnv("OPENIM_MSGTRANSFER_HOST", "default-msgtransfer-host"), + PushHost: getEnv("OPENIM_PUSH_HOST", "default-push-host"), + RPCAuthHost: getEnv("OPENIM_RPC_AUTH_HOST", "default-rpc-auth-host"), + RPCConversationHost: getEnv("OPENIM_RPC_CONVERSATION_HOST", "default-rpc-conversation-host"), + RPCFriendHost: getEnv("OPENIM_RPC_FRIEND_HOST", "default-rpc-friend-host"), + RPCGroupHost: getEnv("OPENIM_RPC_GROUP_HOST", "default-rpc-group-host"), + RPCMsgHost: getEnv("OPENIM_RPC_MSG_HOST", "default-rpc-msg-host"), + RPCThirdHost: getEnv("OPENIM_RPC_THIRD_HOST", "default-rpc-third-host"), + RPCUserHost: getEnv("OPENIM_RPC_USER_HOST", "default-rpc-user-host"), + } +} + +// getEnv is a helper function to read an environment variable or return a default value. +func getEnv(key, defaultValue string) string { + value, exists := os.LookupEnv(key) + if !exists { + return defaultValue + } + return value +}