From 1d55fe3bda3fdf7bd8fe60fe6b91de938ed84aa0 Mon Sep 17 00:00:00 2001 From: Ashutosh-3601 <39941042+Ashutosh-3601@users.noreply.github.com> Date: Mon, 15 Nov 2021 18:05:01 +0530 Subject: [PATCH 1/4] more ???? Signed-off-by: Ashutosh-3601 <39941042+Ashutosh-3601@users.noreply.github.com> --- README.md | 6 +++--- guides/Verification.md | 35 +++++++++++++++++++++++++++++++++-- retype.yml | 4 ++-- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ad39cc8..957caac 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ tags: [intro] # Introduction -Hello there, I am Security Hammer. I will guide and help you to setup various modules of mine (`Verification`, `Moderation` etc). In case, if something is unclear, feel free to ask in Support Server. Let's get started. +Hello there, I am Security Hammer. I will guide and help you to setup various modules of mine (`Verification`, `Moderation` etc). In case, if something is unclear, feel free to ask in [Support Server](https://api.shbot.tk/discord). Let's get started. ### Inviting Me @@ -32,6 +32,6 @@ Slash commands are not yet implemented. ### Guides -[!ref icon="shield-check" text="Verification Setup"](../guides/Verification) +[!ref icon="shield-check" text="Verification Setup"](./guides/Verification) -More to be come :sad: \ No newline at end of file +More under progress :+1: \ No newline at end of file diff --git a/guides/Verification.md b/guides/Verification.md index 0fbb507..5696dc8 100644 --- a/guides/Verification.md +++ b/guides/Verification.md @@ -9,5 +9,36 @@ tags: [verification] # Verification -!!!danger In Progress -This section is being written. \ No newline at end of file +!!!danger Work In Progress +This section is being written. +!!! +### Introduction +Alright, lets get started setting up without wasting time. Before you setup, it's important to know how I work. + +- [X] User joins the server is given `Unverified Role` +- [X] They clicks verify button in `Verification Channel`. +- [X] I will then try to DM them captcha and if fail to DM, I will reply the error in channel. +- [X] They will type the given captcha in my DM. +- [X] On correct captcha within given `Time`, they will be verified and + - `Unverified Role` will be removed from them. + - `Verified Role` will be added to them. +- [X] If they fail to do so, they will undergo `Action` set by you. +- [X] If they don't click the verify button, + - I will wait for `Idle Time` hoping they will click the button. + - If they don't do so in given time, `Idle Action` will be taken on them, again set by you. + +Okay that's lots of confusing :sparkles: terms :sparkles:. Don't worry, I am here to explain one by one :) + +!!!danger Before we start... +I really hope you know how to manage roles, channels and most importantly dealing with their permission. If you don't, refer this video by [!badge icon="device-camera-video" iconAlign="right" text="Y0ken's Domain"](https://www.youtube.com/channel/UC4negHehVJxHKwnxX5dck5g). + +[!button variant="info" target="blank" icon="link-external" text="Youtube"](https://www.youtube.com/watch?v=X1MGtTJWytg) +!!! + +### Unverified Role +When a user joins your server, they will be given `Unverified Role` which will restrict them to see channels and their content. I will shortly discuss how to set them up. But you might be wondering now, what if I have *Membership Gating* which will be bypassed if user is given role? That's correct, that's why I will auto-adapt if there is any sort of gating. So, if there is one I will wait for them to complete the membership, and then give them unverified role otherwise I will add the role directly. + +##### Setting up Unverified Role + + +In short, it is role given to new users joining which will prevent them from seeing the channels. \ No newline at end of file diff --git a/retype.yml b/retype.yml index bdf26d3..5b7c81f 100644 --- a/retype.yml +++ b/retype.yml @@ -1,9 +1,9 @@ input: . output: ./build -url: https://shbot.onrender.com +url: https://shguide.onrender.com branding: title: Security Hammer - label: v2.0 + label: beta edit: repo: https://github.com/Security-Hammer/docs label: Edit on Github From 361abac91433addd8b0d6a07ded7e7e163be9fd1 Mon Sep 17 00:00:00 2001 From: Ashutosh-3601 <39941042+Ashutosh-3601@users.noreply.github.com> Date: Thu, 18 Nov 2021 19:55:34 +0530 Subject: [PATCH 2/4] some more --- guides/Verification.md | 20 +++++++++++++++----- resources/images/UnverifiedRole.png | Bin 0 -> 46601 bytes 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 resources/images/UnverifiedRole.png diff --git a/guides/Verification.md b/guides/Verification.md index 5696dc8..ff7a673 100644 --- a/guides/Verification.md +++ b/guides/Verification.md @@ -12,7 +12,7 @@ tags: [verification] !!!danger Work In Progress This section is being written. !!! -### Introduction +## Introduction Alright, lets get started setting up without wasting time. Before you setup, it's important to know how I work. - [X] User joins the server is given `Unverified Role` @@ -30,15 +30,25 @@ Alright, lets get started setting up without wasting time. Before you setup, it' Okay that's lots of confusing :sparkles: terms :sparkles:. Don't worry, I am here to explain one by one :) !!!danger Before we start... -I really hope you know how to manage roles, channels and most importantly dealing with their permission. If you don't, refer this video by [!badge icon="device-camera-video" iconAlign="right" text="Y0ken's Domain"](https://www.youtube.com/channel/UC4negHehVJxHKwnxX5dck5g). +I really hope you know how to manage roles, channels and most importantly dealing with their permission. If you don't, refer this video by [!badge text="Y0ken's Domain"](https://www.youtube.com/channel/UC4negHehVJxHKwnxX5dck5g). [!button variant="info" target="blank" icon="link-external" text="Youtube"](https://www.youtube.com/watch?v=X1MGtTJWytg) !!! -### Unverified Role +## Unverified Role When a user joins your server, they will be given `Unverified Role` which will restrict them to see channels and their content. I will shortly discuss how to set them up. But you might be wondering now, what if I have *Membership Gating* which will be bypassed if user is given role? That's correct, that's why I will auto-adapt if there is any sort of gating. So, if there is one I will wait for them to complete the membership, and then give them unverified role otherwise I will add the role directly. -##### Setting up Unverified Role - +### Setting up Unverified Role +Here comes the important part that is setting up. I will break this in few steps. +- **Step 1:** + Create a role which you want to be given to unverified users or use an existing one, let's call it `Unverified Role`. +- **Step 2:** + Next step is setting permission for `Unverified Role`. All you have to do is select channel/category, go to settings, and then select `Permissions` tab. +- **Step 3:** + Select the `Unverified Role` from *Step 1*. Find the `Read Messages` permission and set it to `Deny` (you can refer the screenshot below). Save and it's done!!! + +| ![Unverified Role](../resources/images/UnverifiedRole.png) | +|:--:| +| *Setting Unverified Role's Permission in Category* | In short, it is role given to new users joining which will prevent them from seeing the channels. \ No newline at end of file diff --git a/resources/images/UnverifiedRole.png b/resources/images/UnverifiedRole.png new file mode 100644 index 0000000000000000000000000000000000000000..999f3b5248ea4cc85b1d786a80c6ccb99fc6e82a GIT binary patch literal 46601 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 literal 0 HcmV?d00001 From 9999cbf2987ba5a22cdd33d962c5d96f86789e0b Mon Sep 17 00:00:00 2001 From: Ashutosh-3601 <39941042+Ashutosh-3601@users.noreply.github.com> Date: Thu, 2 Dec 2021 21:11:59 +0530 Subject: [PATCH 3/4] can i make service worker work? --- build.sh | 30 ++++++++++++++++++++ package-lock.json | 18 +++++++----- package.json | 6 ++-- prebuilder.mjs | 12 ++++++++ resources/js/service-worker.js | 51 ++++++++++++++++++++++++++++++++++ 5 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 build.sh create mode 100644 prebuilder.mjs create mode 100644 resources/js/service-worker.js diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..5b847fa --- /dev/null +++ b/build.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +CYANBG="46m" +CYAN="\e[96m" +RED="\e[31m" +GREEN="\e[32m" +END="\e[0m" +BOLDCYAN="\e[1;${CYANBG}" +WORKSPACE="${BOLDCYAN}[Docs]${END}" +BUILDMSG="${WORKSPACE} ${CYAN}Starting to build the project...${END}" +BUILDSUCCESS="${WORKSPACE} ${GREEN}Build success.${END}" +MOVING="${WORKSPACE} ${CYAN}Moving service worker to root from /resources${END}" +INJECTING="${WORKSPACE} ${CYAN}Injecting Service Worker Registry${END}" +INJECTINGSUCCESS="${WORKSPACE} ${GREEN}Injecting success.${END}" +STARTING="${WORKSPACE} ${CYAN}Starting to serve the files.${END}" +ERROR="${WORKSPACE} ${RED}There was error. EXITING${END}" + +echo -e "${BUILDMSG}" +(npx retype build && echo -e "${BUILDSUCCESS}") || ( echo -e "${ERROR}" && sleep 3 && exit 1) +exitcode=$? +if [ $exitcode != 0 ]; then exit $exitcode; fi + + +echo -e "${MOVING}" +mv build/resources/js/service-worker.js build +echo -e "${INJECTING}" +node prebuilder.mjs +echo -e "${INJECTINGSUCCESS}" +echo -e "${STARTING}" +npx retype run \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 19788a6..6503e1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,21 @@ { "name": "docs", + "version": "0.0.1-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "docs", + "version": "0.0.1-beta", + "license": "SEE LICENSE IN LICENSE", "dependencies": { - "retypeapp": "^1.10.0" + "retypeapp": "^1.11.0" } }, "node_modules/retypeapp": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/retypeapp/-/retypeapp-1.10.0.tgz", - "integrity": "sha512-TyGnSl1e29yXW42c5VXrkeXKHavkmaRjwQydlkZTdA2p8fHSKEQS7FGYW4OOSjK/tPQ1FTfX7lmogF+4KEZZ4g==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/retypeapp/-/retypeapp-1.11.0.tgz", + "integrity": "sha512-YMUjry/0w/1+YJSkBJoiK53KIIDl450kYztCcG7h9ueGnA2PCeXecRalDpBBYsJ0j28QWBCrCVmEYF+bs/FpGQ==", "bin": { "retype": "retype.js" } @@ -19,9 +23,9 @@ }, "dependencies": { "retypeapp": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/retypeapp/-/retypeapp-1.10.0.tgz", - "integrity": "sha512-TyGnSl1e29yXW42c5VXrkeXKHavkmaRjwQydlkZTdA2p8fHSKEQS7FGYW4OOSjK/tPQ1FTfX7lmogF+4KEZZ4g==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/retypeapp/-/retypeapp-1.11.0.tgz", + "integrity": "sha512-YMUjry/0w/1+YJSkBJoiK53KIIDl450kYztCcG7h9ueGnA2PCeXecRalDpBBYsJ0j28QWBCrCVmEYF+bs/FpGQ==" } } } diff --git a/package.json b/package.json index 84205ec..ffafe72 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "dependencies": { - "retypeapp": "^1.10.0" + "retypeapp": "^1.11.0" }, "name": "docs", "description": "Documentation/guide for Security Hammer.", "version": "0.0.1-beta", "main": "", - "devDependencies": {}, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "npx retype build & move build\\resources\\js\\service-worker.js build & node prebuilder.mjs & npx retype run" }, "repository": { "type": "git", diff --git a/prebuilder.mjs b/prebuilder.mjs new file mode 100644 index 0000000..a093d68 --- /dev/null +++ b/prebuilder.mjs @@ -0,0 +1,12 @@ +import { writeFile } from 'fs/promises'; + +/*if ('serviceWorker' in navigator) { + console.log('[Service Worker] Registering the worker.'); + navigator.serviceWorker.register('./service-worker.js', {scope: '/'}).then(() => console.log('CLIENT: service worker registration complete.'), err => + console.log('CLIENT: service worker registration failure.' + err)); + } else { + console.log('CLIENT: service worker is not supported.'); + }*/ +const data = '"serviceWorker"in navigator?(console.log("[Service Worker] Registering the worker."),navigator.serviceWorker.register("../service-worker.js").then(()=>console.log("[Service Worker] Registration complete."),e=>console.log("[Service Worker] Coudn\'t register because "+e))):console.log("[Service Worker] Browser not supported.");'; + +writeFile('./build/resources/js/retype.js', data, { flag: 'a'}) \ No newline at end of file diff --git a/resources/js/service-worker.js b/resources/js/service-worker.js new file mode 100644 index 0000000..069c061 --- /dev/null +++ b/resources/js/service-worker.js @@ -0,0 +1,51 @@ +const CacheVersion = 'v0.0.1' + +files = [ + '/', + '/404', + '/resources/css/retype.css', + '/resources/js/config.js', + '/resources/js/lunr.js', + '/resorces/js/retype.js', + '/resources/js/search.json', + '/resources/images/unverifiedrole.png', + '/guides/verification/' +] + +self.addEventListener("install", e => { + console.log('[SW]: Installing and caching resources.'); + e.waitUntil(caches.open(CacheVersion + '-cache').then(cache => { + return cache.addAll(files) + }) + .then(function() { + console.log('[SW]: Installated Successfully!'); + }) + ); +}); + +self.addEventListener("activate", e => { + console.log('[SW] Validating the cache and activating.'); + + e.waitUntil(caches.keys().then(function (keys) { + return Promise.all( + keys.filter(function (key) { + return !key.startsWith(CacheVersion); + }) + .map(function (key) { + return caches.delete(key); + }) + ); + }) + .then(function() { + console.log('[SW]: Validated and Activated.'); + }) + ); + }); + + self.addEventListener('fetch', function(event) { + event.respondWith( + caches.match(event.request).then(function(response) { + return response || fetch(event.request); + }) + ); + }); \ No newline at end of file From 7e9e1f12579c8af4fd6d84dd725709f92cd8e9bd Mon Sep 17 00:00:00 2001 From: Ashutosh-3601 <39941042+Ashutosh-3601@users.noreply.github.com> Date: Fri, 3 Dec 2021 19:58:21 +0530 Subject: [PATCH 4/4] probably will fix deployment :( --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 5b847fa..3d797c7 100644 --- a/build.sh +++ b/build.sh @@ -27,4 +27,4 @@ echo -e "${INJECTING}" node prebuilder.mjs echo -e "${INJECTINGSUCCESS}" echo -e "${STARTING}" -npx retype run \ No newline at end of file +# npx retype run \ No newline at end of file