Skip to content

Commit 4f8f9d5

Browse files
committed
Added a check for proper API key settings in production, and added workable default API key settings for development.
- Legacy-Id: 14319
1 parent bfb9365 commit 4f8f9d5

3 files changed

Lines changed: 124 additions & 2 deletions

File tree

docker/settings_local.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030

3131
TRAC_WIKI_DIR_PATTERN = "test/wiki/%s"
3232
TRAC_SVN_DIR_PATTERN = "test/svn/%s"
33+
TRAC_CREATE_ADHOC_WIKIS = [
34+
('iesg', 'Meeting', TRAC_WIKI_DIR_PATTERN % "ietf/meeting"),
35+
]
3336

3437
MEDIA_BASE_DIR = 'test'
3538
MEDIA_ROOT = MEDIA_BASE_DIR + '/media/'
@@ -45,3 +48,46 @@
4548
SUBMIT_YANG_INVAL_MODEL_DIR = 'data/developers/ietf-ftp/yang/invalmod/'
4649
SUBMIT_YANGLINT_COMMAND = 'yanglint --verbose -p {rfclib} -p {draftlib} -p {tmplib} {model}'
4750

51+
52+
API_PUBLIC_KEY_PEM = """
53+
-----BEGIN PUBLIC KEY-----
54+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuIm3wBpMEhFmy40ZBNHU
55+
jn6cMVeDwynedDtww+071mQFIyidDn0UYCTfLn8dLQDpbdoreMz9Zzb0tMygMyMb
56+
5fsOItkEd7J5jVqpPWqlvspaa5qb5zuB8NHAxRjPfomgn0Sl1Uvwl1Gc3N2UElCb
57+
mJ+wEK+C55YVLj1k/9GU34G//XLcSnBF7bmjcycP+z8wkAtjE51ZR2Y6oP6o11jO
58+
yL5X7Y+1Nk9cPlUbtrvmmyXEKnjUXbRUoK4CJ87dYjFk8CHWmqolY++bgp4Ro6gK
59+
k6RAy1XaC6uCaVnlJQKpIZ8XvJyv34ku65KUuLQMlxBbVt7z+ybrMvU7NNpCVTGp
60+
kwIDAQAB
61+
-----END PUBLIC KEY-----
62+
"""
63+
64+
API_PRIVATE_KEY_PEM = """
65+
-----BEGIN PRIVATE KEY-----
66+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4ibfAGkwSEWbL
67+
jRkE0dSOfpwxV4PDKd50O3DD7TvWZAUjKJ0OfRRgJN8ufx0tAOlt2it4zP1nNvS0
68+
zKAzIxvl+w4i2QR3snmNWqk9aqW+ylprmpvnO4Hw0cDFGM9+iaCfRKXVS/CXUZzc
69+
3ZQSUJuYn7AQr4LnlhUuPWT/0ZTfgb/9ctxKcEXtuaNzJw/7PzCQC2MTnVlHZjqg
70+
/qjXWM7Ivlftj7U2T1w+VRu2u+abJcQqeNRdtFSgrgInzt1iMWTwIdaaqiVj75uC
71+
nhGjqAqTpEDLVdoLq4JpWeUlAqkhnxe8nK/fiS7rkpS4tAyXEFtW3vP7Jusy9Ts0
72+
2kJVMamTAgMBAAECggEBAKV46EnbysaQ0ApKFVsbBGxZ35jnDoGcM5sqCa3GNlfC
73+
DFFAg8SQKAsmRPIejXzjSm10qnKB7d/1iWvt6OCx5LxOaJia3MSwRwqXdxZZYRI5
74+
xOakFpQ76gKVMzQJUVX39w2ZstIWbEBjsDLkhXf+y+cJmgj8OHeNPqTd7Ijv13yq
75+
B8JVFhtrARTE9X5bxxl5FMrqchVv7HyCS6FBTK+rPPaE3gK2XyiNKHokcV2NfmeF
76+
OHqqDn9LPN4ERRU13FNv5/wvH6/Z0AXsRWFkxuCdYcVzG9xEnf/72b0jumRqnSAN
77+
bVK+/b37SOky/L0mwfXwhQoMvePgbYE1qv2Lx4maVcECgYEA5Im7Ys2FfFAGWV3Y
78+
eNizNHmJYXuvLVsEEYtxT1tM/yPTvlljA27s5rrXdtRDS67Hnj28b9nrHp0COlZp
79+
GycbppQcPEKiDupLlvstdQ+b+t1MO3xAqW2ZeM47A1SmPKa7XmTAL+6ZReeN/Eg6
80+
QCmqY5HHANhX+OwN+zwAg9ZQlBECgYEAzrZ1qr8RBBP4/0NY3WMkAiJpluIOc6kO
81+
8lP0tNk6FJ9OaIMAI6FKxh/7KKcgWzINWSVqz+8te5HUCUt5JWZXcn2NMkk2ufm4
82+
4OV0vXz3ba6RhIXtDxJW9qbihhZ+EJYPvgwWUF3W1Onu4BuirD+74LSTWG8Ko3lK
83+
m0qbAl5s92MCgYEAuJQxHwyE6jEr35O3GWtT2WbruSsPAd/Hum/X9VL1Lf/+rXc+
84+
S/CUL4nqKdQoAgFIwhp0jhYAGrqOqRVPUJnWcEShRV4/yzIaGPgG78vKm+OOBWFG
85+
TFDzqilOalM87DFxlTxkKJJZgqcQ+xhOy7GbJ03+30TcUHQ+mpIMjG5UqDECgYBG
86+
yc8T0OiX1+seJ0cIUYokPPqh0/oU+6EFtWCIihdMtp1YRvxGN1bu8EbHTixTbpmJ
87+
nLmuSX7u4SqWoET1XM23hG1U+iOGnpEEWy+WMHRfGDf3BRIAZkxnnRDX0F4NegYc
88+
E/GURf5q3U2Ta4NSr2S8d7o5v5UKFGBLO8pHjmSMdwKBgQCbZMPV/ogqNbsuEXsP
89+
rZQg+DTonX55os7Dnii715NAzzP7zaZ/RF/zEJrYKKATiaYFNIpz66wuAIX6UrcO
90+
N1mb6IlkRXoou2mawSFAPuwOFyKHDfohlA7lCiUsgB40uc90pa1evX8tctSXOuzh
91+
qlOfAYmntqZaggU8f3gGh7EPjw==
92+
-----END PRIVATE KEY-----
93+
"""

ietf/checks.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,3 +344,39 @@ def check_svn_import(app_configs, **kwargs):
344344
id = "datatracker.E0014",
345345
))
346346
return errors
347+
348+
@checks.register('security')
349+
def check_api_key_in_local_settings(app_configs, **kwargs):
350+
errors = []
351+
import settings_local
352+
if settings.SERVER_MODE == 'development':
353+
if not ( hasattr(settings_local, 'API_PUBLIC_KEY_PEM')
354+
and hasattr(settings_local, 'API_PRIVATE_KEY_PEM')):
355+
errors.append(checks.Critical(
356+
"There are no API key settings in your settings_local.py",
357+
hint = dedent("""
358+
You are running in production mode, and need API key settings that are
359+
different than the default settings. Please add settings for
360+
API_PUBLIC_KEY_PEM and API_PRIVATE_KEY_PEM to your settings local. The
361+
content should be matching public and private keys in PEM format. You
362+
can generate a suitable keypair with 'ssh-keygen -f apikey.pem', and then
363+
extract the public key with 'openssl rsa -in apikey.pem -pubout > apikey.pub'.
364+
365+
""").replace('\n', '\n ').rstrip(),
366+
id = "datatracker.E0015",
367+
))
368+
elif not ( settings_local.API_PUBLIC_KEY_PEM == settings.API_PUBLIC_KEY_PEM
369+
and settings_local.API_PRIVATE_KEY_PEM == settings.API_PRIVATE_KEY_PEM ):
370+
errors.append(checks.Critical(
371+
"Your API key settings in your settings_local.py are not picked up in settings.",
372+
hint = dedent("""
373+
You are running in production mode, and need API key settings which are
374+
different than the default settings. You seem to have API key settings
375+
in settings_local.py, but they don't seem to propagate to django.conf.settings.
376+
Please check if you have multiple settings_local.py files.
377+
""").replace('\n', '\n ').rstrip(),
378+
id = "datatracker.E0016",
379+
))
380+
381+
return errors
382+

ietf/settings.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -933,8 +933,48 @@ def skip_unreadable_post(record):
933933

934934
UTILS_TEST_RANDOM_STATE_FILE = '.factoryboy_random_state'
935935

936-
API_PUBLIC_KEY_PEM = "Set this in settings_local.py"
937-
API_PRIVATE_KEY_PEM = "Set this in settings_local.py"
936+
API_PUBLIC_KEY_PEM = """
937+
-----BEGIN PUBLIC KEY-----
938+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuIm3wBpMEhFmy40ZBNHU
939+
jn6cMVeDwynedDtww+071mQFIyidDn0UYCTfLn8dLQDpbdoreMz9Zzb0tMygMyMb
940+
5fsOItkEd7J5jVqpPWqlvspaa5qb5zuB8NHAxRjPfomgn0Sl1Uvwl1Gc3N2UElCb
941+
mJ+wEK+C55YVLj1k/9GU34G//XLcSnBF7bmjcycP+z8wkAtjE51ZR2Y6oP6o11jO
942+
yL5X7Y+1Nk9cPlUbtrvmmyXEKnjUXbRUoK4CJ87dYjFk8CHWmqolY++bgp4Ro6gK
943+
k6RAy1XaC6uCaVnlJQKpIZ8XvJyv34ku65KUuLQMlxBbVt7z+ybrMvU7NNpCVTGp
944+
kwIDAQAB
945+
-----END PUBLIC KEY-----
946+
"""
947+
948+
API_PRIVATE_KEY_PEM = """
949+
-----BEGIN PRIVATE KEY-----
950+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4ibfAGkwSEWbL
951+
jRkE0dSOfpwxV4PDKd50O3DD7TvWZAUjKJ0OfRRgJN8ufx0tAOlt2it4zP1nNvS0
952+
zKAzIxvl+w4i2QR3snmNWqk9aqW+ylprmpvnO4Hw0cDFGM9+iaCfRKXVS/CXUZzc
953+
3ZQSUJuYn7AQr4LnlhUuPWT/0ZTfgb/9ctxKcEXtuaNzJw/7PzCQC2MTnVlHZjqg
954+
/qjXWM7Ivlftj7U2T1w+VRu2u+abJcQqeNRdtFSgrgInzt1iMWTwIdaaqiVj75uC
955+
nhGjqAqTpEDLVdoLq4JpWeUlAqkhnxe8nK/fiS7rkpS4tAyXEFtW3vP7Jusy9Ts0
956+
2kJVMamTAgMBAAECggEBAKV46EnbysaQ0ApKFVsbBGxZ35jnDoGcM5sqCa3GNlfC
957+
DFFAg8SQKAsmRPIejXzjSm10qnKB7d/1iWvt6OCx5LxOaJia3MSwRwqXdxZZYRI5
958+
xOakFpQ76gKVMzQJUVX39w2ZstIWbEBjsDLkhXf+y+cJmgj8OHeNPqTd7Ijv13yq
959+
B8JVFhtrARTE9X5bxxl5FMrqchVv7HyCS6FBTK+rPPaE3gK2XyiNKHokcV2NfmeF
960+
OHqqDn9LPN4ERRU13FNv5/wvH6/Z0AXsRWFkxuCdYcVzG9xEnf/72b0jumRqnSAN
961+
bVK+/b37SOky/L0mwfXwhQoMvePgbYE1qv2Lx4maVcECgYEA5Im7Ys2FfFAGWV3Y
962+
eNizNHmJYXuvLVsEEYtxT1tM/yPTvlljA27s5rrXdtRDS67Hnj28b9nrHp0COlZp
963+
GycbppQcPEKiDupLlvstdQ+b+t1MO3xAqW2ZeM47A1SmPKa7XmTAL+6ZReeN/Eg6
964+
QCmqY5HHANhX+OwN+zwAg9ZQlBECgYEAzrZ1qr8RBBP4/0NY3WMkAiJpluIOc6kO
965+
8lP0tNk6FJ9OaIMAI6FKxh/7KKcgWzINWSVqz+8te5HUCUt5JWZXcn2NMkk2ufm4
966+
4OV0vXz3ba6RhIXtDxJW9qbihhZ+EJYPvgwWUF3W1Onu4BuirD+74LSTWG8Ko3lK
967+
m0qbAl5s92MCgYEAuJQxHwyE6jEr35O3GWtT2WbruSsPAd/Hum/X9VL1Lf/+rXc+
968+
S/CUL4nqKdQoAgFIwhp0jhYAGrqOqRVPUJnWcEShRV4/yzIaGPgG78vKm+OOBWFG
969+
TFDzqilOalM87DFxlTxkKJJZgqcQ+xhOy7GbJ03+30TcUHQ+mpIMjG5UqDECgYBG
970+
yc8T0OiX1+seJ0cIUYokPPqh0/oU+6EFtWCIihdMtp1YRvxGN1bu8EbHTixTbpmJ
971+
nLmuSX7u4SqWoET1XM23hG1U+iOGnpEEWy+WMHRfGDf3BRIAZkxnnRDX0F4NegYc
972+
E/GURf5q3U2Ta4NSr2S8d7o5v5UKFGBLO8pHjmSMdwKBgQCbZMPV/ogqNbsuEXsP
973+
rZQg+DTonX55os7Dnii715NAzzP7zaZ/RF/zEJrYKKATiaYFNIpz66wuAIX6UrcO
974+
N1mb6IlkRXoou2mawSFAPuwOFyKHDfohlA7lCiUsgB40uc90pa1evX8tctSXOuzh
975+
qlOfAYmntqZaggU8f3gGh7EPjw==
976+
-----END PRIVATE KEY-----
977+
"""
938978

939979

940980
# Put the production SECRET_KEY in settings_local.py, and also any other

0 commit comments

Comments
 (0)