From 02bbc413c3c15b5d29b159103a5ba14d40490b3d Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Thu, 16 May 2019 16:31:13 -0400 Subject: [PATCH 1/5] Fix Azure database connection string parsing --- app/server/tests/test_config.py | 9 +++++++++ azuredeploy.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/server/tests/test_config.py b/app/server/tests/test_config.py index 2ba3a27d..8cace2e6 100644 --- a/app/server/tests/test_config.py +++ b/app/server/tests/test_config.py @@ -24,11 +24,20 @@ class TestDatabaseUrl(TestCase): with setenv('DATABASE_URL', 'pgsql://u:p@h/d?sslmode=require'): self._assert_sslmode_is('require') + def test_database_url_with_complex_user(self): + with setenv('DATABASE_URL', 'pgsql://user%40host:p@h/d'): + self._assert_user_is('user@host') + def _assert_sslmode_is(self, expected): reload(settings) actual = settings.DATABASES['default'].get('OPTIONS', {}).get('sslmode') self.assertEqual(actual, expected) + def _assert_user_is(self, expected): + reload(settings) + actual = settings.DATABASES['default'].get('USER', '') + self.assertEqual(actual, expected) + @contextmanager def setenv(key, value): diff --git a/azuredeploy.json b/azuredeploy.json index e9067d50..17d8ace7 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -97,7 +97,7 @@ "databaseSkuTier": "GeneralPurpose", "databaseSkuFamily": "Gen5", "databaseSkuName": "[concat('GP_', variables('databaseSkuFamily'), '_', parameters('databaseCores'))]", - "databaseConnectionString": "[concat('pgsql://', parameters('adminUserName'), '@', variables('databaseServerName'), ':', parameters('adminPassword'), '@', variables('databaseServerName'), '.postgres.database.azure.com:5432/', parameters('databaseName'))]", + "databaseConnectionString": "[concat('pgsql://', parameters('adminUserName'), '%40', variables('databaseServerName'), ':', parameters('adminPassword'), '@', variables('databaseServerName'), '.postgres.database.azure.com:5432/', parameters('databaseName'))]", "databaseVersion": "9.6", "databaseServerName": "[concat(parameters('appName'),'-state')]", "setupScriptName": "[concat(parameters('appName'),'-setup')]", From fd2e7ca363d61d295ebf1d5d4a63f8c53952fa0a Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Thu, 16 May 2019 16:34:18 -0400 Subject: [PATCH 2/5] Factor out reloading of settings module --- app/server/tests/test_config.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/server/tests/test_config.py b/app/server/tests/test_config.py index 8cace2e6..14a68071 100644 --- a/app/server/tests/test_config.py +++ b/app/server/tests/test_config.py @@ -29,12 +29,10 @@ class TestDatabaseUrl(TestCase): self._assert_user_is('user@host') def _assert_sslmode_is(self, expected): - reload(settings) actual = settings.DATABASES['default'].get('OPTIONS', {}).get('sslmode') self.assertEqual(actual, expected) def _assert_user_is(self, expected): - reload(settings) actual = settings.DATABASES['default'].get('USER', '') self.assertEqual(actual, expected) @@ -42,6 +40,7 @@ class TestDatabaseUrl(TestCase): @contextmanager def setenv(key, value): environ[key] = value + reload(settings) yield del environ[key] From 0811482d3968f6f0283964bf357b3ed8c0177ced Mon Sep 17 00:00:00 2001 From: Shawn Cicoria Date: Fri, 17 May 2019 12:15:29 -0400 Subject: [PATCH 3/5] Break down connection string for easy reading --- azuredeploy.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/azuredeploy.json b/azuredeploy.json index 17d8ace7..a1070982 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -97,9 +97,12 @@ "databaseSkuTier": "GeneralPurpose", "databaseSkuFamily": "Gen5", "databaseSkuName": "[concat('GP_', variables('databaseSkuFamily'), '_', parameters('databaseCores'))]", - "databaseConnectionString": "[concat('pgsql://', parameters('adminUserName'), '%40', variables('databaseServerName'), ':', parameters('adminPassword'), '@', variables('databaseServerName'), '.postgres.database.azure.com:5432/', parameters('databaseName'))]", "databaseVersion": "9.6", + "databaseServerPort": 5432, "databaseServerName": "[concat(parameters('appName'),'-state')]", + "databaseUserCredentials" : "[concat(uriComponent(concat(parameters('adminUserName'), '@', variables('databaseServerName'))), ':', parameters('adminPassword'))]", + "databaseFqdn" : "[concat( variables('databaseServerName'), '.postgres.database.azure.com:', variables('databaseServerPort'))]", + "databaseConnectionString": "[concat('pgsql://', variables('databaseUserCredentials'), '@', variables('databaseFqdn'), '/', parameters('databaseName'))]", "setupScriptName": "[concat(parameters('appName'),'-setup')]", "appServicePlanName": "[concat(parameters('appName'),'-hosting')]", "analyticsName": "[concat(parameters('appName'),'-analytics')]" @@ -269,5 +272,11 @@ "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]" } } - ] + ], + "outputs": { + "databaseServer": { + "type": "string", + "value": "[variables('databaseFqdn')]" + } + } } From 482b6d3291d9b3f7973bdc9c082a00c07a619fec Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Fri, 17 May 2019 12:16:55 -0400 Subject: [PATCH 4/5] Fix indentation --- azuredeploy.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/azuredeploy.json b/azuredeploy.json index a1070982..242acf6c 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -274,9 +274,9 @@ } ], "outputs": { - "databaseServer": { - "type": "string", - "value": "[variables('databaseFqdn')]" - } + "databaseServer": { + "type": "string", + "value": "[variables('databaseFqdn')]" + } } } From aa5c5cf4141298a966bffc83082d4614a6aecdc6 Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Fri, 17 May 2019 12:26:13 -0400 Subject: [PATCH 5/5] Add app URL to deployment output --- azuredeploy.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/azuredeploy.json b/azuredeploy.json index 242acf6c..1b167d25 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -105,6 +105,7 @@ "databaseConnectionString": "[concat('pgsql://', variables('databaseUserCredentials'), '@', variables('databaseFqdn'), '/', parameters('databaseName'))]", "setupScriptName": "[concat(parameters('appName'),'-setup')]", "appServicePlanName": "[concat(parameters('appName'),'-hosting')]", + "appFqdn": "[concat(parameters('appName'),'.azurewebsites.net')]", "analyticsName": "[concat(parameters('appName'),'-analytics')]" }, "resources": [ @@ -274,6 +275,10 @@ } ], "outputs": { + "appServer": { + "type": "string", + "value": "[concat(variables('appFqdn'))]" + }, "databaseServer": { "type": "string", "value": "[variables('databaseFqdn')]"