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
Hide 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/
...
@@ -2,3 +2,4 @@ node_modules/
files/
files/
.users.json
.users.json
.config.json
.config.json
.tokens.json
CHANGELOG
View file @
b3ff26f
...
@@ -67,3 +67,6 @@
...
@@ -67,3 +67,6 @@
[5.2.0]
[5.2.0]
* Disable folder listing by default
* Disable folder listing by default
* Do not render welcome screen if folder listing is enabled
* 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 @@
...
@@ -19,7 +19,6 @@
"icon"
:
"logo.png"
,
"icon"
:
"logo.png"
,
"addons"
:
{
"addons"
:
{
"ldap"
:
{},
"ldap"
:
{},
"redis"
:
{},
"localstorage"
:
{}
"localstorage"
:
{}
},
},
"mediaLinks"
:
[
"mediaLinks"
:
[
...
...
npm-shrinkwrap.json
View file @
b3ff26f
...
@@ -429,11 +429,6 @@
...
@@ -429,11 +429,6 @@
"integrity"
:
"sha1-fyjS657nsVqX79ic5j3P2qPMur8="
,
"integrity"
:
"sha1-fyjS657nsVqX79ic5j3P2qPMur8="
,
"dev"
:
true
"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"
:
{
"dtrace-provider"
:
{
"version"
:
"0.2.8"
,
"version"
:
"0.2.8"
,
"resolved"
:
"https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz"
,
...
@@ -1300,26 +1295,6 @@
...
@@ -1300,26 +1295,6 @@
"resolved"
:
"https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz"
,
"resolved"
:
"https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz"
,
"integrity"
:
"sha1-PtqOZfI80qF+YTAbHwADOWr17No="
"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"
:
{
"reduce-component"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"http://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz"
,
"resolved"
:
"http://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz"
,
...
...
package.json
View file @
b3ff26f
...
@@ -40,7 +40,6 @@
...
@@ -40,7 +40,6 @@
"passport-http-bearer"
:
"^1.0.1"
,
"passport-http-bearer"
:
"^1.0.1"
,
"passport-ldapjs"
:
"^1.0.3"
,
"passport-ldapjs"
:
"^1.0.3"
,
"readline-sync"
:
"^1.4.9"
,
"readline-sync"
:
"^1.4.9"
,
"redis"
:
"^2.8.0"
,
"request"
:
"^2.83.0"
,
"request"
:
"^2.83.0"
,
"safetydance"
:
"^0.1.1"
,
"safetydance"
:
"^0.1.1"
,
"serve-index"
:
"^1.9.1"
,
"serve-index"
:
"^1.9.1"
,
...
...
server.js
View file @
b3ff26f
...
@@ -22,11 +22,11 @@ var express = require('express'),
...
@@ -22,11 +22,11 @@ var express = require('express'),
files
=
require
(
'./src/files.js'
)(
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
));
files
=
require
(
'./src/files.js'
)(
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
));
var
rootFolder
=
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
);
const
ROOT_FOLDER
=
path
.
resolve
(
__dirname
,
process
.
argv
[
2
]
||
'files'
);
var
configFile
=
path
.
resolve
(
__dirname
,
process
.
argv
[
3
]
||
'.config.json'
);
const
CONFIG_FILE
=
path
.
resolve
(
__dirname
,
process
.
argv
[
3
]
||
'.config.json'
);
// Ensure the root folder exists
// Ensure the root folder exists
mkdirp
.
sync
(
rootFolder
);
mkdirp
.
sync
(
ROOT_FOLDER
);
var
config
=
{
var
config
=
{
folderListingEnabled
:
false
folderListingEnabled
:
false
...
@@ -41,7 +41,7 @@ function setSettings(req, res, next) {
...
@@ -41,7 +41,7 @@ function setSettings(req, res, next) {
config
.
folderListingEnabled
=
!!
req
.
body
.
folderListingEnabled
;
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'
));
if
(
error
)
return
next
(
new
HttpError
(
500
,
'unable to save settings'
));
next
(
new
HttpSuccess
(
201
,
{}));
next
(
new
HttpSuccess
(
201
,
{}));
...
@@ -50,10 +50,11 @@ function setSettings(req, res, next) {
...
@@ -50,10 +50,11 @@ function setSettings(req, res, next) {
// Load the config file
// Load the config file
try
{
try
{
config
=
require
(
configFile
);
console
.
log
(
`Using config file:
${
CONFIG_FILE
}
`
);
config
=
require
(
CONFIG_FILE
);
}
catch
(
e
)
{
}
catch
(
e
)
{
if
(
e
.
code
===
'MODULE_NOT_FOUND'
)
console
.
log
(
`Config file
${
configFile
}
not found`
);
if
(
e
.
code
===
'MODULE_NOT_FOUND'
)
console
.
log
(
`Config file
${
CONFIG_FILE
}
not found`
);
else
console
.
log
(
`Cannot load config file
${
configFile
}
`
,
e
);
else
console
.
log
(
`Cannot load config file
${
CONFIG_FILE
}
`
,
e
);
}
}
if
(
typeof
config
.
folderListingEnabled
===
'undefined'
)
config
.
folderListingEnabled
=
true
;
if
(
typeof
config
.
folderListingEnabled
===
'undefined'
)
config
.
folderListingEnabled
=
true
;
...
@@ -85,7 +86,7 @@ app.use('/api', passport.initialize());
...
@@ -85,7 +86,7 @@ app.use('/api', passport.initialize());
app
.
use
(
'/api'
,
passport
.
session
());
app
.
use
(
'/api'
,
passport
.
session
());
app
.
use
(
router
);
app
.
use
(
router
);
app
.
use
(
'/_admin'
,
express
.
static
(
__dirname
+
'/frontend'
));
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
)
{
app
.
use
(
'/'
,
function
welcomePage
(
req
,
res
,
next
)
{
if
(
config
.
folderListingEnabled
||
req
.
path
!==
'/'
)
return
next
();
if
(
config
.
folderListingEnabled
||
req
.
path
!==
'/'
)
return
next
();
res
.
status
(
200
).
sendFile
(
path
.
join
(
__dirname
,
'/frontend/welcome.html'
));
res
.
status
(
200
).
sendFile
(
path
.
join
(
__dirname
,
'/frontend/welcome.html'
));
...
@@ -94,7 +95,7 @@ app.use('/', function (req, res, next) {
...
@@ -94,7 +95,7 @@ app.use('/', function (req, res, next) {
if
(
config
.
folderListingEnabled
)
return
next
();
if
(
config
.
folderListingEnabled
)
return
next
();
res
.
sendFile
(
__dirname
+
'/frontend/404.html'
);
res
.
sendFile
(
__dirname
+
'/frontend/404.html'
);
});
});
app
.
use
(
'/'
,
serveIndex
(
rootFolder
,
{
icons
:
true
}));
app
.
use
(
'/'
,
serveIndex
(
ROOT_FOLDER
,
{
icons
:
true
}));
app
.
use
(
lastMile
());
app
.
use
(
lastMile
());
var
server
=
app
.
listen
(
3000
,
function
()
{
var
server
=
app
.
listen
(
3000
,
function
()
{
...
@@ -102,5 +103,5 @@ var server = app.listen(3000, function () {
...
@@ -102,5 +103,5 @@ var server = app.listen(3000, function () {
var
port
=
server
.
address
().
port
;
var
port
=
server
.
address
().
port
;
console
.
log
(
'Surfer listening on http://%s:%s'
,
host
,
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 @@
...
@@ -3,53 +3,47 @@
var
passport
=
require
(
'passport'
),
var
passport
=
require
(
'passport'
),
path
=
require
(
'path'
),
path
=
require
(
'path'
),
safe
=
require
(
'safetydance'
),
safe
=
require
(
'safetydance'
),
fs
=
require
(
'fs'
),
bcrypt
=
require
(
'bcryptjs'
),
bcrypt
=
require
(
'bcryptjs'
),
uuid
=
require
(
'uuid/v4'
),
uuid
=
require
(
'uuid/v4'
),
redis
=
require
(
'redis'
),
BearerStrategy
=
require
(
'passport-http-bearer'
).
Strategy
,
BearerStrategy
=
require
(
'passport-http-bearer'
).
Strategy
,
LdapStrategy
=
require
(
'passport-ldapjs'
).
Strategy
,
LdapStrategy
=
require
(
'passport-ldapjs'
).
Strategy
,
HttpError
=
require
(
'connect-lastmile'
).
HttpError
,
HttpError
=
require
(
'connect-lastmile'
).
HttpError
,
HttpSuccess
=
require
(
'connect-lastmile'
).
HttpSuccess
;
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
=
{
var
tokenStore
=
{
data
:
{},
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
)
{
get
:
function
(
token
,
callback
)
{
callback
(
tokenStore
.
data
[
token
]
?
null
:
'not found'
,
tokenStore
.
data
[
token
]);
callback
(
tokenStore
.
data
[
token
]
?
null
:
'not found'
,
tokenStore
.
data
[
token
]);
},
},
set
:
function
(
token
,
data
,
callback
)
{
set
:
function
(
token
,
data
,
callback
)
{
tokenStore
.
data
[
token
]
=
data
;
tokenStore
.
data
[
token
]
=
data
;
tokenStore
.
save
();
callback
(
null
);
callback
(
null
);
},
},
del
:
function
(
token
,
callback
)
{
del
:
function
(
token
,
callback
)
{
delete
tokenStore
.
data
[
token
];
delete
tokenStore
.
data
[
token
];
tokenStore
.
save
();
callback
(
null
);
callback
(
null
);
}
}
};
};
if
(
process
.
env
.
REDIS_URL
)
{
// load token store data if any
console
.
log
(
'Enable redis token store'
);
try
{
console
.
log
(
`Using tokenstore file:
${
TOKENSTORE_FILE
}
`
);
var
redisClient
=
redis
.
createClient
(
process
.
env
.
REDIS_URL
);
tokenStore
.
data
=
JSON
.
parse
(
fs
.
readFileSync
(
TOKENSTORE_FILE
,
'utf-8'
));
}
catch
(
e
)
{
if
(
process
.
env
.
REDIS_PASSWORD
)
{
// start with empty token store
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'
);
}
}
function
issueAccessToken
()
{
function
issueAccessToken
()
{
...
@@ -77,11 +71,11 @@ var LDAP_URL = process.env.LDAP_URL;
...
@@ -77,11 +71,11 @@ var LDAP_URL = process.env.LDAP_URL;
var
LDAP_USERS_BASE_DN
=
process
.
env
.
LDAP_USERS_BASE_DN
;
var
LDAP_USERS_BASE_DN
=
process
.
env
.
LDAP_USERS_BASE_DN
;
if
(
LDAP_URL
&&
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
()
];
exports
.
login
=
[
passport
.
authenticate
(
'ldap'
),
issueAccessToken
()
];
}
else
{
}
else
{
console
.
log
(
'Use local user file:'
,
LOCAL_AUTH_FILE
);
console
.
log
(
`Using local user file:
${
LOCAL_AUTH_FILE
}
`
);
exports
.
login
=
[
exports
.
login
=
[
function
(
req
,
res
,
next
)
{
function
(
req
,
res
,
next
)
{
...
...
start.sh
View file @
b3ff26f
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
set
-eu
set
-eu
export
NODE_ENV
=
production
export
NODE_ENV
=
production
export
TOKENSTORE_FILE
=
/app/data/tokens.json
if
[[
! -d
"/app/data/surfer_root"
]]
;
then
if
[[
! -d
"/app/data/surfer_root"
]]
;
then
echo
"=> Migrating root folder from /app/data to /app/data/surfer_root"
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