@@ -14,7 +14,7 @@ jobs:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Mark/Close Stale Issues and Pull Requests 🗑️
 | 
			
		||||
        uses: actions/stale@v5.1.1
 | 
			
		||||
        uses: actions/stale@v6.0.0
 | 
			
		||||
        with:
 | 
			
		||||
          repo-token: ${{ secrets.STALE_ACTION_PAT }}
 | 
			
		||||
          days-before-stale: 60
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.github/workflows/image_builds.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/image_builds.yml
									
									
									
									
										vendored
									
									
								
							@@ -5,6 +5,9 @@ on:
 | 
			
		||||
    branches: [ "master", "staging" ]
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read # to fetch code (actions/checkout)
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  docker_image_builds:
 | 
			
		||||
    strategy:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.github/workflows/integration_tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/integration_tests.yml
									
									
									
									
										vendored
									
									
								
							@@ -5,6 +5,9 @@ on:
 | 
			
		||||
    branches: [ "master", "staging" ]
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  integration_tests:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ try:
 | 
			
		||||
  def query_mysql(query, headers = True, update = False):
 | 
			
		||||
    while True:
 | 
			
		||||
      try:
 | 
			
		||||
        cnx = mysql.connector.connect(unix_socket = '/var/run/mysqld/mysqld.sock', user=os.environ.get('DBUSER'), passwd=os.environ.get('DBPASS'), database=os.environ.get('DBNAME'), charset="utf8")
 | 
			
		||||
        cnx = mysql.connector.connect(unix_socket = '/var/run/mysqld/mysqld.sock', user=os.environ.get('DBUSER'), passwd=os.environ.get('DBPASS'), database=os.environ.get('DBNAME'), charset="utf8mb4", collation="utf8mb4_general_ci")
 | 
			
		||||
      except Exception as ex:
 | 
			
		||||
        print('%s - trying again...'  % (ex))
 | 
			
		||||
        time.sleep(3)
 | 
			
		||||
@@ -166,4 +166,4 @@ try:
 | 
			
		||||
      notify_rcpt(record['rcpt'], record['counter'], record['quarantine_acl'], attrs['quarantine_category'])
 | 
			
		||||
 | 
			
		||||
finally:
 | 
			
		||||
  os.unlink(pidfile)
 | 
			
		||||
  os.unlink(pidfile)
 | 
			
		||||
 
 | 
			
		||||
@@ -323,7 +323,19 @@ hosts = unix:/var/run/mysqld/mysqld.sock
 | 
			
		||||
dbname = ${DBNAME}
 | 
			
		||||
# First select queries domain and alias_domain to determine if domains are active.
 | 
			
		||||
query = SELECT goto FROM alias
 | 
			
		||||
  WHERE address='%s'
 | 
			
		||||
  WHERE id IN (
 | 
			
		||||
      SELECT COALESCE (
 | 
			
		||||
        (
 | 
			
		||||
          SELECT id FROM alias
 | 
			
		||||
            WHERE address='%s'
 | 
			
		||||
            AND (active='1' OR active='2')
 | 
			
		||||
        ), (
 | 
			
		||||
          SELECT id FROM alias
 | 
			
		||||
            WHERE address='@%d'
 | 
			
		||||
            AND (active='1' OR active='2')
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    AND active='1'
 | 
			
		||||
    AND (domain IN
 | 
			
		||||
      (SELECT domain FROM domain
 | 
			
		||||
@@ -354,7 +366,7 @@ query = SELECT goto FROM alias
 | 
			
		||||
    WHERE alias_domain.alias_domain = '%d'
 | 
			
		||||
      AND mailbox.username = CONCAT('%u','@',alias_domain.target_domain)
 | 
			
		||||
      AND (mailbox.active = '1' OR mailbox.active ='2')
 | 
			
		||||
      AND alias_domain.active='1'
 | 
			
		||||
      AND alias_domain.active='1';
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
# MX based routing
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								data/web/api/index.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								data/web/api/index.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
html {
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    overflow: -moz-scrollbars-vertical;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
*,
 | 
			
		||||
*:before,
 | 
			
		||||
*:after {
 | 
			
		||||
    box-sizing: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    background: #fafafa;
 | 
			
		||||
}
 | 
			
		||||
@@ -5,56 +5,15 @@
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>Swagger UI</title>
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
 | 
			
		||||
    <link rel="stylesheet" type="text/css" href="index.css" />
 | 
			
		||||
    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
 | 
			
		||||
    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
 | 
			
		||||
    <style>
 | 
			
		||||
      html
 | 
			
		||||
      {
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        overflow: -moz-scrollbars-vertical;
 | 
			
		||||
        overflow-y: scroll;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      *,
 | 
			
		||||
      *:before,
 | 
			
		||||
      *:after
 | 
			
		||||
      {
 | 
			
		||||
        box-sizing: inherit;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      body
 | 
			
		||||
      {
 | 
			
		||||
        margin:0;
 | 
			
		||||
        background: #fafafa;
 | 
			
		||||
      }
 | 
			
		||||
    </style>
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="swagger-ui"></div>
 | 
			
		||||
 | 
			
		||||
    <script src="./swagger-ui-bundle.js" charset="UTF-8"> </script>
 | 
			
		||||
    <script src="./swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
 | 
			
		||||
    <script>
 | 
			
		||||
    window.onload = function() {
 | 
			
		||||
      // Begin Swagger UI call region
 | 
			
		||||
      const ui = SwaggerUIBundle({
 | 
			
		||||
        urls: [{url: "/api/openapi.yaml", name: "mailcow API"}],
 | 
			
		||||
        dom_id: '#swagger-ui',
 | 
			
		||||
        deepLinking: true,
 | 
			
		||||
        presets: [
 | 
			
		||||
          SwaggerUIBundle.presets.apis,
 | 
			
		||||
          SwaggerUIStandalonePreset
 | 
			
		||||
        ],
 | 
			
		||||
        plugins: [
 | 
			
		||||
          SwaggerUIBundle.plugins.DownloadUrl
 | 
			
		||||
        ],
 | 
			
		||||
        layout: "StandaloneLayout"
 | 
			
		||||
      });
 | 
			
		||||
      // End Swagger UI call region
 | 
			
		||||
 | 
			
		||||
      window.ui = ui;
 | 
			
		||||
    };
 | 
			
		||||
  </script>
 | 
			
		||||
    <script src="./swagger-initializer.js" charset="UTF-8"> </script>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
        var isValid, qp, arr;
 | 
			
		||||
 | 
			
		||||
        if (/code|token|error/.test(window.location.hash)) {
 | 
			
		||||
            qp = window.location.hash.substring(1);
 | 
			
		||||
            qp = window.location.hash.substring(1).replace('?', '&');
 | 
			
		||||
        } else {
 | 
			
		||||
            qp = location.search.substring(1);
 | 
			
		||||
        }
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
                    authId: oauth2.auth.name,
 | 
			
		||||
                    source: "auth",
 | 
			
		||||
                    level: "warning",
 | 
			
		||||
                    message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
 | 
			
		||||
                    message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
                    authId: oauth2.auth.name,
 | 
			
		||||
                    source: "auth",
 | 
			
		||||
                    level: "error",
 | 
			
		||||
                    message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
 | 
			
		||||
                    message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -67,9 +67,13 @@
 | 
			
		||||
        window.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    window.addEventListener('DOMContentLoaded', function () {
 | 
			
		||||
      run();
 | 
			
		||||
    });
 | 
			
		||||
    if (document.readyState !== 'loading') {
 | 
			
		||||
        run();
 | 
			
		||||
    } else {
 | 
			
		||||
        document.addEventListener('DOMContentLoaded', function () {
 | 
			
		||||
            run();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
</script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								data/web/api/swagger-initializer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								data/web/api/swagger-initializer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
window.onload = function() {
 | 
			
		||||
  // Begin Swagger UI call region
 | 
			
		||||
  const ui = SwaggerUIBundle({
 | 
			
		||||
    urls: [{url: "/api/openapi.yaml", name: "mailcow API"}],
 | 
			
		||||
    dom_id: '#swagger-ui',
 | 
			
		||||
    deepLinking: true,
 | 
			
		||||
    presets: [
 | 
			
		||||
      SwaggerUIBundle.presets.apis,
 | 
			
		||||
      SwaggerUIStandalonePreset
 | 
			
		||||
    ],
 | 
			
		||||
    plugins: [
 | 
			
		||||
      SwaggerUIBundle.plugins.DownloadUrl
 | 
			
		||||
    ],
 | 
			
		||||
    layout: "StandaloneLayout"
 | 
			
		||||
  });
 | 
			
		||||
  // End Swagger UI call region
 | 
			
		||||
 | 
			
		||||
  window.ui = ui;
 | 
			
		||||
};
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -14,7 +14,8 @@
 | 
			
		||||
        "sogo_access": "SOGo erişiminin yönetilmesine izin ver",
 | 
			
		||||
        "domain_desc": "Alan adı açıklamasını değiştir",
 | 
			
		||||
        "extend_sender_acl": "Gönderenin acl'sini harici adreslere göre genişletmeye izin ver",
 | 
			
		||||
        "spam_policy": "Engellenenler / İzin verilenler"
 | 
			
		||||
        "spam_policy": "Engellenenler / İzin verilenler",
 | 
			
		||||
        "filters": "Fitreler"
 | 
			
		||||
    },
 | 
			
		||||
    "add": {
 | 
			
		||||
        "activate_filter_warn": "Aktif edilirse diğer tüm filtreler devre dışı bırakılacak.",
 | 
			
		||||
 
 | 
			
		||||
@@ -215,7 +215,7 @@ services:
 | 
			
		||||
            - sogo
 | 
			
		||||
 | 
			
		||||
    dovecot-mailcow:
 | 
			
		||||
      image: mailcow/dovecot:1.19
 | 
			
		||||
      image: mailcow/dovecot:1.20
 | 
			
		||||
      depends_on:
 | 
			
		||||
        - mysql-mailcow
 | 
			
		||||
      dns:
 | 
			
		||||
@@ -295,7 +295,7 @@ services:
 | 
			
		||||
            - dovecot
 | 
			
		||||
 | 
			
		||||
    postfix-mailcow:
 | 
			
		||||
      image: mailcow/postfix:1.67
 | 
			
		||||
      image: mailcow/postfix:1.68
 | 
			
		||||
      depends_on:
 | 
			
		||||
        - mysql-mailcow
 | 
			
		||||
      volumes:
 | 
			
		||||
 
 | 
			
		||||
@@ -198,7 +198,7 @@ if ! [ "${DOCKER_COMPOSE_VERSION}" == "native" ] && ! [ "${DOCKER_COMPOSE_VERSIO
 | 
			
		||||
        echo -e "\e[31mFound Docker Compose Standalone.\e[0m"
 | 
			
		||||
        echo -e "\e[31mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\e[0m"
 | 
			
		||||
        sleep 2
 | 
			
		||||
        echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.[0m"
 | 
			
		||||
        echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m"
 | 
			
		||||
      else
 | 
			
		||||
        echo -e "\e[31mCannot find Docker Compose with a Version Higher than 2.X.X.\e[0m" 
 | 
			
		||||
        echo -e "\e[31mPlease update/install regarding to this doc site: https://mailcow.github.io/mailcow-dockerized-docs/i_u_m/i_u_m_install/\e[0m"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user