Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
PUBLIC
/
surfer-okd
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit b3ff26fb
authored
Oct 08, 2018
by
Johannes Zellner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove redis dependency only for few tokens
1 parent
08c34b20
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
36 additions
and
63 deletions
.gitignore
CHANGELOG
CloudronManifest.json
npm-shrinkwrap.json
package.json
server.js
src/auth.js
start.sh
.gitignore
View file @
b3ff26f
...
...
@@ -2,3 +2,4 @@ node_modules/
files/
.users.json
.config.json
.tokens.json
CHANGELOG
View file @
b3ff26f
...
...
@@ -67,3 +67,6 @@
[5.2.0]
* Disable folder listing by default
* Do not render welcome screen if folder listing is enabled
[5.3.0]
* Replacing redis token store with local json file
CloudronManifest.json
View file @
b3ff26f
...
...
@@ -19,7 +19,6 @@
"icon"
:
"logo.png"
,
"addons"
:
{
"ldap"
:
{},
"redis"
:
{},
"localstorage"
:
{}
},
"mediaLinks"
:
[
...
...
npm-shrinkwrap.json
View file @
b3ff26f
...
...
@@ -429,11 +429,6 @@
"integrity"
:
"sha1-fyjS657nsVqX79ic5j3P2qPMur8="
,
"dev"
:
true
},
"double-ended-queue"
:
{
"version"
:
"2.1.0-0"
,
"resolved"
:
"https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz"
,
"integrity"
:
"sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw="
},
"dtrace-provider"
:
{
"version"
:
"0.2.8"
,
"resolved"
:
"https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz"
,
...
...
@@ -1300,26 +1295,6 @@
"resolved"
:
"https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz"
,
"integrity"
:
"sha1-PtqOZfI80qF+YTAbHwADOWr17No="
},
"redis"
:
{
"version"
:
"2.8.0"
,
"resolved"
:
"https://registry.npmjs.org/redis/-/redis-2.8.0.tgz"
,
"integrity"
:
"sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A=="
,
"requires"
:
{
"double-ended-queue"
:
"2.1.0-0"
,
"redis-commands"
:
"1.3.1"
,
"redis-parser"
:
"2.6.0"
}
},
"redis-commands"
:
{
"version"
:
"1.3.1"
,
"resolved"
:
"https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz"
,
"integrity"
:
"sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs="
},
"redis-parser"
:
{
"version"
:
"2.6.0"
,
"resolved"
:
"https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz"
,
"integrity"
:
"sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs="
},
"reduce-component"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"http://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz"
,
...
...
package.json
View file @
b3ff26f
...
...
@@ -40,7 +40,6 @@
"passport-http-bearer"
:
"^1.0.1"
,
"passport-ldapjs"
:
"^1.0.3"
,
"readline-sync"
:
"^1.4.9"
,
"redis"
:
"^2.8.0"
,
"request"
:
"^2.83.0"
,
"safetydance"
:
"^0.1.1"
,
"serve-index"
:
"^1.9.1"
,
...
...
server.js
View file @
b3ff26f
...
...
@@ -22,11 +22,11 @@ var express = require('express'),
files
=
require
(
'./src/files.js'
)(
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
));
var
rootFolder
=
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
);
var
configFile
=
path
.
resolve
(
__dirname
,
process
.
argv
[
3
]
||
'.config.json'
);
const
ROOT_FOLDER
=
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
);
const
CONFIG_FILE
=
path
.
resolve
(
__dirname
,
process
.
argv
[
3
]
||
'.config.json'
);
// Ensure the root folder exists
mkdirp
.
sync
(
rootFolder
);
mkdirp
.
sync
(
ROOT_FOLDER
);
var
config
=
{
folderListingEnabled
:
false
...
...
@@ -41,7 +41,7 @@ function setSettings(req, res, next) {
config
.
folderListingEnabled
=
!!
req
.
body
.
folderListingEnabled
;
fs
.
writeFile
(
configFile
,
JSON
.
stringify
(
config
),
function
(
error
)
{
fs
.
writeFile
(
CONFIG_FILE
,
JSON
.
stringify
(
config
),
function
(
error
)
{
if
(
error
)
return
next
(
new
HttpError
(
500
,
'unable to save settings'
));
next
(
new
HttpSuccess
(
201
,
{}));
...
...
@@ -50,10 +50,11 @@ function setSettings(req, res, next) {
// Load the config file
try
{
config
=
require
(
configFile
);
console
.
log
(
`Using config file:
${
CONFIG_FILE
}
`
);
config
=
require
(
CONFIG_FILE
);
}
catch
(
e
)
{
if
(
e
.
code
===
'MODULE_NOT_FOUND'
)
console
.
log
(
`Config file
${
configFile
}
not found`
);
else
console
.
log
(
`Cannot load config file
${
configFile
}
`
,
e
);
if
(
e
.
code
===
'MODULE_NOT_FOUND'
)
console
.
log
(
`Config file
${
CONFIG_FILE
}
not found`
);
else
console
.
log
(
`Cannot load config file
${
CONFIG_FILE
}
`
,
e
);
}
if
(
typeof
config
.
folderListingEnabled
===
'undefined'
)
config
.
folderListingEnabled
=
true
;
...
...
@@ -85,7 +86,7 @@ app.use('/api', passport.initialize());
app
.
use
(
'/api'
,
passport
.
session
());
app
.
use
(
router
);
app
.
use
(
'/_admin'
,
express
.
static
(
__dirname
+
'/frontend'
));
app
.
use
(
'/'
,
express
.
static
(
rootFolder
));
app
.
use
(
'/'
,
express
.
static
(
ROOT_FOLDER
));
app
.
use
(
'/'
,
function
welcomePage
(
req
,
res
,
next
)
{
if
(
config
.
folderListingEnabled
||
req
.
path
!==
'/'
)
return
next
();
res
.
status
(
200
).
sendFile
(
path
.
join
(
__dirname
,
'/frontend/welcome.html'
));
...
...
@@ -94,7 +95,7 @@ app.use('/', function (req, res, next) {
if
(
config
.
folderListingEnabled
)
return
next
();
res
.
sendFile
(
__dirname
+
'/frontend/404.html'
);
});
app
.
use
(
'/'
,
serveIndex
(
rootFolder
,
{
icons
:
true
}));
app
.
use
(
'/'
,
serveIndex
(
ROOT_FOLDER
,
{
icons
:
true
}));
app
.
use
(
lastMile
());
var
server
=
app
.
listen
(
3000
,
function
()
{
...
...
@@ -102,5 +103,5 @@ var server = app.listen(3000, function () {
var
port
=
server
.
address
().
port
;
console
.
log
(
'Surfer listening on http://%s:%s'
,
host
,
port
);
console
.
log
(
'Using base path'
,
rootFolder
);
console
.
log
(
'Using base path'
,
ROOT_FOLDER
);
});
src/auth.js
View file @
b3ff26f
...
...
@@ -3,53 +3,47 @@
var
passport
=
require
(
'passport'
),
path
=
require
(
'path'
),
safe
=
require
(
'safetydance'
),
fs
=
require
(
'fs'
),
bcrypt
=
require
(
'bcryptjs'
),
uuid
=
require
(
'uuid/v4'
),
redis
=
require
(
'redis'
),
BearerStrategy
=
require
(
'passport-http-bearer'
).
Strategy
,
LdapStrategy
=
require
(
'passport-ldapjs'
).
Strategy
,
HttpError
=
require
(
'connect-lastmile'
).
HttpError
,
HttpSuccess
=
require
(
'connect-lastmile'
).
HttpSuccess
;
var
LOCAL_AUTH_FILE
=
path
.
resolve
(
process
.
env
.
LOCAL_AUTH_FILE
||
'./.users.json'
);
const
LOCAL_AUTH_FILE
=
path
.
resolve
(
process
.
env
.
LOCAL_AUTH_FILE
||
'./.users.json'
);
const
TOKENSTORE_FILE
=
path
.
resolve
(
process
.
env
.
TOKENSTORE_FILE
||
'./.tokens.json'
);
var
tokenStore
=
{
data
:
{},
save
:
function
()
{
try
{
fs
.
writeFileSync
(
TOKENSTORE_FILE
,
JSON
.
stringify
(
tokenStore
.
data
),
'utf-8'
);
}
catch
(
e
)
{
console
.
error
(
`Unable to save tokenstore file at
${
TOKENSTORE_FILE
}
`
,
e
);
}
},
get
:
function
(
token
,
callback
)
{
callback
(
tokenStore
.
data
[
token
]
?
null
:
'not found'
,
tokenStore
.
data
[
token
]);
},
set
:
function
(
token
,
data
,
callback
)
{
tokenStore
.
data
[
token
]
=
data
;
tokenStore
.
save
();
callback
(
null
);
},
del
:
function
(
token
,
callback
)
{
delete
tokenStore
.
data
[
token
];
tokenStore
.
save
();
callback
(
null
);
}
};
if
(
process
.
env
.
REDIS_URL
)
{
console
.
log
(
'Enable redis token store'
);
var
redisClient
=
redis
.
createClient
(
process
.
env
.
REDIS_URL
);
if
(
process
.
env
.
REDIS_PASSWORD
)
{
console
.
log
(
'Using redis auth'
);
redisClient
.
auth
(
process
.
env
.
REDIS_PASSWORD
);
}
// overwrite the tokenStore api
tokenStore
.
get
=
function
(
token
,
callback
)
{
redisClient
.
get
(
token
,
function
(
error
,
result
)
{
callback
(
error
||
null
,
safe
.
JSON
.
parse
(
result
));
});
};
tokenStore
.
set
=
function
(
token
,
data
,
callback
)
{
redisClient
.
set
(
token
,
JSON
.
stringify
(
data
),
callback
);
};
tokenStore
.
del
=
redisClient
.
del
.
bind
(
redisClient
);
}
else
{
console
.
log
(
'Use in-memory token store'
);
// load token store data if any
try
{
console
.
log
(
`Using tokenstore file:
${
TOKENSTORE_FILE
}
`
);
tokenStore
.
data
=
JSON
.
parse
(
fs
.
readFileSync
(
TOKENSTORE_FILE
,
'utf-8'
));
}
catch
(
e
)
{
// start with empty token store
}
function
issueAccessToken
()
{
...
...
@@ -77,11 +71,11 @@ var LDAP_URL = process.env.LDAP_URL;
var
LDAP_USERS_BASE_DN
=
process
.
env
.
LDAP_USERS_BASE_DN
;
if
(
LDAP_URL
&&
LDAP_USERS_BASE_DN
)
{
console
.
log
(
'
Enable
ldap auth'
);
console
.
log
(
'
Using
ldap auth'
);
exports
.
login
=
[
passport
.
authenticate
(
'ldap'
),
issueAccessToken
()
];
}
else
{
console
.
log
(
'Use local user file:'
,
LOCAL_AUTH_FILE
);
console
.
log
(
`Using local user file:
${
LOCAL_AUTH_FILE
}
`
);
exports
.
login
=
[
function
(
req
,
res
,
next
)
{
...
...
start.sh
View file @
b3ff26f
...
...
@@ -3,6 +3,7 @@
set
-eu
export
NODE_ENV
=
production
export
TOKENSTORE_FILE
=
/app/data/tokens.json
if
[[
! -d
"/app/data/surfer_root"
]]
;
then
echo
"=> Migrating root folder from /app/data to /app/data/surfer_root"
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment