From ed1cde024e2b376a9285e708647be70fe4d00bf9 Mon Sep 17 00:00:00 2001 From: Nitin Goyal Date: Mon, 18 Dec 2017 23:33:24 +0530 Subject: [PATCH 01/23] update ui add offset instead of div --- app-frontend/src/templates/settings.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app-frontend/src/templates/settings.html b/app-frontend/src/templates/settings.html index 2137307..bd8160d 100644 --- a/app-frontend/src/templates/settings.html +++ b/app-frontend/src/templates/settings.html @@ -1,6 +1,5 @@
-
-
+
@@ -45,8 +44,7 @@
-
-
+
@@ -86,4 +84,4 @@
-
\ No newline at end of file +
From c76b198d417822fe1f9b1b18cc59d00f2b678c34 Mon Sep 17 00:00:00 2001 From: Nitin Goyal Date: Mon, 18 Dec 2017 23:46:56 +0530 Subject: [PATCH 02/23] update ui div change to offset --- app-frontend/src/templates/nodes.html | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/app-frontend/src/templates/nodes.html b/app-frontend/src/templates/nodes.html index 0bd3b90..2bff540 100644 --- a/app-frontend/src/templates/nodes.html +++ b/app-frontend/src/templates/nodes.html @@ -3,8 +3,7 @@
-
-
+
@@ -12,15 +11,13 @@
-
-
+
-
-
+
@@ -28,15 +25,13 @@
-
-
+
-
-
+
@@ -44,8 +39,7 @@
-
-
+
@@ -72,8 +66,7 @@
-
-
+
@@ -104,4 +97,4 @@


-
\ No newline at end of file +
diff --git a/app-backend/dist/templates/settings.html b/app-backend/dist/templates/settings.html index fa33914..5b6d0af 100644 --- a/app-backend/dist/templates/settings.html +++ b/app-backend/dist/templates/settings.html @@ -1,6 +1,5 @@
-
-
+
@@ -44,8 +43,7 @@
-
-
+
@@ -85,4 +83,4 @@
-
\ No newline at end of file +
diff --git a/app-frontend/src/js/captain/apiManager.js b/app-frontend/src/js/captain/apiManager.js index fc1a755..eff1d53 100644 --- a/app-frontend/src/js/captain/apiManager.js +++ b/app-frontend/src/js/captain/apiManager.js @@ -11,7 +11,7 @@ // Uncomment the following line if you have dnsmasq installed // BASE_API = 'http://captain.captain.x/api/v1/'; // Uncomment the following line if you don't have dnsmasq installed - // BASE_API = 'http://127.0.0.1:3000/api/v1/'; + BASE_API = 'http://127.0.0.1:3000/api/v1/'; function ApiManager(captainLogger, $http, $timeout) { diff --git a/app-frontend/src/templates/apps.html b/app-frontend/src/templates/apps.html index cbc036c..eeb64ed 100644 --- a/app-frontend/src/templates/apps.html +++ b/app-frontend/src/templates/apps.html @@ -266,11 +266,11 @@
Username: - +
-
+
Password:
@@ -280,7 +280,7 @@
Repository: - +
From 2c013433e3f6a2f99bdffcc8a5b3da47d51caa88 Mon Sep 17 00:00:00 2001 From: Nitin Goyal Date: Tue, 19 Dec 2017 04:19:50 +0530 Subject: [PATCH 09/23] input type change input type change text to number for instance count --- app-frontend/src/templates/apps.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-frontend/src/templates/apps.html b/app-frontend/src/templates/apps.html index eeb64ed..5a50e12 100644 --- a/app-frontend/src/templates/apps.html +++ b/app-frontend/src/templates/apps.html @@ -433,7 +433,7 @@
Instance Count: - +
From 758676f43cf7d88bd90d0e32db08c4a668c0c24c Mon Sep 17 00:00:00 2001 From: Nitin Goyal Date: Tue, 19 Dec 2017 04:45:44 +0530 Subject: [PATCH 10/23] positive number validation added Positive number validation added to the updateAppDefinitionInDb --- app-backend/src/datastore/DataStoreImpl.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app-backend/src/datastore/DataStoreImpl.js b/app-backend/src/datastore/DataStoreImpl.js index b84dd75..9172f54 100644 --- a/app-backend/src/datastore/DataStoreImpl.js +++ b/app-backend/src/datastore/DataStoreImpl.js @@ -428,8 +428,12 @@ class DataStore { .then(function (appPushWebhookRepoInfo) { instanceCount = Number(instanceCount); + + if (instanceCount > 0) { + app.instanceCount = instanceCount; + } - app.instanceCount = instanceCount; + app.notExposeAsWebApp = !!notExposeAsWebApp; app.nodeId = nodeId; @@ -812,4 +816,4 @@ class DataStore { } -module.exports = DataStore; \ No newline at end of file +module.exports = DataStore; From 736f4d708ba0d5a37d6d193ad6e8ef44fa2ae29e Mon Sep 17 00:00:00 2001 From: Nitin Goyal Date: Tue, 19 Dec 2017 05:56:17 +0530 Subject: [PATCH 11/23] update the number of instance user now can off app by putting instance number to 0 --- app-backend/src/datastore/DataStoreImpl.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app-backend/src/datastore/DataStoreImpl.js b/app-backend/src/datastore/DataStoreImpl.js index 9172f54..94393b1 100644 --- a/app-backend/src/datastore/DataStoreImpl.js +++ b/app-backend/src/datastore/DataStoreImpl.js @@ -429,9 +429,9 @@ class DataStore { instanceCount = Number(instanceCount); - if (instanceCount > 0) { - app.instanceCount = instanceCount; - } + if (instanceCount >= 0) { + app.instanceCount = instanceCount; + } app.notExposeAsWebApp = !!notExposeAsWebApp; From 4c68c7b8722f9a773ba777565bded5ceaca9adf7 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 16:38:40 -0800 Subject: [PATCH 12/23] changed client max size --- app-backend/src/template/root-nginx-conf.ejs | 4 ++-- app-backend/src/template/server-block-conf.ejs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-backend/src/template/root-nginx-conf.ejs b/app-backend/src/template/root-nginx-conf.ejs index 52ccc73..10a4467 100644 --- a/app-backend/src/template/root-nginx-conf.ejs +++ b/app-backend/src/template/root-nginx-conf.ejs @@ -24,7 +24,7 @@ server { listen 80; - client_max_body_size 200m; + client_max_body_size 300m; <% if (captain.hasRootSsl) { @@ -71,7 +71,7 @@ server { listen 80; - client_max_body_size 200m; + client_max_body_size 300m; <% if (registry.hasRootSsl) { %> diff --git a/app-backend/src/template/server-block-conf.ejs b/app-backend/src/template/server-block-conf.ejs index 1793f12..68524e9 100644 --- a/app-backend/src/template/server-block-conf.ejs +++ b/app-backend/src/template/server-block-conf.ejs @@ -6,7 +6,6 @@ server { listen 80; - <% if (s.hasSsl) { %> @@ -17,6 +16,7 @@ } %> + client_max_body_size 500m; server_name <%-s.publicDomain%>; From 10670ae8185e1f91123b2db1074e99bf0706a16d Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 16:41:26 -0800 Subject: [PATCH 13/23] rebuild --- app-backend/dist/js/dashboard.min.js | 238 +++++++++++++-------------- app-backend/dist/templates/apps.html | 2 +- 2 files changed, 120 insertions(+), 120 deletions(-) diff --git a/app-backend/dist/js/dashboard.min.js b/app-backend/dist/js/dashboard.min.js index d9c776b..25fc249 100644 --- a/app-backend/dist/js/dashboard.min.js +++ b/app-backend/dist/js/dashboard.min.js @@ -652,124 +652,6 @@ angular.module('RDash') } }); -/** - * File Upload Read Directive - */ - -angular - .module('RDash') - .directive("fileread", [function () { - return { - scope: { - fileread: "=" - }, - link: function (scope, element, attributes) { - element.bind("change", function (changeEvent) { - scope.$apply(function () { - scope.fileread = changeEvent.target.files[0]; - // or all selected files: - // scope.fileread = changeEvent.target.files; - }); - }); - } - } - }]); -/** - * Loading Directive - * @see http://tobiasahlin.com/spinkit/ - */ - -angular - .module('RDash') - .directive('rdLoading', rdLoading); - -function rdLoading() { - var directive = { - restrict: 'AE', - template: '
' - }; - return directive; -}; -/** - * Widget Body Directive - */ - -angular - .module('RDash') - .directive('rdWidgetBody', rdWidgetBody); - -function rdWidgetBody() { - var directive = { - requires: '^rdWidget', - scope: { - loading: '=?', - classes: '@?' - }, - transclude: true, - template: '
', - restrict: 'E' - }; - return directive; -}; - -/** - * Widget Footer Directive - */ - -angular - .module('RDash') - .directive('rdWidgetFooter', rdWidgetFooter); - -function rdWidgetFooter() { - var directive = { - requires: '^rdWidget', - transclude: true, - template: '', - restrict: 'E' - }; - return directive; -}; -/** - * Widget Header Directive - */ - -angular - .module('RDash') - .directive('rdWidgetHeader', rdWidgetTitle); - -function rdWidgetTitle() { - var directive = { - requires: '^rdWidget', - scope: { - title: '@', - icon: '@' - }, - transclude: true, - template: '
{{title}}
', - restrict: 'E' - }; - return directive; -}; -/** - * Widget Directive - */ - -angular - .module('RDash') - .directive('rdWidget', rdWidget); - -function rdWidget() { - var directive = { - transclude: true, - template: '
', - restrict: 'EA' - }; - return directive; - - function link(scope, element, attrs) { - /* */ - } -}; /** * Alerts Controller */ @@ -1649,4 +1531,122 @@ function SettingsCtrl($scope, $cookieStore, $rootScope, pageDefinitions, }()); -} \ No newline at end of file +} +/** + * File Upload Read Directive + */ + +angular + .module('RDash') + .directive("fileread", [function () { + return { + scope: { + fileread: "=" + }, + link: function (scope, element, attributes) { + element.bind("change", function (changeEvent) { + scope.$apply(function () { + scope.fileread = changeEvent.target.files[0]; + // or all selected files: + // scope.fileread = changeEvent.target.files; + }); + }); + } + } + }]); +/** + * Loading Directive + * @see http://tobiasahlin.com/spinkit/ + */ + +angular + .module('RDash') + .directive('rdLoading', rdLoading); + +function rdLoading() { + var directive = { + restrict: 'AE', + template: '
' + }; + return directive; +}; +/** + * Widget Body Directive + */ + +angular + .module('RDash') + .directive('rdWidgetBody', rdWidgetBody); + +function rdWidgetBody() { + var directive = { + requires: '^rdWidget', + scope: { + loading: '=?', + classes: '@?' + }, + transclude: true, + template: '
', + restrict: 'E' + }; + return directive; +}; + +/** + * Widget Footer Directive + */ + +angular + .module('RDash') + .directive('rdWidgetFooter', rdWidgetFooter); + +function rdWidgetFooter() { + var directive = { + requires: '^rdWidget', + transclude: true, + template: '', + restrict: 'E' + }; + return directive; +}; +/** + * Widget Header Directive + */ + +angular + .module('RDash') + .directive('rdWidgetHeader', rdWidgetTitle); + +function rdWidgetTitle() { + var directive = { + requires: '^rdWidget', + scope: { + title: '@', + icon: '@' + }, + transclude: true, + template: '
{{title}}
', + restrict: 'E' + }; + return directive; +}; +/** + * Widget Directive + */ + +angular + .module('RDash') + .directive('rdWidget', rdWidget); + +function rdWidget() { + var directive = { + transclude: true, + template: '
', + restrict: 'EA' + }; + return directive; + + function link(scope, element, attrs) { + /* */ + } +}; \ No newline at end of file diff --git a/app-backend/dist/templates/apps.html b/app-backend/dist/templates/apps.html index 9ead8d4..f569d6a 100644 --- a/app-backend/dist/templates/apps.html +++ b/app-backend/dist/templates/apps.html @@ -431,7 +431,7 @@
Instance Count: - +
From c4931fa2c0387c84d92750442822afb1f8a34c49 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 16:42:59 -0800 Subject: [PATCH 14/23] bumped version to v0.3 --- app-backend/src/utils/CaptainConstants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-backend/src/utils/CaptainConstants.js b/app-backend/src/utils/CaptainConstants.js index 6f67841..87f3389 100644 --- a/app-backend/src/utils/CaptainConstants.js +++ b/app-backend/src/utils/CaptainConstants.js @@ -24,7 +24,7 @@ let data = { isDebug: EnvVars.CAPTAIN_IS_DEBUG, - version: '0.2.2', + version: '0.3', captainSaltSecretKey: 'captain-salt', From 4edc69f564f34ea512f4ae3b8027b178fa54136e Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 16:49:45 -0800 Subject: [PATCH 15/23] fixed missed commented out section --- app-backend/dist/js/dashboard.min.js | 2 +- app-frontend/src/js/captain/apiManager.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-backend/dist/js/dashboard.min.js b/app-backend/dist/js/dashboard.min.js index 25fc249..0dff67d 100644 --- a/app-backend/dist/js/dashboard.min.js +++ b/app-backend/dist/js/dashboard.min.js @@ -93,7 +93,7 @@ angular // Uncomment the following line if you have dnsmasq installed // BASE_API = 'http://captain.captain.x/api/v1/'; // Uncomment the following line if you don't have dnsmasq installed - BASE_API = 'http://127.0.0.1:3000/api/v1/'; + // BASE_API = 'http://127.0.0.1:3000/api/v1/'; function ApiManager(captainLogger, $http, $timeout) { diff --git a/app-frontend/src/js/captain/apiManager.js b/app-frontend/src/js/captain/apiManager.js index eff1d53..fc1a755 100644 --- a/app-frontend/src/js/captain/apiManager.js +++ b/app-frontend/src/js/captain/apiManager.js @@ -11,7 +11,7 @@ // Uncomment the following line if you have dnsmasq installed // BASE_API = 'http://captain.captain.x/api/v1/'; // Uncomment the following line if you don't have dnsmasq installed - BASE_API = 'http://127.0.0.1:3000/api/v1/'; + // BASE_API = 'http://127.0.0.1:3000/api/v1/'; function ApiManager(captainLogger, $http, $timeout) { From 5e36e423060fa38f6b9333c69e4cf6e2ce008ecb Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 17:22:09 -0800 Subject: [PATCH 16/23] fixed version --- app-backend/src/utils/CaptainConstants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-backend/src/utils/CaptainConstants.js b/app-backend/src/utils/CaptainConstants.js index 87f3389..14de5bf 100644 --- a/app-backend/src/utils/CaptainConstants.js +++ b/app-backend/src/utils/CaptainConstants.js @@ -24,7 +24,7 @@ let data = { isDebug: EnvVars.CAPTAIN_IS_DEBUG, - version: '0.3', + version: '0.3.0', captainSaltSecretKey: 'captain-salt', From 2b375d8ed384d2d9ffeaf2e589b704f27d7fc0a5 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 17:28:34 -0800 Subject: [PATCH 17/23] force refresh after update --- app-backend/dist/js/dashboard.min.js | 4 ++++ app-frontend/src/js/controllers/settings-ctrl.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app-backend/dist/js/dashboard.min.js b/app-backend/dist/js/dashboard.min.js index 0dff67d..c4183d7 100644 --- a/app-backend/dist/js/dashboard.min.js +++ b/app-backend/dist/js/dashboard.min.js @@ -1524,6 +1524,10 @@ function SettingsCtrl($scope, $cookieStore, $rootScope, pageDefinitions, captainToast.showToastSuccess('Update process has successfully started...'); + setTimeout(function () { + window.location.reload(true); + }, 6000); + $scope.loadingState.enabled = false; }); diff --git a/app-frontend/src/js/controllers/settings-ctrl.js b/app-frontend/src/js/controllers/settings-ctrl.js index b2c01a7..dd6b635 100644 --- a/app-frontend/src/js/controllers/settings-ctrl.js +++ b/app-frontend/src/js/controllers/settings-ctrl.js @@ -60,6 +60,10 @@ function SettingsCtrl($scope, $cookieStore, $rootScope, pageDefinitions, captainToast.showToastSuccess('Update process has successfully started...'); + setTimeout(function () { + window.location.reload(true); + }, 6000); + $scope.loadingState.enabled = false; }); From f0824ef53a549086d60c36d5194ee70ea5fa2d9e Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 17:43:58 -0800 Subject: [PATCH 18/23] publishing CLI --- app-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-cli/package.json b/app-cli/package.json index e359b9c..185a313 100644 --- a/app-cli/package.json +++ b/app-cli/package.json @@ -1,6 +1,6 @@ { "name": "captainduckduck", - "version": "1.0.6", + "version": "1.0.7", "description": "CLI tool for CaptainDuckDuck. See CaptainDuckDuck.com for more details.", "main": "captainduckduck.js", "scripts": { From 2d1e1339cc6b5ea22a9b6eb9c9dee432b14dfffe Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 18:54:05 -0800 Subject: [PATCH 19/23] Throw an error instead of logging it if token info changed --- app-backend/src/injection/Injector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-backend/src/injection/Injector.js b/app-backend/src/injection/Injector.js index ab4a12a..2addc4a 100644 --- a/app-backend/src/injection/Injector.js +++ b/app-backend/src/injection/Injector.js @@ -106,7 +106,7 @@ module.exports.injectUserForWebhook = function () { app = appFound; if (app.appPushWebhook.tokenVersion !== decodedInfo.tokenVersion) { - Logger.e('Token Info do not match') + throw new Error('Token Info do not match'); } let user = { From 285e2f36cd171982bfc5b570646add47007eeae4 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 19:16:24 -0800 Subject: [PATCH 20/23] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1388339..79ea7b3 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Captain is a modern automated app deployment & web server manager. It's blazingl - Deploy apps in your own space (Node js, PHP, Python, literally any language!) - Deploying built-in apps is a matter of seconds! MongoDB, Parse, MySQL, WordPress, Postgres and many more. - Secure your services over HTTPS for FREE + - Automatic deploy from Github, Bitbucket and etc by using webhooks! - Attach more nodes and create a cluster in seconds! Captain automatically configures nginx to load balance. - Focus on your apps! Not the bells and whistles just to run your apps! From 3e93291b5f70c30fd1b71e4d52d475cced94600e Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 20:58:06 -0800 Subject: [PATCH 21/23] Update CONTRIBUTING.md --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4b358b4..829b395 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,9 +25,10 @@ or your local machine itself. Needless to say, Docker is required (same minimum > Docker for Mac users: You need to add `/captain` to shared paths. > To do so, click on the Docker icon -> Setting -> File Sharing and add `/captain` -Log in to your machine, clone the git repo, go to `app-backend` directory and run the following line: +Log in to your machine, clone the git repo, go to `app-backend` directory and run the following lines: ```bash +npm install ./dev-clean-run-as-dev.sh ``` You are good to go! You can run the following line to see the logs for the back-end service. From 367cf43befcd74ce53bb02b2c578b6b5c7284d02 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 18 Dec 2017 20:58:34 -0800 Subject: [PATCH 22/23] Update CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 829b395..91e9232 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,8 +28,8 @@ or your local machine itself. Needless to say, Docker is required (same minimum Log in to your machine, clone the git repo, go to `app-backend` directory and run the following lines: ```bash -npm install -./dev-clean-run-as-dev.sh +$ npm install +$ ./dev-clean-run-as-dev.sh ``` You are good to go! You can run the following line to see the logs for the back-end service. From 27033c3235c82b7bc1838125e63053af20b96398 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Tue, 19 Dec 2017 00:31:48 -0800 Subject: [PATCH 23/23] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4bba5b1 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at captainduckduck.github atJiiiMaaaiL. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/