1 /* Copyright (c) 2019 AT&T Intellectual Property. #
\r
3 # Licensed under the Apache License, Version 2.0 (the "License"); #
\r
4 # you may not use this file except in compliance with the License. #
\r
5 # You may obtain a copy of the License at #
\r
7 # http://www.apache.org/licenses/LICENSE-2.0 #
\r
9 # Unless required by applicable law or agreed to in writing, software #
\r
10 # distributed under the License is distributed on an "AS IS" BASIS, #
\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
\r
12 # See the License for the specific language governing permissions and #
\r
13 # limitations under the License. #
\r
14 ##############################################################################*/
\r
17 // Initializes the `users` service on path `/users`
\r
18 const createService = require('feathers-mongoose');
\r
19 const createModel = require('../../models/users.model');
\r
20 const hooks = require('./users.hooks');
\r
22 const RateLimit = require('express-rate-limit');
\r
23 const MongoStore = require('rate-limit-mongo');
\r
25 module.exports = function (app) {
\r
26 const Model = createModel(app);
\r
27 const paginate = app.get('paginate');
\r
34 const mongoConfig = app.get('mongo');
\r
35 const rateLimitConfig = app.get('rate-limit');
\r
37 const createUserLimiter = new RateLimit({
\r
38 store: new MongoStore({
\r
39 uri: 'mongodb://' + mongoConfig.username + ':' + mongoConfig.password + '@' + mongoConfig.baseUrl +
\r
40 mongoConfig.dbOtf + '?replicaSet=' + mongoConfig.replicaSet,
\r
41 collectionName: rateLimitConfig.mongoStore.collection
\r
43 max: app.get('rate-limit').services.users.max,
\r
44 windowsMs: app.get('rate-limit').services.users.windowMs,
\r
45 message: app.get('rate-limit').services.users.message
\r
48 // Initialize our service with any options it requires,
\r
49 // and limit any POST methods.
\r
50 app.use(app.get('base-path') + 'users', (req, res, next) => {
\r
51 if (req.method === 'POST') {
\r
52 createUserLimiter(req, res, next);
\r
56 }, createService(options));
\r
58 // Get our initialized service so that we can register hooks
\r
59 const service = app.service(app.get('base-path') + 'users');
\r
61 service.hooks(hooks);
\r