added svcapi ui and camunda code
[it/otf.git] / otf-frontend / server / src / feathers / services / users / users.service.js
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 (file)
index 0000000..b4350bb
--- /dev/null
@@ -0,0 +1,62 @@
+/*  Copyright (c) 2019 AT&T Intellectual Property.                             #\r
+#                                                                              #\r
+#   Licensed under the Apache License, Version 2.0 (the "License");            #\r
+#   you may not use this file except in compliance with the License.           #\r
+#   You may obtain a copy of the License at                                    #\r
+#                                                                              #\r
+#       http://www.apache.org/licenses/LICENSE-2.0                             #\r
+#                                                                              #\r
+#   Unless required by applicable law or agreed to in writing, software        #\r
+#   distributed under the License is distributed on an "AS IS" BASIS,          #\r
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #\r
+#   See the License for the specific language governing permissions and        #\r
+#   limitations under the License.                                             #\r
+##############################################################################*/\r
+\r
+\r
+// Initializes the `users` service on path `/users`\r
+const createService = require('feathers-mongoose');\r
+const createModel = require('../../models/users.model');\r
+const hooks = require('./users.hooks');\r
+\r
+const RateLimit = require('express-rate-limit');\r
+const MongoStore = require('rate-limit-mongo');\r
+\r
+module.exports = function (app) {\r
+       const Model = createModel(app);\r
+       const paginate = app.get('paginate');\r
+\r
+       const options = {\r
+               Model,\r
+               paginate\r
+       };\r
+\r
+       const mongoConfig = app.get('mongo');\r
+       const rateLimitConfig = app.get('rate-limit');\r
+\r
+       const createUserLimiter = new RateLimit({\r
+               store: new MongoStore({\r
+                       uri: 'mongodb://' + mongoConfig.username + ':' + mongoConfig.password + '@' + mongoConfig.baseUrl +\r
+                               mongoConfig.dbOtf + '?replicaSet=' + mongoConfig.replicaSet,\r
+                       collectionName: rateLimitConfig.mongoStore.collection\r
+               }),\r
+               max: app.get('rate-limit').services.users.max,\r
+               windowsMs: app.get('rate-limit').services.users.windowMs,\r
+               message: app.get('rate-limit').services.users.message\r
+       });\r
+\r
+       // Initialize our service with any options it requires,\r
+       // and limit any POST methods.\r
+       app.use(app.get('base-path') + 'users', (req, res, next) => {\r
+               if (req.method === 'POST') {\r
+                       createUserLimiter(req, res, next);\r
+               } else {\r
+                       next();\r
+               }\r
+       }, createService(options));\r
+\r
+       // Get our initialized service so that we can register hooks\r
+       const service = app.service(app.get('base-path') + 'users');\r
+\r
+       service.hooks(hooks);\r
+};\r