diff --git a/IPython/html/notebookapp.py b/IPython/html/notebookapp.py
index 8104ec2..fad0dc7 100644
--- a/IPython/html/notebookapp.py
+++ b/IPython/html/notebookapp.py
@@ -6,6 +6,7 @@
from __future__ import print_function
+import base64
import errno
import io
import json
@@ -357,6 +358,14 @@ class NotebookApp(BaseIPythonApplication):
help="""The full path to a private key file for usage with SSL/TLS."""
)
+ cookie_secret_file = Unicode(config=True,
+ help="""The file where the cookie secret is stored."""
+ )
+ def _cookie_secret_file_default(self):
+ if self.profile_dir is None:
+ return ''
+ return os.path.join(self.profile_dir.security_dir, 'notebook_cookie_secret')
+
cookie_secret = Bytes(b'', config=True,
help="""The random bytes used to secure cookies.
By default this is a new random number every time you start the Notebook.
@@ -367,7 +376,26 @@ class NotebookApp(BaseIPythonApplication):
"""
)
def _cookie_secret_default(self):
- return os.urandom(1024)
+ if os.path.exists(self.cookie_secret_file):
+ with io.open(self.cookie_secret_file, 'rb') as f:
+ return f.read()
+ else:
+ secret = base64.encodestring(os.urandom(1024))
+ self._write_cookie_secret_file(secret)
+ return secret
+
+ def _write_cookie_secret_file(self, secret):
+ """write my secret to my secret_file"""
+ self.log.info("Writing notebook server cookie secret to %s", self.cookie_secret_file)
+ with io.open(self.cookie_secret_file, 'wb') as f:
+ f.write(secret)
+ try:
+ os.chmod(self.cookie_secret_file, 0o600)
+ except OSError:
+ self.log.warn(
+ "Could not set permissions on %s",
+ self.cookie_secret_file
+ )
password = Unicode(u'', config=True,
help="""Hashed password to use for web authentication.