X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=it%2Fotf.git;a=blobdiff_plain;f=otf-frontend%2Fserver%2Fsrc%2Ffeathers%2Fservices%2Fusers%2Fusers.service.js;fp=otf-frontend%2Fserver%2Fsrc%2Ffeathers%2Fservices%2Fusers%2Fusers.service.js;h=b4350bb83391c77a136b105978a9f1590f9a7980;hp=0000000000000000000000000000000000000000;hb=14f6f95c84a4a1fa8774190db4a03fd0214ec55f;hpb=f49bd1efeaaddd4891c1f329b18d8cfb28b3e75b diff --git a/otf-frontend/server/src/feathers/services/users/users.service.js b/otf-frontend/server/src/feathers/services/users/users.service.js new file mode 100644 index 0000000..b4350bb --- /dev/null +++ b/otf-frontend/server/src/feathers/services/users/users.service.js @@ -0,0 +1,62 @@ +/* Copyright (c) 2019 AT&T Intellectual Property. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +##############################################################################*/ + + +// Initializes the `users` service on path `/users` +const createService = require('feathers-mongoose'); +const createModel = require('../../models/users.model'); +const hooks = require('./users.hooks'); + +const RateLimit = require('express-rate-limit'); +const MongoStore = require('rate-limit-mongo'); + +module.exports = function (app) { + const Model = createModel(app); + const paginate = app.get('paginate'); + + const options = { + Model, + paginate + }; + + const mongoConfig = app.get('mongo'); + const rateLimitConfig = app.get('rate-limit'); + + const createUserLimiter = new RateLimit({ + store: new MongoStore({ + uri: 'mongodb://' + mongoConfig.username + ':' + mongoConfig.password + '@' + mongoConfig.baseUrl + + mongoConfig.dbOtf + '?replicaSet=' + mongoConfig.replicaSet, + collectionName: rateLimitConfig.mongoStore.collection + }), + max: app.get('rate-limit').services.users.max, + windowsMs: app.get('rate-limit').services.users.windowMs, + message: app.get('rate-limit').services.users.message + }); + + // Initialize our service with any options it requires, + // and limit any POST methods. + app.use(app.get('base-path') + 'users', (req, res, next) => { + if (req.method === 'POST') { + createUserLimiter(req, res, next); + } else { + next(); + } + }, createService(options)); + + // Get our initialized service so that we can register hooks + const service = app.service(app.get('base-path') + 'users'); + + service.hooks(hooks); +};