-
-
-
-
-
-
-
-
-
-
-
- {this.props.title}
-
+
);
}
}
+DownloadButton.PropTypes = {
+ link: PropTypes.string.isRequired,
+ name: PropTypes.string.isRequired
+};
diff --git a/client/pages/viewerpage/menubar.scss b/client/pages/viewerpage/menubar.scss
new file mode 100644
index 00000000..0b1b7b59
--- /dev/null
+++ b/client/pages/viewerpage/menubar.scss
@@ -0,0 +1,24 @@
+.component_menubar{
+ background: #313538;
+ color: #f1f1f1;
+ border-bottom: 1px solid var(--color);
+
+ .component_container{
+ padding: 8px 0;
+ color: #f1f1f1;
+ font-size: 0.9em;
+ }
+}
+
+
+
+.menubar-appear{
+ display: inline-block;
+ opacity: 0;
+ transform: translateY(2px);
+}
+.menubar-appear.menubar-appear-active{
+ opacity: 1;
+ transform: translateY(0px);
+ transition: all 0.15s ease-out;
+}
diff --git a/server/ctrl/files.js b/server/ctrl/files.js
index e7718ee9..73a87921 100644
--- a/server/ctrl/files.js
+++ b/server/ctrl/files.js
@@ -36,7 +36,7 @@ app.get('/ls', function(req, res){
// get a file content
app.get('/cat', function(req, res){
let path = pathBuilder(req);
- res.cookie('download', path, { maxAge: 1000 });
+ res.clearCookie("download");
if(path){
Files.cat(path, req.cookies.auth, res)
.then(function(stream){
@@ -148,5 +148,5 @@ app.get('/touch', function(req, res){
module.exports = app;
function pathBuilder(req){
- return path.join(req.cookies.auth.payload.path, decodeURIComponent(req.query.path));
+ return path.join(req.cookies.auth.payload.path || '', decodeURIComponent(req.query.path) || '');
}
diff --git a/server/ctrl/session.js b/server/ctrl/session.js
index 4b758657..01da8952 100644
--- a/server/ctrl/session.js
+++ b/server/ctrl/session.js
@@ -26,7 +26,7 @@ app.post('/', function(req, res){
if(Buffer.byteLength(cookie, 'utf-8') > 4096){
res.send({status: 'error', message: 'we can\'t authenticate you', })
}else{
- res.cookie('auth', crypto.encrypt(persist), { maxAge: 365*24*60*60*1000, httpOnly: true });
+ res.cookie('auth', crypto.encrypt(persist), { maxAge: 365*24*60*60*1000, httpOnly: true, path: "/api/" });
res.send({status: 'ok'});
}
})
@@ -43,7 +43,11 @@ app.post('/', function(req, res){
});
app.delete('/', function(req, res){
- res.clearCookie("auth");
+ res.clearCookie("auth", {path: "/api/"});
+
+ // TODO in May 2019: remove the line below which was inserted to mitigate a cookie migration issue.
+ res.clearCookie("auth"); // the issue was a change in the cookie path which would have make
+ // impossible for an existing user to logout
res.send({status: 'ok'})
});
diff --git a/server/index.js b/server/index.js
index 96c044a6..d38d92d5 100644
--- a/server/index.js
+++ b/server/index.js
@@ -4,7 +4,7 @@ var app = require('./bootstrap'),
sessionRouter = require('./ctrl/session');
-app.get('/ping', function(req, res){ res.send('pong')})
+app.get('/api/ping', function(req, res){ res.send('pong')})
app.use('/api/files', filesRouter)
app.use('/api/session', sessionRouter);
app.use('/', express.static(__dirname + '/public/'))
diff --git a/server/public/cache.js b/server/public/cache.js
index c4005916..53224a35 100644
--- a/server/public/cache.js
+++ b/server/public/cache.js
@@ -92,7 +92,7 @@ function smartCacheStrategy(request){
.catch(function(err){
return fetchAndCache(request);
});
- });
+ }).catch(() => return request);
function fetchAndCache(_request){
@@ -110,7 +110,7 @@ function smartCacheStrategy(request){
cache.put(_request, responseClone);
});
return response;
- });
+ }).catch(() => return _request);
}
function nil(e){}
}
@@ -128,7 +128,7 @@ function networkFirstStrategy(request){
network(request.clone && request.clone() || request)
.then(done)
.catch(error);
- });
+ }).catch(() => return request);
function network(request){
return fetch(request)