diff options
author | Johannes Zellner <johannes@cloudron.io> | 2019-02-23 22:40:58 +0100 |
---|---|---|
committer | Johannes Zellner <johannes@cloudron.io> | 2019-02-23 22:40:58 +0100 |
commit | 7af3d8556de81996d476d92807928fafdc91c41b (patch) | |
tree | 379922954ee45cd23cb25cb955ab1220ed2924ce /src | |
parent | a7317b4ba7e4f37ab1e562669c03e4867c070d39 (diff) | |
download | Surfer-7af3d8556de81996d476d92807928fafdc91c41b.tar.gz Surfer-7af3d8556de81996d476d92807928fafdc91c41b.tar.zst Surfer-7af3d8556de81996d476d92807928fafdc91c41b.zip |
add webdav server for easier file access
Diffstat (limited to 'src')
-rw-r--r-- | src/auth.js | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/auth.js b/src/auth.js index 093f297..67c2050 100644 --- a/src/auth.js +++ b/src/auth.js | |||
@@ -9,7 +9,8 @@ var passport = require('passport'), | |||
9 | BearerStrategy = require('passport-http-bearer').Strategy, | 9 | BearerStrategy = require('passport-http-bearer').Strategy, |
10 | LdapStrategy = require('passport-ldapjs').Strategy, | 10 | LdapStrategy = require('passport-ldapjs').Strategy, |
11 | HttpError = require('connect-lastmile').HttpError, | 11 | HttpError = require('connect-lastmile').HttpError, |
12 | HttpSuccess = require('connect-lastmile').HttpSuccess; | 12 | HttpSuccess = require('connect-lastmile').HttpSuccess, |
13 | webdavErrors = require('webdav-server').v2.Errors; | ||
13 | 14 | ||
14 | const LOCAL_AUTH_FILE = path.resolve(process.env.LOCAL_AUTH_FILE || './.users.json'); | 15 | const LOCAL_AUTH_FILE = path.resolve(process.env.LOCAL_AUTH_FILE || './.users.json'); |
15 | const TOKENSTORE_FILE = path.resolve(process.env.TOKENSTORE_FILE || './.tokens.json'); | 16 | const TOKENSTORE_FILE = path.resolve(process.env.TOKENSTORE_FILE || './.tokens.json'); |
@@ -140,3 +141,39 @@ exports.logout = function (req, res, next) { | |||
140 | exports.getProfile = function (req, res, next) { | 141 | exports.getProfile = function (req, res, next) { |
141 | next(new HttpSuccess(200, { username: req.user.username })); | 142 | next(new HttpSuccess(200, { username: req.user.username })); |
142 | }; | 143 | }; |
144 | |||
145 | // webdav usermanager | ||
146 | exports.WebdavUserManager = WebdavUserManager; | ||
147 | |||
148 | // This implements the required interface only for the Basic Authentication for webdav-server | ||
149 | function WebdavUserManager() {}; | ||
150 | |||
151 | WebdavUserManager.prototype.getDefaultUser = function (callback) { | ||
152 | // this is only a dummy user, since we always require authentication | ||
153 | var user = { | ||
154 | username: 'DefaultUser', | ||
155 | password: null, | ||
156 | isAdministrator: false, | ||
157 | isDefaultUser: true, | ||
158 | uid: 'DefaultUser' | ||
159 | }; | ||
160 | |||
161 | callback(user); | ||
162 | }; | ||
163 | |||
164 | WebdavUserManager.prototype.getUserByNamePassword = function (username, password, callback) { | ||
165 | var users = safe.JSON.parse(safe.fs.readFileSync(LOCAL_AUTH_FILE)); | ||
166 | if (!users) return callback(webdavErrors.UserNotFound); | ||
167 | if (!users[username]) return callback(webdavErrors.UserNotFound); | ||
168 | |||
169 | bcrypt.compare(password, users[username].passwordHash, function (error, valid) { | ||
170 | if (error || !valid) return callback(webdavErrors.UserNotFound); | ||
171 | |||
172 | callback(null, { | ||
173 | username: username, | ||
174 | isAdministrator: true, | ||
175 | isDefaultUser: false, | ||
176 | uid: username | ||
177 | }); | ||
178 | }); | ||
179 | }; | ||