Open Closed

Angular-project-gives-has-been-blocked-by-CORS-policy-on-only-production #8799


User avatar
0
consultant.ahmet.ulusoy created

19 Answer(s)
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Angular docker file:
    FROM node:22.13-alpine as builder
    WORKDIR /src

    COPY . .
    WORKDIR /src

    RUN yarn
    RUN yarn run build:prod

    FROM nginx:alpine as publish

    COPY --from=builder /src/dynamic-env.json /usr/share/nginx/html
    COPY --from=builder /src/nginx.conf /etc/nginx/conf.d/default.conf
    COPY --from=builder /src/dist/treva /usr/share/nginx/html

    environment.ts:
    import { Environment } from '@abp/ng.core';

    const baseUrl = 'http://localhost:4200';

    const oAuthConfig = {
    issuer: 'https://treva-authserver.tav.aero/',
    // redirectUri: baseUrl,
    clientId: 'WebSite',
    // responseType: 'code',
    dummyClientSecret: '1q2w3e*',
    scope: 'offline_access openid address email phone profile roles AuthServer AdministrationService GdprService LanguageService ChatService ContentManagementService DocumentManagementService FormManagementService EmailService SmsService NotificationService DemoService FastTrackService LoungeService AtuService DutyFreeService',
    requireHttps: false,
    impersonation: {
    tenantImpersonation: true,
    userImpersonation: true
    }
    };

    export const environment = {
    production: false,
    application: {
    baseUrl,
    name: 'Treva'
    },
    localization: {
    defaultResourceName: 'Treva'
    },
    oAuthConfig,
    apis: {
    default: {
    url: 'https://treva-publicgateway.tav.aero',
    rootNamespace: 'TavTechnologies.Treva'
    },
    AbpAccountPublic: {
    url: oAuthConfig.issuer,
    rootNamespace: 'AbpAccountPublic'
    }
    }
    } as Environment;

    environment.prod.ts:
    import { Environment } from '@abp/ng.core';

    const baseUrl = 'https://treva-website.tav.aero';

    const oAuthConfig = {
    issuer: 'https://treva-authserver.tav.aero/',
    // redirectUri: baseUrl,
    clientId: 'WebSite',
    // responseType: 'code',
    dummyClientSecret: '1q2w3e*',
    scope: 'offline_access openid address email phone profile roles AuthServer AdministrationService GdprService LanguageService ChatService ContentManagementService DocumentManagementService FormManagementService EmailService SmsService NotificationService DemoService FastTrackService LoungeService AtuService DutyFreeService',
    requireHttps: true,
    impersonation: {
    tenantImpersonation: true,
    userImpersonation: true
    },
    strictDiscoveryDocumentValidation: false,
    skipIssuerCheck: true
    };

    export const environment = {
    production: true,
    application: {
    baseUrl,
    name: 'Treva',
    },
    localization: {
    defaultResourceName: 'Treva'
    },
    oAuthConfig,
    apis: {
    default: {
    url: 'https://treva-publicgateway.tav.aero',
    rootNamespace: 'TavTechnologies.Treva'
    },
    AbpAccountPublic: {
    url: oAuthConfig.issuer,
    rootNamespace: 'AbpAccountPublic'
    }
    },
    remoteEnv: {
    url: '/getEnvConfig',
    mergeStrategy: 'overwrite'
    }
    } as Environment;

    website-configmap.yaml:
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: "treva-website-configmap"
    data:
    dynamic-env.json: |-
    {
    "production": "true",
    "application": {
    "baseUrl": "https://treva-website.tav.aero",
    "name": "Treva",
    "logoUrl": ""
    },
    "localization": {
    "defaultResourceName": "Treva"
    },
    "oAuthConfig": {
    "issuer": "https://treva-authserver.tav.aero",
    "clientId": "WebSite",
    "dummyClientSecret": "1q2w3e*",
    "scope": "offline_access openid address email phone profile roles AuthServer AdministrationService AuditLoggingService ChatService ContentManagementService DemoService DocumentManagementService EmailService FileManagementService FormManagementService GdprService IdentityService LanguageService NotificationService SaasService SmsService FastTrackService LoungeService AtuService DutyFreeService SettingService ProfileService OrderService PaymentService",
    "requireHttps": "true",
    "impersonation": {
    "tenantImpersonation": "true",
    "userImpersonation": "true"
    },
    "strictDiscoveryDocumentValidation": "false",
    "skipIssuerCheck": "true"
    },
    "apis": {
    "default": {
    "url": "https://treva-publicgateway.tav.aero",
    "rootNamespace": "TavTechnologies.Treva"
    },
    "AbpAccountPublic": {
    "url": "https://treva-authserver.tav.aero",
    "rootNamespace": "AbpAccountPublic"
    }
    }
    }

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    PublicGatewayLog:
    [12:00:35 INF] Request starting HTTP/1.1 OPTIONS http://treva-publicgateway.tav.aero/api/abp/application-configuration?includeLocalizationResources=false - null null
    [12:00:35 INF] CORS policy execution failed.
    [12:00:35 INF] Request origin https://treva-website.tav.aero does not have permission to access the resource.
    [12:00:35 INF] Request finished HTTP/1.1 OPTIONS http://treva-publicgateway.tav.aero/api/abp/application-configuration?includeLocalizationResources=false - 204 null null 0.2578ms

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    image.png

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Dear friends can you help me, please?

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Hello,

    You can configure CORS and others via appsettings.json of end applications(e.g. AuthServer, HttpApiHost, etc) like below:

    Screenshot 2025-02-14 at 11.45.22.png

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Hello Berkan,

    Thank you for your quick response. I already add the "https://treva-website.tav.aero" value to app settings, helm chart values and I can see the CORS values in pod yaml too.

    I couldn't find a proper way too understand the real problem.

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Hello,

    When you look at the pod's container, can you see that the relevant environment variable is set? ,

    Also, the problem seems to be caused by CORS, but can you disable it as mentioned in this document to clear your doubts here?

    You can search for context.Services.AddCors in the solution and find where it is configured.

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    TrevaPublicGatewayModule:

    private static void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration)
        {
            var corsOrigins = configuration["App:CorsOrigins"];
            context.Services.AddCors(options =>
            {
                options.AddDefaultPolicy(builder =>
                {
                    if (!corsOrigins.IsNullOrEmpty())
                    {
                        builder
                            .WithOrigins(
                                corsOrigins!
                                    .Split(",", StringSplitOptions.RemoveEmptyEntries)
                                    .Select(o => o.RemovePostFix("/"))
                                    .ToArray()
                            )
                            .WithAbpExposedHeaders()
                            .SetIsOriginAllowedToAllowWildcardSubdomains()
                            .AllowAnyHeader()
                            .AllowAnyMethod()
                            .AllowCredentials();
                    }
                });
            });
        }
    
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    website.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "treva-website"
    spec:
      selector:
        matchLabels:
          app: "treva-website"
      template:
        metadata:
          labels:
            app: "treva-website"
        spec:
          containers:
          - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
            imagePullPolicy: "{{ .Values.image.pullPolicy }}"
            name: "treva-website"
            ports:
            - name: "http"
              containerPort: 80
            volumeMounts:
            - name: config-volume
              mountPath: /usr/share/nginx/html/dynamic-env.json
              subPath: dynamic-env.json
          volumes:
          - name: config-volume
            configMap:
              name: treva-website-configmap
    
    **website-configmap.yaml**:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: "treva-website-configmap"
    data:
      dynamic-env.json: |-
        {
            "production": "true",
            "application": {
                "baseUrl": "https://treva-website.tav.aero",
                "name": "Treva",
                "logoUrl": ""
            },
            "localization": {
                "defaultResourceName": "Treva"
            },
            "oAuthConfig": {
                "issuer": "https://treva-authserver.tav.aero",
                "clientId": "WebSite",
                "dummyClientSecret": "1q2w3e*",
                "scope": "offline_access openid address email phone profile roles AuthServer AdministrationService AuditLoggingService ChatService ContentManagementService DemoService DocumentManagementService EmailService FileManagementService FormManagementService GdprService IdentityService LanguageService NotificationService SaasService SmsService FastTrackService LoungeService AtuService DutyFreeService SettingService ProfileService OrderService PaymentService",
                "requireHttps": "true",
                "impersonation": {
                    "tenantImpersonation": "true",
                    "userImpersonation": "true"
                },
                "strictDiscoveryDocumentValidation": "false",
                "skipIssuerCheck": "true"
            },
            "apis": {
                "default": {
                    "url": "https://treva-publicgateway.tav.aero",
                    "rootNamespace": "TavTechnologies.Treva"
                },
                "AbpAccountPublic": {
                    "url": "https://treva-authserver.tav.aero",
                    "rootNamespace": "AbpAccountPublic"
                }
            }
        }
    
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Also, there is another client app which created with Mvc UI also using same gateway and there is not any problem.

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    I don't see that you override any CorsOrigins variable in your ConfigMap, am I missing something? Where do you set CorsOrigins for values in production environment?

    Screenshot 2025-02-14 at 16.37.27.png

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Hi Berkan,

    I didn't make any CORS configuration on Angular side if i had to where it had to be?

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    nginx.conf:
    server {
    listen 80;
    listen [::]:80;
    server_name _;

    #access_log  /var/log/nginx/host.access.log  main;
    
    location / {
        root   /usr/share/nginx/html;        
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;		
    }
    
    location /getEnvConfig {
    	default_type 'application/json';
        add_header 'Access-Control-Allow-Origin' 'https://treva-website.tav.aero' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT' always;
        add_header 'Content-Type' 'application/json';
    	try_files $uri /dynamic-env.json;
    }
    
    #error_page  404              /404.html;
    
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    

    }

    Dockerfile.azure:
    FROM node:22.13-alpine as builder
    WORKDIR /src

    COPY . .
    WORKDIR /src

    RUN yarn
    RUN yarn run build:prod

    FROM nginx:alpine as publish

    COPY --from=builder /src/dynamic-env.json /usr/share/nginx/html
    COPY --from=builder /src/nginx.conf /etc/nginx/conf.d/default.conf
    COPY --from=builder /src/dist/treva /usr/share/nginx/html

    But i used nginx for reverse proxying and i added the headers that i need to add.

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Can you also send the Helm configurations of your public gateway application?

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    publicgateway.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "treva-publicgateway"
    spec:
      selector:
        matchLabels:
          app: "treva-publicgateway"
      template:
        metadata:
          labels:
            app: "treva-publicgateway"
        spec:
          containers:
          - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
            imagePullPolicy: "{{ .Values.image.pullPolicy }}"
            name: "treva-publicgateway"
            ports:
            - name: "http"
              containerPort: 80
            env:
            - name: "DOTNET_ENVIRONMENT"
              value: "{{ .Values.global.dotnetEnvironment }}"
            - name: "App__CorsOrigins"
              value: "{{ .Values.app.corsOrigins }}, {{ include "treva.hosts.authserver" . }}, {{ include "treva.hosts.webpublic" . }}, {{ include "treva.hosts.angular" . }}"
    
            - name: "ElasticSearch__IsLoggingEnabled"
              value: "{{ .Values.global.elasticSearch.isLoggingEnabled }}"
            - name: "ElasticSearch__Url"
              value: "http://treva-elasticsearch:{{ .Values.global.elasticSearch.port }}"
            - name: "Swagger__IsEnabled"
              value: "{{ .Values.swagger.isEnabled }}"
            - name: "AbpStudioClient__StudioUrl"
              value: "{{ .Values.global.abpStudioClient.studioUrl }}"
            - name: "AbpStudioClient__IsLinkEnabled"
              value: "{{ .Values.global.abpStudioClient.isLinkEnabled }}"
    
            - name: "ReverseProxy__Clusters__AuthServer__Destinations__AuthServer__Address"
              value: "http://treva-authserver"
            - name: "ReverseProxy__Clusters__Administration__Destinations__Administration__Address"
              value: "http://treva-administration"
            - name: "ReverseProxy__Clusters__Saas__Destinations__Saas__Address"
              value: "http://treva-saas"
            - name: "ReverseProxy__Clusters__AuditLogging__Destinations__AuditLogging__Address"
              value: "http://treva-auditlogging"
            - name: "ReverseProxy__Clusters__Gdpr__Destinations__Gdpr__Address"
              value: "http://treva-gdpr"
            - name: "ReverseProxy__Clusters__FileManagement__Destinations__FileManagement__Address"
              value: "http://treva-fileManagement"
            - name: "ReverseProxy__Clusters__Language__Destinations__Language__Address"
              value: "http://treva-language"
            - name: "ReverseProxy__Clusters__Chat__Destinations__Chat__Address"
              value: "http://treva-chat"
            - name: "ReverseProxy__Clusters__Identity__Destinations__Identity__Address"
              value: "http://treva-identity"
            - name: "ReverseProxy__Clusters__ContentManagement__Destinations__ContentManagement__Address"
              value: "http://treva-contentmanagement"
            - name: "ReverseProxy__Clusters__DocumentManagement__Destinations__DocumentManagement__Address"
              value: "http://treva-documentmanagement"
            - name: "ReverseProxy__Clusters__FormManagement__Destinations__FormManagement__Address"
              value: "http://treva-formmanagement"
            - name: "ReverseProxy__Clusters__Email__Destinations__Email__Address"
              value: "http://treva-email"
            - name: "ReverseProxy__Clusters__Sms__Destinations__Sms__Address"
              value: "http://treva-sms"
            - name: "ReverseProxy__Clusters__Notification__Destinations__Notification__Address"
              value: "http://treva-notification"
            - name: "ReverseProxy__Clusters__Demo__Destinations__Demo__Address"
              value: "http://treva-demo"
            - name: "ReverseProxy__Clusters__FastTrack__Destinations__FastTrack__Address"
              value: "http://treva-fasttrack"
            - name: "ReverseProxy__Clusters__Lounge__Destinations__Lounge__Address"
              value: "http://treva-lounge"
            - name: "ReverseProxy__Clusters__DutyFree__Destinations__DutyFree__Address"
              value: "http://treva-dutyfree"
            - name: "ReverseProxy__Clusters__Atu__Destinations__Atu__Address"
              value: "http://treva-atu"
            - name: "ReverseProxy__Clusters__Setting__Destinations__Setting__Address"
              value: "http://treva-setting"
            - name: "ReverseProxy__Clusters__PrimeClass__Destinations__PrimeClass__Address"
              value: "http://treva-primeclass"
            - name: "ReverseProxy__Clusters__Yolcu360__Destinations__Yolcu360__Address"
              value: "http://treva-yolcu360"
            - name: "ReverseProxy__Clusters__Order__Destinations__Order__Address"
              value: "http://treva-order"
            - name: "ReverseProxy__Clusters__Profile__Destinations__Profile__Address"
              value: "http://treva-profile"
            - name: "ReverseProxy__Clusters__Payment__Destinations__Payment__Address"
              value: "http://treva-payment"
    

    publicgateway-service.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: "treva-publicgateway"
      name: "treva-publicgateway"
    spec:
      ports:
        - name: "80"
          port: 80
      selector:
        app: "treva-publicgateway"
    
    

    publicgateway-ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: "treva-publicgateway"
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: "/"
        nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
        nginx.ingress.kubernetes.io/proxy-buffer-size: "32k"
        nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
        # cert-manager.io/cluster-issuer: "letsencrypt"
    spec:
      ingressClassName: "nginx"
      tls:
      - hosts:
          - "{{ (include "treva.hosts.publicgateway" .) | trimPrefix "https://" }}"
        secretName: "{{ .Values.global.tlsSecret }}"
      rules:
      - host: "{{ (include "treva.hosts.publicgateway" .) | trimPrefix "https://" }}"
        http:
          paths:
          - path: /
            pathType: "Prefix"
            backend:
              service:
                name: "treva-publicgateway"
                port:
                  number: 80
    

    _helpers.tpl:

    {{- define "treva.hosts.authserver" -}}
    {{- print "https://" (.Values.global.hosts.authserver | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.webgateway" -}}
    {{- print "https://" (.Values.global.hosts.webgateway | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.kibana" -}}
    {{- print "https://" (.Values.global.hosts.kibana | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.grafana" -}}
    {{- print "https://" (.Values.global.hosts.grafana | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.web" -}}
    {{- print "https://" (.Values.global.hosts.web | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.mobilegateway" -}}
    {{- print "https://" (.Values.global.hosts.mobilegateway | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.webpublic" -}}
    {{- print "https://" (.Values.global.hosts.webpublic | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.angular" -}}
    {{- print "https://" (.Values.global.hosts.angular | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    {{- define "treva.hosts.publicgateway" -}}
    {{- print "https://" (.Values.global.hosts.publicgateway | replace "[RELEASE_NAME]" "treva") -}}
    {{- end -}}
    
    

    values.yaml:

    global:
      tlsSecret: "treva-tls"
      abpStudioClient:
        isLinkEnabled: "false"
        studioUrl: "http://abp-studio-proxy:38271"
      elasticSearch:
        isLoggingEnabled: "true"
        port: 9200
      hosts:
        authserver: "[RELEASE_NAME]-authserver.tav.aero"
        webgateway: "[RELEASE_NAME]-webgateway.tav.aero"
        kibana: "[RELEASE_NAME]-kibana.tav.aero"
        grafana: "[RELEASE_NAME]-grafana.tav.aero"
        web: "[RELEASE_NAME]-web.tav.aero"
        mobilegateway: "[RELEASE_NAME]-mobilegateway.tav.aero"
        publicgateway: "[RELEASE_NAME]-publicgateway.tav.aero"
        webpublic: "[RELEASE_NAME]-webpublic.tav.aero"
        angular: "[RELEASE_NAME]-website.tav.aero"
      connectionStrings:
        payment: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_PaymentService;User ID=postgres;Password=myPassword;Timeout=240;"
        profile: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ProfileService;User ID=postgres;Password=myPassword;Timeout=240;"
        order: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_OrderService;User ID=postgres;Password=myPassword;Timeout=240;"
        yolcu360: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Yolcu360Service;User ID=postgres;Password=myPassword;Timeout=240;"
        primeclass: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_PrimeClassService;User ID=postgres;Password=myPassword;Timeout=240;"
        setting: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SettingService;User ID=postgres;Password=myPassword;Timeout=240;"
        dutyfree: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DutyFreeService;User ID=postgres;Password=myPassword;Timeout=240;"
        atu: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_AtuService;User ID=postgres;Password=myPassword;Timeout=240;"
        lounge: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_LoungeService;User ID=postgres;Password=myPassword;Timeout=240;"
        fasttrack: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FastTrackService;User ID=postgres;Password=myPassword;Timeout=240;"
        demo: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DemoService;User ID=postgres;Password=myPassword;Timeout=240;"
        notification: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_NotificationService;User ID=postgres;Password=myPassword;Timeout=240;"
        sms: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SmsService;User ID=postgres;Password=myPassword;Timeout=240;"
        email: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_EmailService;User ID=postgres;Password=myPassword;Timeout=240;"
        formmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FormManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
        documentmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_DocumentManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
        contentmanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ContentManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
        administration: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Administration;User ID=postgres;Password=myPassword;Timeout=240;"
        blobStoring: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_BlobStoring;User ID=postgres;Password=myPassword;Timeout=240;"
        identity: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_Identity;User ID=postgres;Password=myPassword;Timeout=240;"
        saas: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_SaasService;User ID=postgres;Password=myPassword;Timeout=240;"
        auditLogging: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_AuditLoggingService;User ID=postgres;Password=myPassword;Timeout=240;"
        gdpr: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_GdprService;User ID=postgres;Password=myPassword;Timeout=240;"
        filemanagement: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_FileManagementService;User ID=postgres;Password=myPassword;Timeout=240;"
        language: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_LanguageService;User ID=postgres;Password=myPassword;Timeout=240;"
        chat: "Host=[RELEASE_NAME]-postgresql;Port=5432;Database=Treva_ChatService;User ID=postgres;Password=myPassword;Timeout=240;"
      dotnetEnvironment: "Staging"
      enablePII: "true"
      stringEncryptionDefaultPassPhrase: "KiT4nzwu9KfP40zB"
    image:
      repository: "tavhqwebtrvdcr.tav.aero/treva/publicgateway"
      tag: "latest"
      pullPolicy: "IfNotPresent"
    swagger:
      isEnabled: "true"
    app:
      corsOrigins: "http://localhost:4200,http://localhost:44381,http://localhost:44380"
    
  • User Avatar
    0
    consultant.ahmet.ulusoy created

    appsettings.json:

    {
      "App": {
        "CorsOrigins": "http://localhost:4200,http://localhost:44381,http://localhost:44380"
      },
      "AuthServer": {
        "SwaggerClientId": "SwaggerTestUI"
      },
      "ElasticSearch": {
        "IsLoggingEnabled": true,
        "Url": "http://localhost:9200"
      },
      "Swagger": {
        "IsEnabled": true
      },
      "ReverseProxy": {
        "Routes": {
          "AbpApi": {
            "ClusterId": "Administration",
            "Match": {
              "Path": "/api/abp/{**catch-all}"
            }
          },
          "AdministrationSwagger": {
            "ClusterId": "Administration",
            "Match": {
              "Path": "/swagger-json/Administration/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Administration"
              }
            ]
          },
          "Account": {
            "ClusterId": "AuthServer",
            "Match": {
              "Path": "/api/account/{**catch-all}"
            }
          },
          "AuthServerSwagger": {
            "ClusterId": "AuthServer",
            "Match": {
              "Path": "/swagger-json/AuthServer/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/AuthServer"
              }
            ]
          },
          "Gdpr": {
            "ClusterId": "Gdpr",
            "Match": {
              "Path": "/api/gdpr/{**catch-all}"
            }
          },
          "GdprSwagger": {
            "ClusterId": "Gdpr",
            "Match": {
              "Path": "/swagger-json/Gdpr/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Gdpr"
              }
            ]
          },
          "Language": {
            "ClusterId": "Language",
            "Match": {
              "Path": "/api/language-management/{**catch-all}"
            }
          },
          "LanguageSwagger": {
            "ClusterId": "Language",
            "Match": {
              "Path": "/swagger-json/Language/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Language"
              }
            ]
          },
          "Chat": {
            "ClusterId": "Chat",
            "Match": {
              "Path": "/api/chat/{**catch-all}"
            }
          },
          "ChatSwagger": {
            "ClusterId": "Chat",
            "Match": {
              "Path": "/swagger-json/Chat/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Chat"
              }
            ]
          },
          "CmsKit": {
            "ClusterId": "ContentManagement",
            "Match": {
              "Path": "/api/cms-kit/{**catch-all}"
            }
          },
          "CmsKitPublic": {
            "ClusterId": "ContentManagement",
            "Match": {
              "Path": "/api/cms-kit-public/{**catch-all}"
            }
          },
          "ContentManagement": {
            "ClusterId": "ContentManagement",
            "Match": {
              "Path": "/api/contentmanagement/{**catch-all}"
            }
          },
          "ContentManagementSwagger": {
            "ClusterId": "ContentManagement",
            "Match": {
              "Path": "/swagger-json/ContentManagement/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/ContentManagement"
              }
            ]
          },
          "DocumentManagement": {
            "ClusterId": "DocumentManagement",
            "Match": {
              "Path": "/api/documentmanagement/{**catch-all}"
            }
          },
          "DocumentManagementSwagger": {
            "ClusterId": "DocumentManagement",
            "Match": {
              "Path": "/swagger-json/DocumentManagement/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/DocumentManagement"
              }
            ]
          },
          "Forms": {
            "ClusterId": "FormManagement",
            "Match": {
              "Path": "/api/forms/{**catch-all}"
            }
          },
          "Questions": {
            "ClusterId": "FormManagement",
            "Match": {
              "Path": "/api/questions/{**catch-all}"
            }
          },
          "Responses": {
            "ClusterId": "FormManagement",
            "Match": {
              "Path": "/api/responses/{**catch-all}"
            }
          },
          "FormManagement": {
            "ClusterId": "FormManagement",
            "Match": {
              "Path": "/api/formmanagement/{**catch-all}"
            }
          },
          "FormManagementSwagger": {
            "ClusterId": "FormManagement",
            "Match": {
              "Path": "/swagger-json/FormManagement/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/FormManagement"
              }
            ]
          },
          "Email": {
            "ClusterId": "Email",
            "Match": {
              "Path": "/api/email/{**catch-all}"
            }
          },
          "EmailSwagger": {
            "ClusterId": "Email",
            "Match": {
              "Path": "/swagger-json/Email/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Email"
              }
            ]
          },
          "Sms": {
            "ClusterId": "Sms",
            "Match": {
              "Path": "/api/sms/{**catch-all}"
            }
          },
          "SmsSwagger": {
            "ClusterId": "Sms",
            "Match": {
              "Path": "/swagger-json/Sms/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Sms"
              }
            ]
          },
          "Notification": {
            "ClusterId": "Notification",
            "Match": {
              "Path": "/api/notification/{**catch-all}"
            }
          },
          "NotificationSwagger": {
            "ClusterId": "Notification",
            "Match": {
              "Path": "/swagger-json/Notification/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Notification"
              }
            ]
          },
          "Demo": {
            "ClusterId": "Demo",
            "Match": {
              "Path": "/api/demo/{**catch-all}"
            }
          },
          "DemoSwagger": {
            "ClusterId": "Demo",
            "Match": {
              "Path": "/swagger-json/Demo/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Demo"
              }
            ]
          },
          "FastTrack": {
            "ClusterId": "FastTrack",
            "Match": {
              "Path": "/api/fasttrack/{**catch-all}"
            }
          },
          "FastTrackSwagger": {
            "ClusterId": "FastTrack",
            "Match": {
              "Path": "/swagger-json/FastTrack/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/FastTrack"
              }
            ]
          },
          "Lounge": {
            "ClusterId": "Lounge",
            "Match": {
              "Path": "/api/lounge/{**catch-all}"
            }
          },
          "LoungeSwagger": {
            "ClusterId": "Lounge",
            "Match": {
              "Path": "/swagger-json/Lounge/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Lounge"
              }
            ]
          },
          "Atu": {
            "ClusterId": "Atu",
            "Match": {
              "Path": "/api/atu/{**catch-all}"
            }
          },
          "AtuSwagger": {
            "ClusterId": "Atu",
            "Match": {
              "Path": "/swagger-json/Atu/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Atu"
              }
            ]
          },
          "DutyFree": {
            "ClusterId": "DutyFree",
            "Match": {
              "Path": "/api/dutyfree/{**catch-all}"
            }
          },
          "DutyFreeSwagger": {
            "ClusterId": "DutyFree",
            "Match": {
              "Path": "/swagger-json/DutyFree/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/DutyFree"
              }
            ]
          },
          "Setting": {
            "ClusterId": "Setting",
            "Match": {
              "Path": "/api/setting/{**catch-all}"
            }
          },
          "SettingSwagger": {
            "ClusterId": "Setting",
            "Match": {
              "Path": "/swagger-json/Setting/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Setting"
              }
            ]
          },
          "Yolcu360": {
            "ClusterId": "Yolcu360",
            "Match": {
              "Path": "/api/yolcu360/{**catch-all}"
            }
          },
          "Yolcu360Swagger": {
            "ClusterId": "Yolcu360",
            "Match": {
              "Path": "/swagger-json/Yolcu360/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Yolcu360"
              }
            ]
          },
          "Order": {
            "ClusterId": "Order",
            "Match": {
              "Path": "/api/order/{**catch-all}"
            }
          },
          "OrderSwagger": {
            "ClusterId": "Order",
            "Match": {
              "Path": "/swagger-json/Order/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Order"
              }
            ]
          },
          "Profile": {
            "ClusterId": "Profile",
            "Match": {
              "Path": "/api/profile/{**catch-all}"
            }
          },
          "ProfileSwagger": {
            "ClusterId": "Profile",
            "Match": {
              "Path": "/swagger-json/Profile/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Profile"
              }
            ]
          },
          "Payment": {
            "ClusterId": "Payment",
            "Match": {
              "Path": "/api/payment/{**catch-all}"
            }
          },
          "PaymentSwagger": {
            "ClusterId": "Payment",
            "Match": {
              "Path": "/swagger-json/Payment/swagger/v1/swagger.json"
            },
            "Transforms": [
              {
                "PathRemovePrefix": "/swagger-json/Payment"
              }
            ]
          }
        },
        "Clusters": {
          "AuthServer": {
            "Destinations": {
              "AuthServer": {
                "Address": "http://localhost:44381/"
              }
            }
          },
          "Administration": {
            "Destinations": {
              "Administration": {
                "Address": "http://localhost:44351/"
              }
            }
          },
          "Gdpr": {
            "Destinations": {
              "Gdpr": {
                "Address": "http://localhost:44330/"
              }
            }
          },
          "Language": {
            "Destinations": {
              "Language": {
                "Address": "http://localhost:44374/"
              }
            }
          },
          "Chat": {
            "Destinations": {
              "Chat": {
                "Address": "http://localhost:44374/"
              }
            }
          },
          "ContentManagement": {
            "Destinations": {
              "ContentManagement": {
                "Address": "http://localhost:44388/"
              }
            }
          },
          "DocumentManagement": {
            "Destinations": {
              "DocumentManagement": {
                "Address": "http://localhost:44386/"
              }
            }
          },
          "FormManagement": {
            "Destinations": {
              "FormManagement": {
                "Address": "http://localhost:44319/"
              }
            }
          },
          "Email": {
            "Destinations": {
              "Email": {
                "Address": "http://localhost:44310/"
              }
            }
          },
          "Sms": {
            "Destinations": {
              "Sms": {
                "Address": "http://localhost:44392/"
              }
            }
          },
          "Notification": {
            "Destinations": {
              "Notification": {
                "Address": "http://localhost:44331/"
              }
            }
          },
          "Demo": {
            "Destinations": {
              "Demo": {
                "Address": "http://localhost:44328/"
              }
            }
          },
          "FastTrack": {
            "Destinations": {
              "FastTrack": {
                "Address": "http://localhost:44316/"
              }
            }
          },
          "Lounge": {
            "Destinations": {
              "Lounge": {
                "Address": "http://localhost:44360/"
              }
            }
          },
          "DutyFree": {
            "Destinations": {
              "DutyFree": {
                "Address": "http://localhost:44334/"
              }
            }
          },
          "Atu": {
            "Destinations": {
              "Atu": {
                "Address": "http://localhost:44348/"
              }
            }
          },
          "Setting": {
            "Destinations": {
              "Setting": {
                "Address": "http://localhost:44367/"
              }
            }
          },
          "Yolcu360": {
            "Destinations": {
              "Setting": {
                "Address": "http://localhost:44333/"
              }
            }
          },
          "Order": {
            "Destinations": {
              "Order": {
                "Address": "http://localhost:44354/"
              }
            }
          },
          "Profile": {
            "Destinations": {
              "Profile": {
                "Address": "http://localhost:44360/"
              }
            }
          },
          "Payment": {
            "Destinations": {
              "Payment": {
                "Address": "http://localhost:44372/"
              }
            }
          }
        }
      }
    }
    
  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Hi,

    Sorry about the late reply.


    I don't think we can solve the problem like this. If your problem still persists, we can schedule a meeting at a convenient time and look at it together. Is that okay with you?

  • User Avatar
    0
    consultant.ahmet.ulusoy created

    Hi Berkan,

    If you hava a time, i'll be really happy. Because it's very important for us.

  • User Avatar
    0
    berkansasmaz created
    Support Team .NET Developer

    Hi,

    I missed what you wrote because someone else replied. If you want, we can schedule it for Monday?

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
Do you need assistance from an ABP expert?
Schedule a Meeting
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.3.0-preview. Updated on April 11, 2025, 10:10