├── .github
└── workflows
│ ├── tf-apply-main.yml
│ └── tf-destroy-main.yml
├── AWSGoat.pdf
├── LICENSE
├── README.md
├── attack-manuals
├── module-1
│ ├── 01-Reflected XSS.md
│ ├── 02-SQL Injection.md
│ ├── 03-Insecure Direct Object Reference.md
│ ├── 04-Sensitive Data Exposure.md
│ ├── 05-Server Side Request Forgery Part 1.md
│ ├── 06-Server Side Request Forgery Part 2.md
│ └── 07-IAM Privilege Escalation.md
└── module-2
│ ├── 01-SQL Injection.md
│ ├── 02-File Upload and Task Metadata.md
│ ├── 03-ECS Breakout and Instance Metadata.md
│ ├── 04-IAM Privilege Escalation.md
│ └── images
│ ├── 01
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ └── 18.png
│ ├── 02
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ └── 16.png
│ ├── 03
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ └── 16.png
│ └── 04
│ ├── 01.png
│ ├── 02.png
│ ├── 03.png
│ ├── 04.png
│ ├── 05.png
│ ├── 06.png
│ ├── 07.png
│ ├── 08.png
│ ├── 09.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ └── 18.png
├── defence-manuals
├── AWS Config.md
├── AWS IAM Access Analyzer.md
├── Amazon GuardDuty.md
├── Amazon Macie.md
└── images
│ ├── AWS-Config
│ ├── 1.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ ├── 8.png
│ └── 9.png
│ ├── AWS-IAM-Access-Analyzer
│ ├── 1.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 18.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ ├── 8.png
│ └── 9.png
│ ├── Amazon-Guardduty
│ ├── 1.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.PNG
│ ├── 7.png
│ ├── 8.png
│ └── 9.png
│ └── Amazon-Macie
│ ├── 1.png
│ ├── 10.png
│ ├── 11.png
│ ├── 12.png
│ ├── 13.png
│ ├── 14.png
│ ├── 15.png
│ ├── 16.png
│ ├── 17.png
│ ├── 18.png
│ ├── 19.png
│ ├── 2.png
│ ├── 20.png
│ ├── 21.png
│ ├── 22.png
│ ├── 23.png
│ ├── 24.png
│ ├── 25.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ ├── 7.png
│ ├── 8.png
│ └── 9.png
├── modules
├── module-1
│ ├── main.tf
│ ├── resources
│ │ ├── dynamodb
│ │ │ ├── blog-posts.json
│ │ │ ├── blog-users.json
│ │ │ └── populate-table.py
│ │ ├── ec2
│ │ │ └── goat_user_data.tpl
│ │ ├── lambda
│ │ │ ├── data
│ │ │ │ └── lambda_function.py
│ │ │ ├── layer
│ │ │ │ └── bcrypt-pyjwt.zip
│ │ │ └── react
│ │ │ │ ├── index.html
│ │ │ │ ├── index.js
│ │ │ │ └── static
│ │ │ │ └── media
│ │ │ │ ├── AWScloudtitle.98cddcd1f55ecb7dbf64.jpg
│ │ │ │ ├── aws-wname.ca2376115332eb5057e8.jpg
│ │ │ │ ├── aws.7f8d469729dd2de6cfb3.jpg
│ │ │ │ ├── login.e21739546d37920dcfe5.jpg
│ │ │ │ ├── no-posts-found.a48ad7ab109b12f96751.jpg
│ │ │ │ ├── register.4206b16c0ce018f0307d.jpg
│ │ │ │ └── reset-password.534bb9d0d1f845e91b10.jpg
│ │ └── s3
│ │ │ ├── images
│ │ │ ├── 20220525172652548627.png
│ │ │ ├── 20220525172652568597.png
│ │ │ ├── 20220525173052304808.png
│ │ │ ├── 20220525173155599484.png
│ │ │ ├── 20220525173359279634.png
│ │ │ ├── 20220525173435646544.png
│ │ │ ├── 20220525174934318996.png
│ │ │ ├── 20220525175114306915.png
│ │ │ ├── 20220525175420931108.png
│ │ │ └── 20220525175644356721.png
│ │ │ ├── shared
│ │ │ └── shared
│ │ │ │ ├── files
│ │ │ │ └── .ssh
│ │ │ │ │ ├── config.txt
│ │ │ │ │ └── keys
│ │ │ │ │ ├── VincentVanGoat.pem
│ │ │ │ │ ├── VincentVanGoat.pub
│ │ │ │ │ ├── alice.pem
│ │ │ │ │ ├── alice.pub
│ │ │ │ │ ├── bob.pem
│ │ │ │ │ ├── bob.pub
│ │ │ │ │ ├── charles.pem
│ │ │ │ │ ├── charles.pub
│ │ │ │ │ ├── john.pem
│ │ │ │ │ ├── john.pub
│ │ │ │ │ ├── mary.pem
│ │ │ │ │ ├── mary.pub
│ │ │ │ │ ├── mike.pem
│ │ │ │ │ ├── mike.pub
│ │ │ │ │ ├── sophia.pem
│ │ │ │ │ └── sophia.pub
│ │ │ │ └── scripts
│ │ │ │ ├── deploy_node.sh
│ │ │ │ ├── php-deploy.sh
│ │ │ │ └── wordpress_deploy.sh
│ │ │ └── webfiles
│ │ │ ├── build
│ │ │ ├── asset-manifest.json
│ │ │ ├── favicon
│ │ │ │ └── awsgoat.png
│ │ │ ├── index.html
│ │ │ ├── manifest.json
│ │ │ └── static
│ │ │ │ ├── css
│ │ │ │ ├── main.54e3607f.css
│ │ │ │ └── main.54e3607f.css.map
│ │ │ │ ├── js
│ │ │ │ ├── 787.8c65ad62.chunk.js
│ │ │ │ ├── 787.8c65ad62.chunk.js.map
│ │ │ │ ├── main.e5839717.js
│ │ │ │ ├── main.e5839717.js.LICENSE.txt
│ │ │ │ └── main.e5839717.js.map
│ │ │ │ └── media
│ │ │ │ ├── AWScloudtitle.98cddcd1f55ecb7dbf64.jpg
│ │ │ │ ├── aws-wname.ca2376115332eb5057e8.jpg
│ │ │ │ ├── aws.7f8d469729dd2de6cfb3.jpg
│ │ │ │ ├── login.e21739546d37920dcfe5.jpg
│ │ │ │ ├── no-posts-found.a48ad7ab109b12f96751.jpg
│ │ │ │ ├── register.4206b16c0ce018f0307d.jpg
│ │ │ │ └── reset-password.534bb9d0d1f845e91b10.jpg
│ │ │ └── images
│ │ │ ├── 20220525172652548627.png
│ │ │ ├── 20220525172652568597.png
│ │ │ ├── 20220525173052304808.png
│ │ │ ├── 20220525173155599484.png
│ │ │ ├── 20220525173359279634.png
│ │ │ ├── 20220525173435646544.png
│ │ │ ├── 20220525174934318996.png
│ │ │ ├── 20220525175114306915.png
│ │ │ ├── 20220525175420931108.png
│ │ │ └── 20220525175644356721.png
│ └── src
│ │ ├── .eslintignore
│ │ ├── .eslintrc
│ │ ├── .gitignore
│ │ ├── .prettierignore
│ │ ├── .prettierrc
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── jsconfig.json
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── public
│ │ ├── _redirects
│ │ ├── favicon
│ │ │ └── awsgoat.png
│ │ ├── index.html
│ │ └── manifest.json
│ │ ├── src
│ │ ├── App.js
│ │ ├── _mock
│ │ │ ├── account.js
│ │ │ ├── blog.js
│ │ │ ├── products.js
│ │ │ └── user.js
│ │ ├── common
│ │ │ └── httpService.js
│ │ ├── components
│ │ │ ├── Iconify.js
│ │ │ ├── Label.js
│ │ │ ├── Logo.js
│ │ │ ├── MenuPopover.js
│ │ │ ├── NavSection.js
│ │ │ ├── Page.js
│ │ │ ├── ScrollToTop.js
│ │ │ ├── Scrollbar.js
│ │ │ ├── SearchNotFound.js
│ │ │ ├── SvgIconStyle.js
│ │ │ ├── UserDetailsPopOver.js
│ │ │ ├── chart
│ │ │ │ ├── BaseOptionChart.js
│ │ │ │ └── index.js
│ │ │ └── color-utils
│ │ │ │ ├── ColorManyPicker.js
│ │ │ │ ├── ColorPreview.js
│ │ │ │ └── index.js
│ │ ├── hooks
│ │ │ └── useResponsive.js
│ │ ├── images
│ │ │ ├── AWScloud.png
│ │ │ ├── AWScloudtitle.jpg
│ │ │ ├── avatar-1.jpg
│ │ │ ├── avatar-2.jpg
│ │ │ ├── avatar-3.jpg
│ │ │ ├── avatar-4.jpg
│ │ │ ├── avatar.jpg
│ │ │ ├── aws-newname.png
│ │ │ ├── aws-wname-blur.png
│ │ │ ├── aws-wname.jpg
│ │ │ ├── aws-wnamewhite.png
│ │ │ ├── aws.jpg
│ │ │ ├── azure-wname.png
│ │ │ ├── azure.png
│ │ │ ├── login.jpg
│ │ │ ├── logo.png
│ │ │ ├── no-posts-found.jpg
│ │ │ ├── register.jpg
│ │ │ └── reset-password.jpg
│ │ ├── index.js
│ │ ├── layouts
│ │ │ ├── LogoOnlyLayout.js
│ │ │ └── dashboard
│ │ │ │ ├── AccountPopover.js
│ │ │ │ ├── DashboardNavbar.js
│ │ │ │ ├── DashboardSidebar.js
│ │ │ │ ├── HomepageAccountPopover.js
│ │ │ │ ├── LanguagePopover.js
│ │ │ │ ├── NavConfig.js
│ │ │ │ ├── NotificationsPopover.js
│ │ │ │ ├── Searchbar.js
│ │ │ │ └── index.js
│ │ ├── logo.png
│ │ ├── pages
│ │ │ ├── App.css
│ │ │ ├── Blog.js
│ │ │ ├── DashboardApp.js
│ │ │ ├── HomePage.js
│ │ │ ├── Login.js
│ │ │ ├── NewPost.js
│ │ │ ├── Page404.js
│ │ │ ├── Products.js
│ │ │ ├── Profile.js
│ │ │ ├── Register.js
│ │ │ ├── ResetPassword.js
│ │ │ ├── User.js
│ │ │ └── blogpost.js
│ │ ├── placeholder.png
│ │ ├── reportWebVitals.js
│ │ ├── routes.js
│ │ ├── sections
│ │ │ ├── @dashboard
│ │ │ │ ├── app
│ │ │ │ │ ├── AppConversionRates.js
│ │ │ │ │ ├── AppCurrentSubject.js
│ │ │ │ │ ├── AppCurrentVisits.js
│ │ │ │ │ ├── AppNewsUpdate.js
│ │ │ │ │ ├── AppOrderTimeline.js
│ │ │ │ │ ├── AppTasks.js
│ │ │ │ │ ├── AppTrafficBySite.js
│ │ │ │ │ ├── AppWebsiteVisits.js
│ │ │ │ │ ├── AppWidgetSummary.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── blog
│ │ │ │ │ ├── BlogPostCard.js
│ │ │ │ │ ├── BlogPostsSearch.js
│ │ │ │ │ ├── BlogPostsSort.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── newpost
│ │ │ │ │ ├── NewPostCard.js
│ │ │ │ │ ├── NewPostCardSearch.js
│ │ │ │ │ ├── NewPostCardSort.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── products
│ │ │ │ │ ├── ProductCard.js
│ │ │ │ │ ├── ProductCartWidget.js
│ │ │ │ │ ├── ProductFilterSidebar.js
│ │ │ │ │ ├── ProductList.js
│ │ │ │ │ ├── ProductSort.js
│ │ │ │ │ └── index.js
│ │ │ │ └── user
│ │ │ │ │ ├── UserListHead.js
│ │ │ │ │ ├── UserListToolbar.js
│ │ │ │ │ ├── UserMoreMenu.js
│ │ │ │ │ └── index.js
│ │ │ └── auth
│ │ │ │ ├── AuthService.js
│ │ │ │ ├── AuthSocial.js
│ │ │ │ ├── login
│ │ │ │ ├── LoginForm.js
│ │ │ │ └── index.js
│ │ │ │ ├── register
│ │ │ │ ├── RegisterForm.js
│ │ │ │ └── index.js
│ │ │ │ └── resetpassword
│ │ │ │ ├── ResetPasswordForm.js
│ │ │ │ └── index.js
│ │ ├── serviceWorker.js
│ │ ├── setupTests.js
│ │ ├── theme
│ │ │ ├── index.js
│ │ │ ├── overrides
│ │ │ │ ├── Autocomplete.js
│ │ │ │ ├── Backdrop.js
│ │ │ │ ├── Button.js
│ │ │ │ ├── Card.js
│ │ │ │ ├── CssBaseline.js
│ │ │ │ ├── IconButton.js
│ │ │ │ ├── Input.js
│ │ │ │ ├── Lists.js
│ │ │ │ ├── Paper.js
│ │ │ │ ├── Tooltip.js
│ │ │ │ ├── Typography.js
│ │ │ │ └── index.js
│ │ │ ├── palette.js
│ │ │ ├── shadows.js
│ │ │ └── typography.js
│ │ └── utils
│ │ │ ├── formatNumber.js
│ │ │ └── formatTime.js
│ │ └── yarn.lock
└── module-2
│ ├── main.tf
│ ├── resources
│ └── ecs
│ │ ├── task_definition.json
│ │ └── user_data.tpl
│ └── src
│ ├── Dockerfile
│ ├── README.md
│ ├── script
│ └── startup.sh
│ └── src
│ ├── CSS
│ ├── loginstyle.css
│ └── styles.css
│ ├── admin
│ ├── admin-complaint.php
│ ├── admin-index.php
│ ├── complaints.php
│ ├── leave-application.php
│ ├── leave-approve.php
│ ├── payslips.php
│ ├── reimbursment-approve.php
│ ├── reimbursment.php
│ └── uploads
│ │ └── costs.csv
│ ├── config.inc
│ ├── documents
│ ├── payslips
│ │ ├── 38343834353753616c6172792d506179736c69702e706466.pdf
│ │ ├── 48343834353753616c6172792d506179736c69702e706466.pdf
│ │ ├── 58343834353753616c6172792d506179736c69702e706466.pdf
│ │ └── 68343834353753616c6172792d506179736c69702e706466.pdf
│ └── reimbursments
│ │ ├── 18343834353753616c6172792d506179736c69702e706466.pdf
│ │ ├── 78343834353753616c6172792d506179736c69702e706466.pdf
│ │ ├── 88343834353753616c6172792d506179736c69702e706466.pdf
│ │ └── 98343834353753616c6172792d506179736c69702e706466.pdf
│ ├── dump.sql
│ ├── images
│ ├── AWScloud.png
│ ├── homepage.png
│ ├── ine-logo.png
│ ├── logo-login.png
│ ├── logo.png
│ ├── pic.png
│ ├── shadow.png
│ ├── wave.png
│ ├── wave2.png
│ └── wave3.png
│ ├── login.php
│ ├── logout.php
│ ├── superadmin
│ ├── adduser.php
│ ├── deleteuser.php
│ ├── leave-application.php
│ ├── leave-approve-super.php
│ ├── payslips.php
│ ├── reimbursment-approve-super.php
│ ├── reimbursment.php
│ ├── superadmin-index.php
│ ├── updateuser.php
│ └── user-settings.php
│ └── user
│ ├── complaint-apply.php
│ ├── complaints.php
│ ├── index.php
│ ├── leave-application.php
│ ├── payslips.php
│ └── reimbursment.php
└── policy
└── policy.json
/.github/workflows/tf-destroy-main.yml:
--------------------------------------------------------------------------------
1 | name: 'Terraform Destroy'
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | module:
7 | type: choice
8 | description: "Select which module to destroy"
9 | options:
10 | - module-1
11 | - module-2
12 | required: true
13 |
14 | permissions: write-all
15 |
16 | jobs:
17 | terraform:
18 | name: 'Terraform'
19 | runs-on: ubuntu-latest
20 | environment: production
21 | env:
22 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
23 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
24 | AWS_REGION: "us-east-1"
25 |
26 | defaults:
27 | run:
28 | shell: bash
29 |
30 | steps:
31 | # Checkout the repository to the GitHub Actions runner
32 | - name: Checkout
33 | uses: actions/checkout@v4
34 |
35 | - name: Set up Terraform
36 | uses: hashicorp/setup-terraform@v2
37 | with:
38 | terraform_version: 1.10.5
39 |
40 | - name: Set Account ID
41 | id: account
42 | run: |
43 | echo "ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)" >> $GITHUB_ENV
44 |
45 | # Copy and delete terraform.tfstate files from s3 bucket
46 | - name: Retrieve tfstate
47 | run: |
48 | cd modules/${{ github.event.inputs.module }}
49 | aws s3 cp s3://do-not-delete-awsgoat-state-files-${{ env.ACCOUNT_ID }}/terraform.tfstate ./terraform.tfstate
50 |
51 | # Initialize a new Terraform working directory
52 | - name: Terraform Init
53 | run: |
54 | cd modules/${{ github.event.inputs.module }}
55 | terraform init
56 |
57 | - name: Terraform Destroy
58 | run: |
59 | cd modules/${{ github.event.inputs.module }}
60 | terraform destroy -auto-approve -input=false
61 | continue-on-error: false
62 |
--------------------------------------------------------------------------------
/AWSGoat.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/AWSGoat.pdf
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 INE
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/attack-manuals/module-1/01-Reflected XSS.md:
--------------------------------------------------------------------------------
1 | # Objective
2 |
3 | Perform an XSS injection attack on a given web application.
4 |
5 | # Solutions
6 |
7 | After you launch the web application, go to the search bar and try out some basic searches.
8 |
9 | Now we will try out XSS attacks. Cross-Site Scripting (XSS) attacks are a type of injection, where malicious scripts are injected into websites. XSS attacks occur when an attacker uses a web application to send malicious code, generally in the form of a browser-side script, to a different end-user.
10 |
11 | XSS flaws can be difficult to identify in a web application. We can perform a security review of the HTTP code and search for all places where input from an HTTP request could make its way into the HTML output.
12 |
13 | The standard command for testing the application for XSS vulnerability is:
14 |
15 | ```
16 |
17 | ```
18 |
19 | We can paste this command into any comment field (search bar in our case). An alert box popping up on our screen would have confirmed that our application is vulnerable to XSS injection attacks, but this doesn't work here.
20 |
21 | XSS attacks may be conducted without using the script tags. Other tags and attributes can also help us test it. We can try using the image tag to check for reflected XSS. The below-mentioned payload is an image tag that tries to load an image with the source ``a`` as specified which does not exist and would throw an error. We then use the onerror field to execute our script payload, in this case, alert('xss')
22 |
23 | ```
24 |
25 | ```
26 |
27 | An alert pops up proving that the application is vulnerable to XSS injection attacks.
28 |
29 | 
30 |
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/01.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/02.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/03.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/04.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/05.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/06.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/07.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/08.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/09.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/10.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/11.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/12.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/13.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/14.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/15.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/16.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/17.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/01/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/01/18.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/01.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/02.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/03.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/04.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/05.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/06.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/07.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/08.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/09.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/10.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/11.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/12.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/13.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/14.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/15.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/02/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/02/16.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/01.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/02.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/03.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/04.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/05.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/06.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/07.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/08.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/09.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/10.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/11.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/12.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/13.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/14.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/15.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/03/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/03/16.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/01.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/02.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/03.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/04.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/05.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/06.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/07.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/08.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/09.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/10.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/11.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/12.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/13.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/14.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/15.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/16.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/17.png
--------------------------------------------------------------------------------
/attack-manuals/module-2/images/04/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/attack-manuals/module-2/images/04/18.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/1.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/10.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/11.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/12.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/13.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/14.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/15.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/16.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/17.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/2.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/3.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/4.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/5.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/6.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/7.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/8.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-Config/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-Config/9.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/1.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/10.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/11.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/12.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/13.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/14.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/15.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/16.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/17.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/18.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/2.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/3.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/4.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/5.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/6.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/7.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/8.png
--------------------------------------------------------------------------------
/defence-manuals/images/AWS-IAM-Access-Analyzer/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/AWS-IAM-Access-Analyzer/9.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/1.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/10.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/11.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/12.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/13.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/14.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/15.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/16.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/17.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/2.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/3.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/4.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/5.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/6.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/6.PNG
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/7.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/8.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Guardduty/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Guardduty/9.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/1.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/10.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/11.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/12.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/13.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/14.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/15.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/16.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/17.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/18.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/19.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/2.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/20.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/21.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/22.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/23.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/24.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/25.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/3.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/4.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/5.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/6.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/7.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/8.png
--------------------------------------------------------------------------------
/defence-manuals/images/Amazon-Macie/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/defence-manuals/images/Amazon-Macie/9.png
--------------------------------------------------------------------------------
/modules/module-1/resources/dynamodb/populate-table.py:
--------------------------------------------------------------------------------
1 | import boto3
2 | import json
3 | import time
4 | import os
5 |
6 | session=boto3.Session(aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'], aws_secret_access_key=os.environ['AWS_SECRET_ACCESS_KEY'])
7 | dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
8 |
9 | time.sleep(5)
10 | table_1 = dynamodb.Table('blog-users')
11 | db_file_json_1 = open('resources/dynamodb/blog-users.json')
12 | db_file_1 = json.loads(db_file_json_1.read())
13 | for db_item_1 in db_file_1:
14 | table_1.put_item(Item=db_item_1)
15 |
16 | table_2 = dynamodb.Table('blog-posts')
17 | db_file_json_2 = open('resources/dynamodb/blog-posts.json')
18 | db_file_2 = json.loads(db_file_json_2.read())
19 | for db_item_2 in db_file_2:
20 | table_2.put_item(Item=db_item_2)
21 |
22 | print("Items Updated")
23 |
--------------------------------------------------------------------------------
/modules/module-1/resources/ec2/goat_user_data.tpl:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | sudo useradd -m VincentVanGoat
3 | aws s3 cp s3://${S3_BUCKET_NAME}/home/VincentVanGoat --recursive
4 | aws s3 cp s3://${S3_BUCKET_NAME}/shared/files/.ssh/keys/VincentVanGoat.pub /home/VincentVanGoat
5 | chmod +777 /home/VincentVanGoat/VincentVanGoat.pub
6 | mkdir /home/VincentVanGoat/.ssh
7 | chmod 700 /home/VincentVanGoat/.ssh
8 | touch /home/VincentVanGoat/.ssh/authorized_keys
9 | chmod 600 /home/VincentVanGoat/.ssh/authorized_keys
10 | cat /home/VincentVanGoat/VincentVanGoat.pub > /home/VincentVanGoat/.ssh/authorized_keys
11 | sudo chown -R VincentVanGoat:VincentVanGoat /home/VincentVanGoat/.ssh
12 | rm /home/VincentVanGoat/VincentVanGoat.pub
13 | aws s3 rm s3://${S3_BUCKET_NAME} --recursive
14 | aws s3api delete-bucket --bucket ${S3_BUCKET_NAME}
15 |
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/layer/bcrypt-pyjwt.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/layer/bcrypt-pyjwt.zip
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/index.html:
--------------------------------------------------------------------------------
1 |
AWSGoat
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/index.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 | const util = require('util');
3 | const readFileAsync = util.promisify(fs.readFile);
4 | let path = require("path");
5 |
6 | exports.handler = async function(event) {
7 |
8 | console.log(path.resolve("./index.html"));
9 | var html = fs.readFileSync(__dirname +'/index.html', 'utf8');
10 | html = html.replace(/S3_BUCKET/g, "https://replace-bucket-name.s3.us-east-1.amazonaws.com/build");
11 | return {
12 | 'statusCode': 200,
13 | 'headers': {'Content-Type': 'text/html'},
14 | 'body': html
15 | }
16 |
17 | }
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/AWScloudtitle.98cddcd1f55ecb7dbf64.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/AWScloudtitle.98cddcd1f55ecb7dbf64.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/aws-wname.ca2376115332eb5057e8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/aws-wname.ca2376115332eb5057e8.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/aws.7f8d469729dd2de6cfb3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/aws.7f8d469729dd2de6cfb3.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/login.e21739546d37920dcfe5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/login.e21739546d37920dcfe5.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/no-posts-found.a48ad7ab109b12f96751.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/no-posts-found.a48ad7ab109b12f96751.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/register.4206b16c0ce018f0307d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/register.4206b16c0ce018f0307d.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/lambda/react/static/media/reset-password.534bb9d0d1f845e91b10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/lambda/react/static/media/reset-password.534bb9d0d1f845e91b10.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525172652548627.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525172652548627.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525172652568597.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525172652568597.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525173052304808.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525173052304808.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525173155599484.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525173155599484.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525173359279634.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525173359279634.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525173435646544.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525173435646544.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525174934318996.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525174934318996.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525175114306915.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525175114306915.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525175420931108.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525175420931108.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/images/20220525175644356721.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/images/20220525175644356721.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/config.txt:
--------------------------------------------------------------------------------
1 | Host 10.25.14.6
2 | HostName alice
3 | Port 22
4 | IdentityFile /shared/files/.ssh/keys/alice.pem
5 | User alice
6 |
7 | Host 34.207.133.229
8 | HostName bob
9 | Port 22
10 | IdentityFile /shared/files/.ssh/keys/bob.pem
11 | User bob
12 |
13 | Host EC2_IP_ADDR
14 | HostName VincentVanGoat
15 | Port 22
16 | IdentityFile /shared/files/.ssh/keys/VincentVanGoat.pem
17 | User VincentVanGoat
18 |
19 | Host 10.25.14.106
20 | HostName charles
21 | Port 22
22 | IdentityFile /shared/files/.ssh/keys/charles.pem
23 | User charles
24 |
25 | Host 172.16.84.59
26 | HostName john
27 | Port 22
28 | IdentityFile /shared/files/.ssh/keys/john.pem
29 | User john
30 |
31 | Host 172.16.87.25
32 | HostName mary
33 | Port 22
34 | IdentityFile /shared/files/.ssh/keys/mary.pem
35 | User mary
36 |
37 | Host 172.22.26.8
38 | HostName mike
39 | Port 22
40 | IdentityFile /shared/files/.ssh/keys/mike.pem
41 | User mike
42 |
43 | Host 10.0.48.71
44 | HostName sophia
45 | Port 22
46 | IdentityFile /shared/files/.ssh/keys/sophia.pem
47 | User sophia
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/VincentVanGoat.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN OPENSSH PRIVATE KEY-----
2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
3 | NhAAAAAwEAAQAAAQEAyifcS9Hzc82Dw1JW8U1xaU/RF0HBpeizIPOuW6L2pe1zmemyudWR
4 | CnyOkuhx89+GY3/UqNSUuZJxuUIsqpzMaiM8f56yPq4JTlO/Xcxgu47Cxhmy9JRGBGh/Cn
5 | yvKdaHCY+IY/QsP2I+/EYcFIBQYqfs31pYv2ALb+Qx1KSxz7Ln3aYJrqoBDXOl3LlW2LW5
6 | Q87fxQh7+r7CeiQBmDPBmY8CQDdd9ZGp6/Qm1JYfBHVWPUc2sdlVh9lNLefiA9LbJRFTGU
7 | QRHib8psFMRXnO3QQVTnUmw4u6mIohE89BIh7MrTONo3Xp7ft3vCC/cpiq+imOK13wIJj2
8 | CymW8ak4RwAAA8hrnOxGa5zsRgAAAAdzc2gtcnNhAAABAQDKJ9xL0fNzzYPDUlbxTXFpT9
9 | EXQcGl6LMg865boval7XOZ6bK51ZEKfI6S6HHz34Zjf9So1JS5knG5QiyqnMxqIzx/nrI+
10 | rglOU79dzGC7jsLGGbL0lEYEaH8KfK8p1ocJj4hj9Cw/Yj78RhwUgFBip+zfWli/YAtv5D
11 | HUpLHPsufdpgmuqgENc6XcuVbYtblDzt/FCHv6vsJ6JAGYM8GZjwJAN131kanr9CbUlh8E
12 | dVY9Rzax2VWH2U0t5+ID0tslEVMZRBEeJvymwUxFec7dBBVOdSbDi7qYiiETz0EiHsytM4
13 | 2jdent+3e8IL9ymKr6KY4rXfAgmPYLKZbxqThHAAAAAwEAAQAAAQAb/VzhGpasp/3gY1wq
14 | WOClBiobID2hrRBwNY0knvGrk6731oWqeUl1vD05VfnBHGfNCvv0zEozT3VzgxgQH1mmMG
15 | 7F9MEVMJ+VOr86S3vxPBj3uMMwXf87yQQd/Zl7H3re9gKaZEpkFERIRaTJqeJ3ZmzDmAzF
16 | opSyz1Oe75a2/P1iZZnxwMQAwBSilfYpCCvEg2zwYQItiyrgtL2axQemTUTKOA00c7NmYB
17 | 814bkwoTL6S3QAvoqbj9Lhd2HmEikeAraQA4rk0p70I0p5uuXrLJN4tNKuhRwruE68HlJT
18 | Y1sk7QF5n29ZXOC5S+4FuNOMOSaVP5ZUAiN4hmTM9mSRAAAAgH2Xfd1otY+RUImion6Y+h
19 | 8pTOH2afZcv2WoD7dhFCvEZ8UWnYCwvrkA6mpEYczG6peXxjBqTl0xaMswncg0sf5yIUFX
20 | gie3ypNjdTMedfDeZ0EtTPmpCaa4gUU+ZX5kRXa1acIf2CdnHvi6VMjUCQxUWAfHvHKgJr
21 | Y+djwmWJ5VAAAAgQDkuanHCemm8Vk5mw1OWYSVq49B5qlVqYwmqY4PZmHlaonUOCf4mcCE
22 | L4twCxY65FCtXOkX7IjY/5pejHJYVVwUvWmwnZpcmw2ljBdJVVpw5ViQombiS4Qdr86MOO
23 | xnuBsd7CbepGkK5L6ggkllkRaDD234MWvp1Ydh5BQPLdfGywAAAIEA4kMaqetgGRDCatO9
24 | RzaewAqzePjklDen2QoX8L3Ky46idjaktm1W72WHMfZxpEyJ5akPHes3c7odAh4JukdfuF
25 | mqjXjzmKC8W7WoE2KgXUnPjjpoVsTi6s79Tb9gm6MRqTdsw5LbpCmQEKlf+aE3adkbxIQD
26 | MJEioj19FtIA6PUAAAAOVmluY2VudFZhbkdvYXQBAgMEBQ==
27 | -----END OPENSSH PRIVATE KEY-----
28 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/VincentVanGoat.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKJ9xL0fNzzYPDUlbxTXFpT9EXQcGl6LMg865boval7XOZ6bK51ZEKfI6S6HHz34Zjf9So1JS5knG5QiyqnMxqIzx/nrI+rglOU79dzGC7jsLGGbL0lEYEaH8KfK8p1ocJj4hj9Cw/Yj78RhwUgFBip+zfWli/YAtv5DHUpLHPsufdpgmuqgENc6XcuVbYtblDzt/FCHv6vsJ6JAGYM8GZjwJAN131kanr9CbUlh8EdVY9Rzax2VWH2U0t5+ID0tslEVMZRBEeJvymwUxFec7dBBVOdSbDi7qYiiETz0EiHsytM42jdent+3e8IL9ymKr6KY4rXfAgmPYLKZbxqThH VincentVanGoat
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/alice.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFEK8LB3UbUDjfv85CiCAd+lMyf14lVjSLPUaSLhbNZimu9M80aKzt4h6BouAk4bLLgG5j38nVX6t8OAw+aLLnfG3gIJSdW66n1qZ2w7qhcQrLIy4haBbNoIZVCavktBrZ9r/WBMxKqW2JA6ni74B/drKH6ms5L4hyBfUdWuMUMWwtpuCe2ZGLFR71tFHf0ZbOwqSLVsQS5SDZGD9ZesEYTCLcxbgyV9ne/Ba+7bFkm/LHhUVXLU24KEre4t+LE9kSg/T1HdNPk7+UClCBP2kudmVF4pY7ak7hvA/KcoGoGGo2fFGvUr6pI9V8w0JRPIlHI5bExjw+5/DB24H1k+C6N3dFbJfTeeLg51cAq8asSwiFrLoNBknSAzUvbAFjK1UWAjYwSEi0Zm1ZLZi2DdeHAf0ScSY9vH/Ca9S+Met6CZmK5iWDfykuyYxTY1WnjvbAX+D9aScJpMIWP26wytlIcqcLzDoQsdeBJgZ6mtaHCmhg9FvczX2i0eRULgoFk2k= alice
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/bob.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | 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
39 | -----END RSA PRIVATE KEY-----
40 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/bob.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCidX5buIyIFnzVZhTVLtCVIniKnam9LqZrgjhXxAj+dUiQzsGlZg15Z0SAFf8siGH1+HbyH4bC8XFCmKb9CMRwK2qZma7yXkKLIvPVYEfuwQJFful1durwQTHVdRqEoiT00ADIMlr0EgbQvsW13WUHDMhBzFFNtMSzTChSdr9lc7yriMc78mc5KSZXuS1N7Dr9wci7gFz/NkbZCftOx/cc9m/eq+RqsjbjwdLgB31pFQaN41yfm6v8TcvDqQXZv12STl6A4sfRxfC0BCEc8OdII576sBRfbRAxo4zCtIrsswj+5I7pENsx1j/T0je07o5MLdVJBspJlR95SxHONoZetXx5OrU9VC20jUGnbpHN7x9DBsMTW2lBZaFWDzW/6Hc1fhblupelOov2sNK5yGZh8cZfKMLKUB4E7k27CtZFfZLV2GwG5E3GAKTa5/vgTI+U0mX32zXF2hMC1eNfQafE8B9qYVyKH7cgPP/BskINyRO+BYnqUaHVz8t/AyeRlYE= bob
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/charles.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | 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
39 | -----END RSA PRIVATE KEY-----
40 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/charles.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQWFk42UyXvedm2dnEpUo8C5kACYK34ATgYhy3/gIjblLDpLvoVR4aWB47pSls8vCmsIr87k6wvkIOE0mk4AjHft0Po1quN14MGVD1EUJ/WHi00zx6rN7nLu8QjHbf7YpVuFR1RFwbyNoTCRdAFuoJIoMNJwML7K0Ie0IdW/7uu8GD03ntoQbcILbBAQEed3wb+9gT4Pr7eIpvVktg3pXhpO1L5RQsAGd6n5JWfkrsH2BHbUyAbpMnKPVJrJUEek/eCDxVM2t1268JITDq/ioSnNWcjC6m/CkVrj63Tq2e3HbLoM4cZu+j91hilH2QmwQHbxCl2PMqRv2/PQ1IQa3e33IE+bZbUqpiIfBJGamU9Qfb9oeKYjUdcvvlB6bnEMTT1aOkU2f32s8wBTkPkRPK18NB9AOtICuGr2ooLbk5WHGAwghtrwLRh3XAJxq2tiiWY1Ief4SCaDvHg4r0ua8sIpMoNjp/hh9Jw3x7FxEWkhGyxIL5uKzl8t2ZAC9uchs= charles
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/john.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | 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
39 | -----END RSA PRIVATE KEY-----
40 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/john.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDSkZpFYT2K2ExN/KGEs0QWQWF6c0kteoFNEUjvby7mg1ZAUniyovn1MOKSXls2Hev75Ep9TAtjPBra7x28wiQWyUYjhQAHolfjdCc+OorkP3UeD/nMQtLDx4NvzqQwVXF5Bxt8CfMp6oqhoWDpnYZJyWTr6AFxwHYsyQ4Tf1x5XqoWJDxXDzNTLQmfdSxGFZzrg5gAhM/GI2//jKEEj8OEMukMTsYyupl0npsxJVnPTD/5mkAokmlE7gdYxmnXDx1i7TNogMO0vSWoyT5BTolr/jEGNtMYxcUUgWnmDBhDBLhvF+2scgW9TQZX9NWoQ40Gu4KEw9V5VYQBUD6nrXxU1CDXmFMhAcfPmBsq22Jbt5Fvvji0c8tvqTurKPQ5ZGMdzFK7zieSiTYKthGAQ9HT031xOhU1ZLODCJhytbLNh6cImAa/v9e8MIAITuzytNMbFclqYrRFqzQxbfQq3FOS+H4komcgc3mXfcJrE23V59kewBcvy/UwNs7P9aEYmy0= john
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/mary.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | 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
39 | -----END RSA PRIVATE KEY-----
40 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/mary.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqk8WvfglNe230wXkencpbYmCo1z/tpY/AOSZPOTg4ZZMQcBfYPWeceSOSD4JlRQ6vPUCIPsBKv4Gfj1XlEiptens5g3TRskvjP4JasJ5seIFg3tAMorGB9fLG3JOOFYVUVUDKRCWoy3X4FZokUVAB3PCUhfUcwSbhfh+t8+4QUqxn478ffA5ZE4oFM+x2ZEfSLDvJ0WvgDmBxhiZ1mGWF2nvTNHr9fCN1XjA61RJnxjj61LxbzZgPWvx9nS+0IISa0Y7KunKCSuYLFvxyAP6U2xeqXx2TpzX1nxsy4RhLGQwgrfZgGs7qtLHE8HUVGL5uUJfQN0fY8drU7n/vZDb7ZTLDZgiNlv2GuTH0dX8cO4TOJJtgBIJ1yG0yK1DW5v/ZIU+sgFcajvCzPC6s3mapW+VmQ/kSr6Xj/hrBTHZ6ZdgLE7gvgfxQSO6D4aNp8bxxFWWgQqTkDFtPxGHKjywjCCfel2fYoRWaqMBgJRkUCFIrOcObQg6TOb56ZzoeVWk= mary
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/mike.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5e9y59/Dnq+8XdKrB/4UkeqDnbkNfRkHOSR7unz5+mvL0Pcq/JqNA1edro9F6WwKNl3l15bcnBrrjjSjOvc+I7OPlX1diAyfwmKetf4fMO/e7fuNNaIzeHHl72U4Kn5ZJGKpEhsOO6IfubobWj0bRHvcAbA6/Zv1LYzJeVae8qJattiC1Oe/6+qjzazeZaGU7t4wVOb/sq8s6+k568dVVz0ZG9EUsv24SMh7WdxpE6JwOJ8LySnhzJK06vZp+H1xj8RnugcqrePk/945JB4dS2dwzbzRxE+Wl4M/ez6/bAW7geLuUPTq08oRmY6iG15H/WpJNbhgf84X/v93tsRsNFbhxv4cQCPRhjgjBqRlkN9F2rFpoRxTtLxe+cZVmy8X7cMOELqn5yUtNvuNiLcEr3OshUhiAT1b8GsPTFNkNhHnlpgIx0ax/8MRrhcszIPmv7nrDhqu+kGdSkfQjmwnbqdZzr2z6lRlaWi4SNrlQaSSw0o+lAtKONoYrzZkXAz8= mike
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/files/.ssh/keys/sophia.pub:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8TbU83Zikoq2dWwKsbbKUqlvSj13zk3l7/pEgEhAMwhbSPvYIq+tLEA7req6LbOGT1rwEkBKuWA3K7iv/juAw33S6IbMKlyuycYvbAuTe3+xSFXpXcCvfxQhJ7qpqMESEXdfvf0/ateUn09K8YwPd4qpFJ/JA+ubBf1hxUDSwXa6j7UBAR83hXbO0tsB9VSDOzaj8kJvdMAt9li78NtTaw1GAtaKOrno1Zx9mgwgK1PXYji1vMQHxpTDcGdUI5hdkNAW7yzdflYQU4+4k25d+HTOVrAxskSN3SKPo0sam/u6z8cbaNucu/WGLzcYXbko/+s7bWfUxQ80jiWLPepBfJiBR7FMtRficwizxv6394ftdZFqnsx4F0QWrvAD3Q+pmBBDFU2Pf22uGurFc4GTe+IohWJQDpVD+WQvQ/PgWQTxoalMBiISxa/QTk/n8/YtFBt4I0n9ICZVU8POJVUz+hgJefjzzeKHTdz1O7LhXglCCss92LEONLYmnTn6+nQU= sophia
2 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/scripts/deploy_node.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | sudo adduser bob
4 | sudo su - bob
5 | mkdir .ssh
6 | chmod 700 .ssh
7 | touch .ssh/authorized_keys
8 | chmod 600 .ssh/authorized_keys
9 | aws s3 cp s3://BUCKET/keys/bob.pem ./
10 | cat bob.pem > .ssh/authorized_keys
11 |
12 | sudo yum install -y gcc-c++ make
13 | curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash -
14 | sudo yum install -y nodejs
15 |
16 | sudo yum update -y
17 | sudo yum install git -y
18 |
19 | git clone https://github.com/GermaVinsmoke/bmi-calculator.git
20 | cd bmi-calculator
21 | npm install
22 |
23 | npm run build
24 |
25 | sudo su
26 | yum update -y
27 | yum install -y httpd php
28 | systemctl start httpd
29 | systemctl enable httpd
30 | usermod -a -G apache ec2-user
31 | chown -R ec2-user:apache /var/www
32 | chmod 2775 /var/www
33 | find /var/www -type d -exec chmod 2775 {} \;
34 | find /var/www -type f -exec chmod 0664 {} \;
35 |
36 | cp -r build/* /var/www/html/
37 | mkdir /var/www/html/bmi-calculator
38 | mv /var/www/html/static /var/www/html/bmi-calculator
39 | systemctl restart httpd.service
40 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/shared/shared/scripts/php-deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | yum update -y
3 | yum install -y httpd php
4 | systemctl start httpd
5 | systemctl enable httpd
6 | usermod -a -G apache ec2-user
7 | chown -R ec2-user:apache /var/www
8 | chmod 2775 /var/www
9 | find /var/www -type d -exec chmod 2775 {} \;
10 | find /var/www -type f -exec chmod 0664 {} \;
11 | # PHP script to display Instance ID and Availability Zone
12 | cat << 'EOF' > /var/www/html/index.php
13 |
14 |
15 |
16 |
17 |
25 | EC2 Instance ID:
26 | Availability Zone:
27 |
28 |
29 |
30 | EOF
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/asset-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": {
3 | "main.css": "/static/css/main.54e3607f.css",
4 | "main.js": "/static/js/main.e5839717.js",
5 | "static/js/787.8c65ad62.chunk.js": "/static/js/787.8c65ad62.chunk.js",
6 | "static/media/aws.jpg": "/static/media/aws.7f8d469729dd2de6cfb3.jpg",
7 | "static/media/aws-wname.jpg": "/static/media/aws-wname.ca2376115332eb5057e8.jpg",
8 | "static/media/login.jpg": "/static/media/login.e21739546d37920dcfe5.jpg",
9 | "static/media/AWScloudtitle.jpg": "/static/media/AWScloudtitle.98cddcd1f55ecb7dbf64.jpg",
10 | "static/media/reset-password.jpg": "/static/media/reset-password.534bb9d0d1f845e91b10.jpg",
11 | "static/media/no-posts-found.jpg": "/static/media/no-posts-found.a48ad7ab109b12f96751.jpg",
12 | "static/media/register.jpg": "/static/media/register.4206b16c0ce018f0307d.jpg",
13 | "index.html": "/index.html",
14 | "main.54e3607f.css.map": "/static/css/main.54e3607f.css.map",
15 | "main.e5839717.js.map": "/static/js/main.e5839717.js.map",
16 | "787.8c65ad62.chunk.js.map": "/static/js/787.8c65ad62.chunk.js.map"
17 | },
18 | "entrypoints": [
19 | "static/css/main.54e3607f.css",
20 | "static/js/main.e5839717.js"
21 | ]
22 | }
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/favicon/awsgoat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/favicon/awsgoat.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/index.html:
--------------------------------------------------------------------------------
1 | AWSGoat
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "AWSGoat",
3 | "name": "AWSGoat blog application with dashboard",
4 | "icons": [
5 | {
6 | "src": "favicon/awsgoat.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "favicon/awsgoat.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "start_url": ".",
17 | "display": "standalone",
18 | "theme_color": "#000000",
19 | "background_color": "#ffffff"
20 | }
21 |
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/AWScloudtitle.98cddcd1f55ecb7dbf64.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/AWScloudtitle.98cddcd1f55ecb7dbf64.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/aws-wname.ca2376115332eb5057e8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/aws-wname.ca2376115332eb5057e8.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/aws.7f8d469729dd2de6cfb3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/aws.7f8d469729dd2de6cfb3.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/login.e21739546d37920dcfe5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/login.e21739546d37920dcfe5.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/no-posts-found.a48ad7ab109b12f96751.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/no-posts-found.a48ad7ab109b12f96751.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/register.4206b16c0ce018f0307d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/register.4206b16c0ce018f0307d.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/build/static/media/reset-password.534bb9d0d1f845e91b10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/build/static/media/reset-password.534bb9d0d1f845e91b10.jpg
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525172652548627.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525172652548627.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525172652568597.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525172652568597.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525173052304808.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525173052304808.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525173155599484.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525173155599484.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525173359279634.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525173359279634.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525173435646544.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525173435646544.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525174934318996.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525174934318996.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525175114306915.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525175114306915.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525175420931108.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525175420931108.png
--------------------------------------------------------------------------------
/modules/module-1/resources/s3/webfiles/images/20220525175644356721.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/resources/s3/webfiles/images/20220525175644356721.png
--------------------------------------------------------------------------------
/modules/module-1/src/.eslintignore:
--------------------------------------------------------------------------------
1 | // .eslintignore
2 | build/*
3 | public/*
4 | src/service-worker.js
5 | src/serviceWorkerRegistration.js
6 | src/setupTests.js
7 | src/reportWebVitals.js
8 |
--------------------------------------------------------------------------------
/modules/module-1/src/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "env": {
4 | "browser": true,
5 | "node": true
6 | },
7 | "extends": [
8 | "airbnb",
9 | "plugin:jsx-a11y/recommended",
10 | "plugin:react-hooks/recommended",
11 | "prettier"
12 | ],
13 | "plugins": [
14 | "react",
15 | "react-hooks",
16 | "prettier"
17 | ],
18 | "parser": "@babel/eslint-parser",
19 | "parserOptions": {
20 | "ecmaVersion": 8,
21 | "requireConfigFile": false,
22 | "ecmaFeatures": {
23 | "experimentalObjectRestSpread": true,
24 | "impliedStrict": true
25 | }
26 | },
27 | "rules": {
28 | "no-shadow": 0,
29 | "no-console": 0,
30 | "react/jsx-key": 1,
31 | "import/no-cycle": 0,
32 | "arrow-body-style": 1,
33 | "react/prop-types": 1,
34 | "consistent-return": 1,
35 | "no-param-reassign": 0,
36 | "no-use-before-define": 0,
37 | "no-underscore-dangle": 0,
38 | "react/button-has-type": 1,
39 | "react/no-children-prop": 0,
40 | "react/forbid-prop-types": 0,
41 | "jsx-a11y/anchor-is-valid": 0,
42 | "react/react-in-jsx-scope": 0,
43 | "react/no-array-index-key": 0,
44 | "react/no-unused-prop-types": 1,
45 | "react-hooks/rules-of-hooks": 2,
46 | "no-promise-executor-return": 0,
47 | "no-unsafe-optional-chaining": 0,
48 | "react/require-default-props": 0,
49 | "react/no-unescaped-entities": 0,
50 | "import/prefer-default-export": 0,
51 | "react/jsx-props-no-spreading": 0,
52 | "react/jsx-filename-extension": 0,
53 | "react/jsx-no-useless-fragment": 0,
54 | "react/jsx-curly-brace-presence": 0,
55 | "react/destructuring-assignment": 0,
56 | "import/no-extraneous-dependencies": 0,
57 | "react/no-unstable-nested-components": 0,
58 | "react/function-component-definition": 0,
59 | "react/jsx-no-constructed-context-values": 0,
60 | "no-unused-vars": [
61 | 1,
62 | {
63 | "ignoreRestSiblings": false
64 | }
65 | ],
66 | "prefer-destructuring": [
67 | 1,
68 | {
69 | "object": true,
70 | "array": false
71 | }
72 | ]
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/modules/module-1/src/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | /.env
17 | /.env.local
18 | /.env.development.local
19 | /.env.test.local
20 | /.env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | .eslintcache
27 |
--------------------------------------------------------------------------------
/modules/module-1/src/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | yarn.lock
3 | package-lock.json
4 | public
5 |
6 |
--------------------------------------------------------------------------------
/modules/module-1/src/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "singleQuote": true,
4 | "trailingComma": "es5",
5 | "tabWidth": 2
6 | }
7 |
--------------------------------------------------------------------------------
/modules/module-1/src/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ### v1.4.0
2 |
3 | ###### Apr 12, 2022
4 |
5 | - Update `src/components`.
6 | - Update `src/sections`.
7 | - Update `src/pages`.
8 | - Update `src/layouts`.
9 | - Update `src/theme`.
10 | - Upgrade some dependencies to the latest versions
11 |
12 | ---
13 |
14 | ### v1.3.0
15 |
16 | ###### Feb 21, 2022
17 |
18 | - Support react-script v5.0.0
19 | - Source code improvement
20 | - Upgrade some dependencies to the latest versions
21 |
22 | ---
23 |
24 | ### v1.2.0
25 |
26 | ###### Sep 18, 2021
27 |
28 | - Support MIU v5.0.0 official release
29 | - Upgrade some dependencies to the latest versions
30 | - Update `src/theme/typography.js`
31 | - Upgrade some dependencies to the latest versions
32 |
33 | ---
34 |
35 | ### v1.1.0
36 |
37 | ###### Jul 23, 2021
38 |
39 | - Support MUI v5.0.0-beta.1
40 | - Upgrade some dependencies to the latest versions
41 |
42 | ---
43 |
44 | ### v1.0.0
45 |
46 | ###### Jun 28, 2021
47 |
48 | Initial release.
49 |
--------------------------------------------------------------------------------
/modules/module-1/src/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Minimal UI ([https://minimals.cc/](https://minimals.cc/))
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/modules/module-1/src/README.md:
--------------------------------------------------------------------------------
1 | # Blog Application Setup and installations
2 |
3 | ## Steps to build application code
4 |
5 | 1. Create node_modules folder by executing the following command in ``src/``
6 |
7 | ```
8 | npm install
9 | ```
10 |
11 | 2. Make changes to the source code in ``src/src``.
12 |
13 | 3. Create build folder in ``src/`` by executing the following command.
14 |
15 | ```
16 | npm run build
17 | ```
18 |
19 | 4. After creating build folder, follow inside the folder and remove the _redirects file.
20 |
21 | 5. Replace the build folder in ``resources/s3/webfiles/``
22 |
23 | 6. Copy the index.html file from ``resources/s3/webfiles/build`` to ``resources/lambda/react`` and run the following commands on it. On MacOS, ```-i``` might not be required for the following command.
24 |
25 | ```sh
26 | sed -i 's,href="/,href="S3_BUCKET/,g' index.html
27 | sed -i 's,src="/,src="S3_BUCKET/,g' index.html
28 | ```
29 |
30 | 7. Replace S3_BUCKET in index.html file located in ``resources/lambda/react``
31 |
32 | 8. Run the terraform apply action.
--------------------------------------------------------------------------------
/modules/module-1/src/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "module": "commonjs",
5 | "baseUrl": "."
6 | },
7 | "include": [
8 | "src/**/*"
9 | ],
10 | "exclude": [
11 | "node_modules"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/modules/module-1/src/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "awsgoat",
3 | "author": "awsgoat",
4 | "licence": "MIT",
5 | "version": "1.4.0",
6 | "private": false,
7 | "scripts": {
8 | "start": "react-scripts start",
9 | "build": "react-scripts build",
10 | "test": "react-scripts test",
11 | "eject": "react-scripts eject",
12 | "lint": "eslint --ext .js,.jsx ./src",
13 | "lint:fix": "eslint --fix --ext .js,.jsx ./src"
14 | },
15 | "eslintConfig": {
16 | "extends": [
17 | "react-app",
18 | "react-app/jest"
19 | ]
20 | },
21 | "babel": {
22 | "presets": [
23 | "@babel/preset-react"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | },
38 | "dependencies": {
39 | "@date-io/moment": "^2.14.0",
40 | "@emotion/react": "^11.9.0",
41 | "@emotion/styled": "^11.8.1",
42 | "@faker-js/faker": "^6.1.2",
43 | "@iconify/react": "^3.2.1",
44 | "@mui/icons-material": "^5.8.4",
45 | "@mui/lab": "^5.0.0-alpha.77",
46 | "@mui/material": "^5.6.1",
47 | "@mui/x-date-pickers": "^5.0.0-alpha.3",
48 | "@testing-library/jest-dom": "^5.16.2",
49 | "apexcharts": "^3.35.0",
50 | "axios": "^0.27.2",
51 | "change-case": "^4.1.2",
52 | "date-fns": "^2.28.0",
53 | "formik": "^2.2.9",
54 | "history": "^5.2.0",
55 | "lodash": "^4.17.21",
56 | "numeral": "^2.0.6",
57 | "prop-types": "^15.8.1",
58 | "react": "^17.0.2",
59 | "react-apexcharts": "^1.4.0",
60 | "react-dom": "^17.0.2",
61 | "react-helmet-async": "^1.3.0",
62 | "react-quill": "^2.0.0-beta.4",
63 | "react-router-dom": "^6.3.0",
64 | "react-scripts": "^5.0.0",
65 | "simplebar": "^5.3.6",
66 | "simplebar-react": "^2.3.6",
67 | "web-vitals": "^2.1.4",
68 | "yup": "^0.32.11"
69 | },
70 | "devDependencies": {
71 | "@babel/core": "^7.17.9",
72 | "@babel/eslint-parser": "^7.17.0",
73 | "eslint": "^8.9.0",
74 | "eslint-config-airbnb": "^19.0.4",
75 | "eslint-config-prettier": "^8.4.0",
76 | "eslint-config-react-app": "^7.0.0",
77 | "eslint-plugin-flowtype": "^8.0.3",
78 | "eslint-plugin-import": "^2.25.4",
79 | "eslint-plugin-jsx-a11y": "^6.5.1",
80 | "eslint-plugin-prettier": "^4.0.0",
81 | "eslint-plugin-react": "^7.28.0",
82 | "eslint-plugin-react-hooks": "^4.3.0",
83 | "prettier": "^2.5.1"
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/modules/module-1/src/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/modules/module-1/src/public/favicon/awsgoat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/public/favicon/awsgoat.png
--------------------------------------------------------------------------------
/modules/module-1/src/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | AWSGoat
23 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/modules/module-1/src/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "AWSGoat",
3 | "name": "AWSGoat blog application with dashboard",
4 | "icons": [
5 | {
6 | "src": "favicon/awsgoat.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "favicon/awsgoat.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "start_url": ".",
17 | "display": "standalone",
18 | "theme_color": "#000000",
19 | "background_color": "#ffffff"
20 | }
21 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/App.js:
--------------------------------------------------------------------------------
1 | // routes
2 | import Router from './routes';
3 | // theme
4 | import ThemeProvider from './theme';
5 | // components
6 | import ScrollToTop from './components/ScrollToTop';
7 | import { BaseOptionChartStyle } from './components/chart/BaseOptionChart';
8 |
9 | // ----------------------------------------------------------------------
10 |
11 | export default function App() {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/_mock/account.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | import { getUser } from '../sections/auth/AuthService';
4 | import popOverLogo from '../images/avatar-2.jpg';
5 |
6 | const user = getUser();
7 |
8 | const displayName = user !== 'undefined' && user ? user.name : '';
9 | const email = user !== 'undefined' && user ? user.email : '';
10 | const account = {
11 | displayName,
12 | email,
13 | photoURL: popOverLogo,
14 | };
15 |
16 | export default account;
17 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/_mock/blog.js:
--------------------------------------------------------------------------------
1 | import { faker } from '@faker-js/faker';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 |
6 |
7 | const POST_TITLES = [
8 | 'Whiteboard Templates By Industry Leaders',
9 | 'Tesla Cybertruck-inspired camper trailer for Tesla fans who can’t just wait for the truck!',
10 | 'Designify Agency Landing Page Design',
11 | '✨What is Done is Done ✨',
12 | 'Fresh Prince',
13 | 'Six Socks Studio',
14 | 'vincenzo de cotiis’ crossing over showcases a research on contamination',
15 | 'Simple, Great Looking Animations in Your Project | Video Tutorial',
16 | '40 Free Serif Fonts for Digital Designers',
17 | 'Examining the Evolution of the Typical Web Design Client',
18 | 'Katie Griffin loves making that homey art',
19 | 'The American Dream retold through mid-century railroad graphics',
20 | 'Illustration System Design',
21 | 'CarZio-Delivery Driver App SignIn/SignUp',
22 | 'How to create a client-serverless Jamstack app using Netlify, Gatsby and Fauna',
23 | 'Tylko Organise effortlessly -3D & Motion Design',
24 | 'RAYO ?? A expanded visual arts festival identity',
25 | 'Anthony Burrill and Wired mag’s Andrew Diprose discuss how they made January’s Change Everything cover',
26 | 'Inside the Mind of Samuel Day',
27 | 'Portfolio Review: Is This Portfolio Too Creative?',
28 | 'Akkers van Margraten',
29 | 'Gradient Ticket icon',
30 | 'Here’s a Dyson motorcycle concept that doesn’t ‘suck’!',
31 | 'How to Animate a SVG with border-image',
32 | ];
33 |
34 | const posts = [...Array(23)].map((_, index) => ({
35 | id: faker.datatype.uuid(),
36 | cover: `/static/mock-images/covers/cover_${index + 1}.jpg`,
37 | title: POST_TITLES[index + 1],
38 | createdAt: faker.date.past(),
39 | view: faker.datatype.number(),
40 | comment: faker.datatype.number(),
41 | share: faker.datatype.number(),
42 | favorite: faker.datatype.number(),
43 | author: {
44 | name: faker.name.findName(),
45 | avatarUrl: `/static/mock-images/avatars/avatar_${index + 1}.jpg`,
46 | },
47 | }));
48 | export default posts;
49 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/_mock/products.js:
--------------------------------------------------------------------------------
1 | import { faker } from '@faker-js/faker';
2 | import { sample } from 'lodash';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | const PRODUCT_NAME = [
7 | 'Nike Air Force 1 NDESTRUKT',
8 | 'Nike Space Hippie 04',
9 | 'Nike Air Zoom Pegasus 37 A.I.R. Chaz Bear',
10 | 'Nike Blazer Low 77 Vintage',
11 | 'Nike ZoomX SuperRep Surge',
12 | 'Zoom Freak 2',
13 | 'Nike Air Max Zephyr',
14 | 'Jordan Delta',
15 | 'Air Jordan XXXV PF',
16 | 'Nike Waffle Racer Crater',
17 | 'Kyrie 7 EP Sisterhood',
18 | 'Nike Air Zoom BB NXT',
19 | 'Nike Air Force 1 07 LX',
20 | 'Nike Air Force 1 Shadow SE',
21 | 'Nike Air Zoom Tempo NEXT%',
22 | 'Nike DBreak-Type',
23 | 'Nike Air Max Up',
24 | 'Nike Air Max 270 React ENG',
25 | 'NikeCourt Royale',
26 | 'Nike Air Zoom Pegasus 37 Premium',
27 | 'Nike Air Zoom SuperRep',
28 | 'NikeCourt Royale',
29 | 'Nike React Art3mis',
30 | 'Nike React Infinity Run Flyknit A.I.R. Chaz Bear',
31 | ];
32 | const PRODUCT_COLOR = ['#00AB55', '#000000', '#FFFFFF', '#FFC0CB', '#FF4842', '#1890FF', '#94D82D', '#FFC107'];
33 |
34 | // ----------------------------------------------------------------------
35 |
36 | const products = [...Array(24)].map((_, index) => {
37 | const setIndex = index + 1;
38 |
39 | return {
40 | id: faker.datatype.uuid(),
41 | cover: `/static/mock-images/products/product_${setIndex}.jpg`,
42 | name: PRODUCT_NAME[index],
43 | price: faker.datatype.number({ min: 4, max: 99, precision: 0.01 }),
44 | priceSale: setIndex % 3 ? null : faker.datatype.number({ min: 19, max: 29, precision: 0.01 }),
45 | colors:
46 | (setIndex === 1 && PRODUCT_COLOR.slice(0, 2)) ||
47 | (setIndex === 2 && PRODUCT_COLOR.slice(1, 3)) ||
48 | (setIndex === 3 && PRODUCT_COLOR.slice(2, 4)) ||
49 | (setIndex === 4 && PRODUCT_COLOR.slice(3, 6)) ||
50 | (setIndex === 23 && PRODUCT_COLOR.slice(4, 6)) ||
51 | (setIndex === 24 && PRODUCT_COLOR.slice(5, 6)) ||
52 | PRODUCT_COLOR,
53 | status: sample(['sale', 'new', '', '']),
54 | };
55 | });
56 |
57 | export default products;
58 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/_mock/user.js:
--------------------------------------------------------------------------------
1 | import { faker } from '@faker-js/faker';
2 | import { sample } from 'lodash';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | const users = [...Array(24)].map((_, index) => ({
7 | id: faker.datatype.uuid(),
8 | avatarUrl: `/static/mock-images/avatars/avatar_${index + 1}.jpg`,
9 | name: faker.name.findName(),
10 | company: faker.company.companyName(),
11 | isVerified: faker.datatype.boolean(),
12 | status: sample(['active', 'banned']),
13 | role: sample([
14 | 'Leader',
15 | 'Hr Manager',
16 | 'UI Designer',
17 | 'UX Designer',
18 | 'UI/UX Designer',
19 | 'Project Manager',
20 | 'Backend Developer',
21 | 'Full Stack Designer',
22 | 'Front End Developer',
23 | 'Full Stack Developer',
24 | ]),
25 | }));
26 |
27 | export default users;
28 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/common/httpService.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import { getToken } from '../sections/auth/AuthService';
3 |
4 | const httpService = axios.create({
5 | baseURL: "API_GATEWAY_URL",
6 | headers: {
7 | "Content-type": "application/json",
8 | "JWT_TOKEN": getToken(),
9 | }
10 | });
11 |
12 | httpService.interceptors.request.use(async req => {
13 | req.headers.JWT_TOKEN = getToken();
14 | return req;
15 | })
16 |
17 | export default httpService;
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/Iconify.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // icons
3 | import { Icon } from '@iconify/react';
4 | // @mui
5 | import { Box } from '@mui/material';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | Iconify.propTypes = {
10 | icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
11 | sx: PropTypes.object,
12 | };
13 |
14 | export default function Iconify({ icon, sx, ...other }) {
15 | return ;
16 | }
17 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/MenuPopover.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { Popover } from '@mui/material';
4 | import { alpha, styled } from '@mui/material/styles';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | const ArrowStyle = styled('span')(({ theme }) => ({
9 | [theme.breakpoints.up('sm')]: {
10 | top: -7,
11 | zIndex: 1,
12 | width: 12,
13 | right: 20,
14 | height: 12,
15 | content: "''",
16 | position: 'absolute',
17 | borderRadius: '0 0 4px 0',
18 | transform: 'rotate(-135deg)',
19 | background: theme.palette.background.paper,
20 | borderRight: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,
21 | borderBottom: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,
22 | },
23 | }));
24 |
25 | // ----------------------------------------------------------------------
26 |
27 | MenuPopover.propTypes = {
28 | children: PropTypes.node.isRequired,
29 | sx: PropTypes.object,
30 | };
31 |
32 | export default function MenuPopover({ children, sx, ...other }) {
33 | return (
34 |
47 |
48 |
49 | {children}
50 |
51 | );
52 | }
53 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/Page.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { Helmet } from 'react-helmet-async';
3 | import { forwardRef } from 'react';
4 | // @mui
5 | import { Box } from '@mui/material';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const Page = forwardRef(({ children, title = '', meta, ...other }, ref) => (
10 | <>
11 |
12 | {`${title}`}
13 | {meta}
14 |
15 |
16 |
17 | {children}
18 |
19 | >
20 | ));
21 |
22 | Page.propTypes = {
23 | children: PropTypes.node.isRequired,
24 | title: PropTypes.string,
25 | meta: PropTypes.node,
26 | };
27 |
28 | export default Page;
29 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/ScrollToTop.js:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import { useLocation } from 'react-router-dom';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export default function ScrollToTop() {
7 | const { pathname } = useLocation();
8 |
9 | useEffect(() => {
10 | window.scrollTo(0, 0);
11 | }, [pathname]);
12 |
13 | return null;
14 | }
15 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/Scrollbar.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import SimpleBarReact from 'simplebar-react';
3 | // @mui
4 | import { alpha, styled } from '@mui/material/styles';
5 | import { Box } from '@mui/material';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const RootStyle = styled('div')(() => ({
10 | flexGrow: 1,
11 | height: '100%',
12 | overflow: 'hidden',
13 | }));
14 |
15 | const SimpleBarStyle = styled(SimpleBarReact)(({ theme }) => ({
16 | maxHeight: '100%',
17 | '& .simplebar-scrollbar': {
18 | '&:before': {
19 | backgroundColor: alpha(theme.palette.grey[600], 0.48),
20 | },
21 | '&.simplebar-visible:before': {
22 | opacity: 1,
23 | },
24 | },
25 | '& .simplebar-track.simplebar-vertical': {
26 | width: 10,
27 | },
28 | '& .simplebar-track.simplebar-horizontal .simplebar-scrollbar': {
29 | height: 6,
30 | },
31 | '& .simplebar-mask': {
32 | zIndex: 'inherit',
33 | },
34 | }));
35 |
36 | // ----------------------------------------------------------------------
37 |
38 | Scrollbar.propTypes = {
39 | children: PropTypes.node.isRequired,
40 | sx: PropTypes.object,
41 | };
42 |
43 | export default function Scrollbar({ children, sx, ...other }) {
44 | const userAgent = typeof navigator === 'undefined' ? 'SSR' : navigator.userAgent;
45 |
46 | const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);
47 |
48 | if (isMobile) {
49 | return (
50 |
51 | {children}
52 |
53 | );
54 | }
55 |
56 | return (
57 |
58 |
59 | {children}
60 |
61 |
62 | );
63 | }
64 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/SearchNotFound.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { Paper } from '@mui/material';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | SearchNotFound.propTypes = {
8 | searchQuery: PropTypes.string,
9 | };
10 |
11 | export default function SearchNotFound({ searchQuery = '', ...other }) {
12 | return (
13 |
14 | {// eslint-disable-next-line
15 | Results for
}
16 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/SvgIconStyle.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { Box } from '@mui/material';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | SvgIconStyle.propTypes = {
7 | src: PropTypes.string.isRequired,
8 | sx: PropTypes.object,
9 | };
10 |
11 | export default function SvgIconStyle({ src, sx }) {
12 | return (
13 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/UserDetailsPopOver.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { Popover } from '@mui/material';
4 | // import { alpha, styled } from '@mui/material/styles';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | UserDetailsPopOver.propTypes = {
9 | children: PropTypes.node.isRequired,
10 | sx: PropTypes.object,
11 | };
12 |
13 | export default function UserDetailsPopOver({ children, sx, ...other }) {
14 | return (
15 |
28 | {children}
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/chart/index.js:
--------------------------------------------------------------------------------
1 | export { default as BaseOptionChart } from './BaseOptionChart';
2 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/color-utils/ColorPreview.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { alpha, styled } from '@mui/material/styles';
4 | import { Box, Typography } from '@mui/material';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | const RootStyle = styled(Box)({
9 | display: 'flex',
10 | alignItems: 'center',
11 | justifyContent: 'flex-end',
12 | });
13 |
14 | const IconStyle = styled('div')(({ theme }) => ({
15 | marginLeft: -4,
16 | borderRadius: '50%',
17 | width: theme.spacing(2),
18 | height: theme.spacing(2),
19 | border: `solid 2px ${theme.palette.background.paper}`,
20 | boxShadow: `inset -1px 1px 2px ${alpha(theme.palette.common.black, 0.24)}`,
21 | }));
22 |
23 | // ----------------------------------------------------------------------
24 |
25 | ColorPreview.propTypes = {
26 | colors: PropTypes.array.isRequired,
27 | limit: PropTypes.number,
28 | };
29 |
30 | export default function ColorPreview({ colors, limit = 3, ...other }) {
31 | const showColor = colors.slice(0, limit);
32 | const moreColor = colors.length - limit;
33 |
34 | return (
35 |
36 | {showColor.map((color, index) => (
37 |
38 | ))}
39 |
40 | {colors.length > limit && {`+${moreColor}`}}
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/components/color-utils/index.js:
--------------------------------------------------------------------------------
1 | export { default as ColorPreview } from './ColorPreview';
2 | export { default as ColorManyPicker } from './ColorManyPicker';
3 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/hooks/useResponsive.js:
--------------------------------------------------------------------------------
1 | // @mui
2 | import { useTheme } from '@mui/material/styles';
3 | import useMediaQuery from '@mui/material/useMediaQuery';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function useResponsive(query, key, start, end) {
8 | const theme = useTheme();
9 |
10 | const mediaUp = useMediaQuery(theme.breakpoints.up(key));
11 |
12 | const mediaDown = useMediaQuery(theme.breakpoints.down(key));
13 |
14 | const mediaBetween = useMediaQuery(theme.breakpoints.between(start, end));
15 |
16 | const mediaOnly = useMediaQuery(theme.breakpoints.only(key));
17 |
18 | if (query === 'up') {
19 | return mediaUp;
20 | }
21 |
22 | if (query === 'down') {
23 | return mediaDown;
24 | }
25 |
26 | if (query === 'between') {
27 | return mediaBetween;
28 | }
29 |
30 | if (query === 'only') {
31 | return mediaOnly;
32 | }
33 | return null;
34 | }
35 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/AWScloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/AWScloud.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/AWScloudtitle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/AWScloudtitle.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/avatar-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/avatar-1.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/avatar-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/avatar-2.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/avatar-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/avatar-3.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/avatar-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/avatar-4.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/avatar.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/aws-newname.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/aws-newname.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/aws-wname-blur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/aws-wname-blur.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/aws-wname.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/aws-wname.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/aws-wnamewhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/aws-wnamewhite.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/aws.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/aws.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/azure-wname.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/azure-wname.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/azure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/azure.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/login.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/login.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/logo.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/no-posts-found.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/no-posts-found.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/register.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/register.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/images/reset-password.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/images/reset-password.jpg
--------------------------------------------------------------------------------
/modules/module-1/src/src/index.js:
--------------------------------------------------------------------------------
1 | // scroll bar
2 | import 'simplebar/src/simplebar.css';
3 |
4 | import ReactDOM from 'react-dom';
5 | import { HashRouter } from 'react-router-dom';
6 | import { HelmetProvider } from 'react-helmet-async';
7 |
8 | //
9 | import App from './App';
10 | import * as serviceWorker from './serviceWorker';
11 | import reportWebVitals from './reportWebVitals';
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | ReactDOM.render(
16 |
17 |
18 |
19 |
20 | ,
21 | document.getElementById('root')
22 | );
23 |
24 | // If you want to enable client cache, register instead.
25 | serviceWorker.unregister();
26 |
27 | // If you want to start measuring performance in your app, pass a function
28 | // to log results (for example: reportWebVitals(console.log))
29 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
30 | reportWebVitals();
31 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/LogoOnlyLayout.js:
--------------------------------------------------------------------------------
1 | import { Outlet } from 'react-router-dom';
2 | // material
3 | import { styled } from '@mui/material/styles';
4 | // components
5 | import Logo from '../components/Logo';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const HeaderStyle = styled('header')(({ theme }) => ({
10 | top: 0,
11 | left: 0,
12 | lineHeight: 0,
13 | width: '100%',
14 | position: 'absolute',
15 | padding: theme.spacing(3, 3, 0),
16 | [theme.breakpoints.up('sm')]: {
17 | padding: theme.spacing(5, 5, 0),
18 | },
19 | }));
20 |
21 | // ----------------------------------------------------------------------
22 |
23 | export default function LogoOnlyLayout() {
24 | return (
25 | <>
26 |
27 |
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/DashboardNavbar.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { alpha, styled } from '@mui/material/styles';
3 | import { Box, Stack, AppBar, Toolbar, IconButton } from '@mui/material';
4 | import Iconify from '../../components/Iconify';
5 | import AccountPopover from './AccountPopover';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const DRAWER_WIDTH = 280;
10 | const APPBAR_MOBILE = 64;
11 | const APPBAR_DESKTOP = 92;
12 |
13 | const RootStyle = styled(AppBar)(({ theme }) => ({
14 | boxShadow: 'none',
15 | backdropFilter: 'blur(6px)',
16 | WebkitBackdropFilter: 'blur(6px)', // Fix on Mobile
17 | backgroundColor: alpha(theme.palette.background.default, 0.72),
18 | [theme.breakpoints.up('lg')]: {
19 | width: `calc(100% - ${DRAWER_WIDTH + 1}px)`,
20 | },
21 | }));
22 |
23 | const ToolbarStyle = styled(Toolbar)(({ theme }) => ({
24 | minHeight: APPBAR_MOBILE,
25 | [theme.breakpoints.up('lg')]: {
26 | minHeight: APPBAR_DESKTOP,
27 | padding: theme.spacing(0, 5),
28 | },
29 | }));
30 |
31 | // ----------------------------------------------------------------------
32 |
33 | DashboardNavbar.propTypes = {
34 | onOpenSidebar: PropTypes.func,
35 | };
36 |
37 | export default function DashboardNavbar({ onOpenSidebar }) {
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | );
53 | }
54 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/DashboardSidebar.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { useEffect } from 'react';
3 | import { useLocation } from 'react-router-dom';
4 | import { styled } from '@mui/material/styles';
5 | import { Box, Drawer } from '@mui/material';
6 | import useResponsive from '../../hooks/useResponsive';
7 | import Logo from '../../components/Logo';
8 | import Scrollbar from '../../components/Scrollbar';
9 | import NavSection from '../../components/NavSection';
10 | import navConfig from './NavConfig';
11 |
12 | // ----------------------------------------------------------------------
13 |
14 | const DRAWER_WIDTH = 280;
15 |
16 | const RootStyle = styled('div')(({ theme }) => ({
17 | [theme.breakpoints.up('lg')]: {
18 | flexShrink: 0,
19 | width: DRAWER_WIDTH,
20 | },
21 | }));
22 |
23 | DashboardSidebar.propTypes = {
24 | isOpenSidebar: PropTypes.bool,
25 | onCloseSidebar: PropTypes.func,
26 | };
27 |
28 | export default function DashboardSidebar({ isOpenSidebar, onCloseSidebar }) {
29 | const { pathname } = useLocation();
30 |
31 | const isDesktop = useResponsive('up', 'lg');
32 |
33 | useEffect(() => {
34 | if (isOpenSidebar) {
35 | onCloseSidebar();
36 | }
37 | // eslint-disable-next-line react-hooks/exhaustive-deps
38 | }, [pathname]);
39 |
40 | const renderContent = (
41 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | );
57 |
58 | return (
59 |
60 | {!isDesktop && (
61 |
68 | {renderContent}
69 |
70 | )}
71 |
72 | {isDesktop && (
73 |
84 | {renderContent}
85 |
86 | )}
87 |
88 | );
89 | }
90 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/LanguagePopover.js:
--------------------------------------------------------------------------------
1 | import { useRef, useState } from 'react';
2 | // material
3 | import { alpha } from '@mui/material/styles';
4 | import { Box, MenuItem, Stack, IconButton } from '@mui/material';
5 | // components
6 | import MenuPopover from '../../components/MenuPopover';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | const LANGS = [
11 | {
12 | value: 'en',
13 | label: 'English',
14 | icon: '/static/icons/ic_flag_en.svg',
15 | },
16 | {
17 | value: 'de',
18 | label: 'German',
19 | icon: '/static/icons/ic_flag_de.svg',
20 | },
21 | {
22 | value: 'fr',
23 | label: 'French',
24 | icon: '/static/icons/ic_flag_fr.svg',
25 | },
26 | ];
27 |
28 | // ----------------------------------------------------------------------
29 |
30 | export default function LanguagePopover() {
31 | const anchorRef = useRef(null);
32 | const [open, setOpen] = useState(false);
33 |
34 | const handleOpen = () => {
35 | setOpen(true);
36 | };
37 |
38 | const handleClose = () => {
39 | setOpen(false);
40 | };
41 |
42 | return (
43 | <>
44 | alpha(theme.palette.primary.main, theme.palette.action.focusOpacity),
53 | }),
54 | }}
55 | >
56 |
57 |
58 |
59 |
70 |
71 | {LANGS.map((option) => (
72 |
77 | ))}
78 |
79 |
80 | >
81 | );
82 | }
83 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/NavConfig.js:
--------------------------------------------------------------------------------
1 | // component
2 | import Iconify from '../../components/Iconify';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | const getIcon = (name) => ;
7 |
8 | const navConfig = [
9 | {
10 | title: 'dashboard',
11 | path: '/dashboard/app',
12 | icon: getIcon('eva:pie-chart-2-fill'),
13 | },
14 | {
15 | title: 'user',
16 | path: '/dashboard/user',
17 | icon: getIcon('eva:people-fill'),
18 | },
19 | {
20 | title: 'newpost',
21 | path: '/dashboard/newpost',
22 | icon: getIcon('eva:book-fill'),
23 | },
24 | {
25 | title: 'posts',
26 | path: '/dashboard/posts',
27 | icon: getIcon('eva:file-text-fill'),
28 | },
29 | {
30 | title: 'profile',
31 | path: '/dashboard/profile',
32 | icon: getIcon('eva:person-fill'),
33 | },
34 | ];
35 |
36 | export default navConfig;
37 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/Searchbar.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | // material
3 | import { styled, alpha } from '@mui/material/styles';
4 | import { Input, Slide, Button, IconButton, InputAdornment, ClickAwayListener } from '@mui/material';
5 | // component
6 | import Iconify from '../../components/Iconify';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | const APPBAR_MOBILE = 64;
11 | const APPBAR_DESKTOP = 92;
12 |
13 | const SearchbarStyle = styled('div')(({ theme }) => ({
14 | top: 0,
15 | left: 0,
16 | zIndex: 99,
17 | width: '100%',
18 | display: 'flex',
19 | position: 'absolute',
20 | alignItems: 'center',
21 | height: APPBAR_MOBILE,
22 | backdropFilter: 'blur(6px)',
23 | WebkitBackdropFilter: 'blur(6px)', // Fix on Mobile
24 | padding: theme.spacing(0, 3),
25 | boxShadow: theme.customShadows.z8,
26 | backgroundColor: `${alpha(theme.palette.background.default, 0.72)}`,
27 | [theme.breakpoints.up('md')]: {
28 | height: APPBAR_DESKTOP,
29 | padding: theme.spacing(0, 5),
30 | },
31 | }));
32 |
33 | // ----------------------------------------------------------------------
34 |
35 | export default function Searchbar() {
36 | const [isOpen, setOpen] = useState(false);
37 |
38 | const handleOpen = () => {
39 | setOpen((prev) => !prev);
40 | };
41 |
42 | const handleClose = () => {
43 | setOpen(false);
44 | };
45 |
46 | return (
47 |
48 |
49 | {!isOpen && (
50 |
51 |
52 |
53 | )}
54 |
55 |
56 |
57 |
64 |
65 |
66 | }
67 | sx={{ mr: 1, fontWeight: 'fontWeightBold' }}
68 | />
69 |
72 |
73 |
74 |
75 |
76 | );
77 | }
78 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/layouts/dashboard/index.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import { Outlet } from 'react-router-dom';
3 | import { styled } from '@mui/material/styles';
4 | import DashboardNavbar from './DashboardNavbar';
5 | import DashboardSidebar from './DashboardSidebar';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const APP_BAR_MOBILE = 64;
10 | const APP_BAR_DESKTOP = 92;
11 |
12 | const RootStyle = styled('div')({
13 | display: 'flex',
14 | minHeight: '100%',
15 | overflow: 'hidden'
16 | });
17 |
18 | const MainStyle = styled('div')(({ theme }) => ({
19 | flexGrow: 1,
20 | overflow: 'auto',
21 | minHeight: '100%',
22 | paddingTop: APP_BAR_MOBILE + 24,
23 | paddingBottom: theme.spacing(10),
24 | [theme.breakpoints.up('lg')]: {
25 | paddingTop: APP_BAR_DESKTOP + 24,
26 | paddingLeft: theme.spacing(2),
27 | paddingRight: theme.spacing(2)
28 | }
29 | }));
30 |
31 | // ----------------------------------------------------------------------
32 |
33 | export default function DashboardLayout() {
34 | const [open, setOpen] = useState(false);
35 |
36 | return (
37 |
38 | setOpen(true)} />
39 | setOpen(false)} />
40 |
41 |
42 |
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/logo.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/pages/Page404.js:
--------------------------------------------------------------------------------
1 | import { Link as RouterLink } from 'react-router-dom';
2 | import { styled } from '@mui/material/styles';
3 | import { Button, Typography, Container, Box } from '@mui/material';
4 | import Page from '../components/Page';
5 | import pageNotFound from '../images/no-posts-found.jpg';
6 |
7 | const ContentStyle = styled('div')(({ theme }) => ({
8 | maxWidth: 480,
9 | margin: 'auto',
10 | minHeight: '100vh',
11 | display: 'flex',
12 | justifyContent: 'center',
13 | flexDirection: 'column',
14 | padding: theme.spacing(12, 0)
15 | }));
16 |
17 | export default function Page404() {
18 | return (
19 |
20 |
21 |
22 |
23 | Page not found !
24 |
25 |
26 |
27 | The page you are looking for does not exist. Please try a URL that exists.
28 |
29 |
30 |
35 |
36 |
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/pages/Products.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | // material
3 | import { Container, Stack, Typography } from '@mui/material';
4 | // components
5 | import Page from '../components/Page';
6 | import { ProductSort, ProductList, ProductCartWidget, ProductFilterSidebar } from '../sections/@dashboard/products';
7 | // mock
8 | import PRODUCTS from '../_mock/products';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | export default function EcommerceShop() {
13 | const [openFilter, setOpenFilter] = useState(false);
14 |
15 | const handleOpenFilter = () => {
16 | setOpenFilter(true);
17 | };
18 |
19 | const handleCloseFilter = () => {
20 | setOpenFilter(false);
21 | };
22 |
23 | return (
24 |
25 |
26 |
27 | Products
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-1/src/src/placeholder.png
--------------------------------------------------------------------------------
/modules/module-1/src/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = (onPerfEntry) => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/routes.js:
--------------------------------------------------------------------------------
1 | import { Navigate, useRoutes } from 'react-router-dom';
2 | import DashboardLayout from './layouts/dashboard';
3 | import Blog from './pages/Blog';
4 | import User from './pages/User';
5 | import Login from './pages/Login';
6 | import NotFound from './pages/Page404';
7 | import Register from './pages/Register';
8 | import ResetPassword from './pages/ResetPassword';
9 | import NewPost from './pages/NewPost';
10 | import DashboardApp from './pages/DashboardApp';
11 | import Profile from './pages/Profile';
12 | import HomePage from './pages/HomePage';
13 | import Blogpost from './pages/blogpost';
14 |
15 | import { getToken } from './sections/auth/AuthService';
16 |
17 | // ----------------------------------------------------------------------
18 |
19 | export default function Router() {
20 | return useRoutes([
21 | {
22 | path: '/dashboard',
23 | element: getToken()? :,
24 | children: [
25 | { path: '/dashboard', element: },
26 | { path: 'app', element: },
27 | { path: 'user', element: },
28 | { path: 'posts', element: },
29 | { path: 'newpost', element: },
30 | { path: 'profile', element: },
31 | ],
32 | },
33 | {
34 | path: '/',
35 | children: [
36 | { path: '/', element: },
37 | { path: '/home', element: },
38 | { path: 'login', element: },
39 | { path: 'reset-password', element: },
40 | { path: 'register', element: },
41 | { path: '404', element: },
42 | { path: '/blogpost/:id', element: },
43 | { path: '*', element: },
44 | ],
45 | },
46 | { path: '*', element: },
47 | ]);
48 | }
49 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppConversionRates.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import merge from 'lodash/merge';
3 | import ReactApexChart from 'react-apexcharts';
4 | // @mui
5 | import { Box, Card, CardHeader } from '@mui/material';
6 | // utils
7 | import { fNumber } from '../../../utils/formatNumber';
8 | // components
9 | import { BaseOptionChart } from '../../../components/chart';
10 |
11 | // ----------------------------------------------------------------------
12 |
13 | AppConversionRates.propTypes = {
14 | title: PropTypes.string,
15 | subheader: PropTypes.string,
16 | chartData: PropTypes.array.isRequired,
17 | };
18 |
19 | export default function AppConversionRates({ title, subheader, chartData, ...other }) {
20 | const chartLabels = chartData.map((i) => i.label);
21 |
22 | const chartSeries = chartData.map((i) => i.value);
23 |
24 | const chartOptions = merge(BaseOptionChart(), {
25 | tooltip: {
26 | marker: { show: false },
27 | y: {
28 | formatter: (seriesName) => fNumber(seriesName),
29 | title: {
30 | formatter: () => '',
31 | },
32 | },
33 | },
34 | plotOptions: {
35 | bar: { horizontal: true, barHeight: '28%', borderRadius: 2 },
36 | },
37 | xaxis: {
38 | categories: chartLabels,
39 | },
40 | });
41 |
42 | return (
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | );
51 | }
52 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppCurrentSubject.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import merge from 'lodash/merge';
3 | import ReactApexChart from 'react-apexcharts';
4 | // @mui
5 | import { styled } from '@mui/material/styles';
6 | import { Card, CardHeader } from '@mui/material';
7 | // components
8 | import { BaseOptionChart } from '../../../components/chart';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | const CHART_HEIGHT = 392;
13 |
14 | const LEGEND_HEIGHT = 72;
15 |
16 | const ChartWrapperStyle = styled('div')(({ theme }) => ({
17 | height: CHART_HEIGHT,
18 | marginTop: theme.spacing(2),
19 | '& .apexcharts-canvas svg': {
20 | height: CHART_HEIGHT,
21 | },
22 | '& .apexcharts-canvas svg,.apexcharts-canvas foreignObject': {
23 | overflow: 'visible',
24 | },
25 | '& .apexcharts-legend': {
26 | height: LEGEND_HEIGHT,
27 | alignContent: 'center',
28 | position: 'relative !important',
29 | borderTop: `solid 1px ${theme.palette.divider}`,
30 | top: `calc(${CHART_HEIGHT - LEGEND_HEIGHT}px) !important`,
31 | },
32 | }));
33 |
34 | // ----------------------------------------------------------------------
35 |
36 | AppCurrentSubject.propTypes = {
37 | title: PropTypes.string,
38 | subheader: PropTypes.string,
39 | chartData: PropTypes.array.isRequired,
40 | chartColors: PropTypes.arrayOf(PropTypes.string).isRequired,
41 | chartLabels: PropTypes.arrayOf(PropTypes.string).isRequired,
42 | };
43 |
44 | export default function AppCurrentSubject({ title, subheader, chartData, chartColors, chartLabels, ...other }) {
45 | const chartOptions = merge(BaseOptionChart(), {
46 | stroke: { width: 2 },
47 | fill: { opacity: 0.48 },
48 | legend: { floating: true, horizontalAlign: 'center' },
49 | xaxis: {
50 | categories: chartLabels,
51 | labels: {
52 | style: {
53 | colors: chartColors,
54 | },
55 | },
56 | },
57 | });
58 |
59 | return (
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | }
69 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppNewsUpdate.js:
--------------------------------------------------------------------------------
1 | // @mui
2 | import PropTypes from 'prop-types';
3 | import { Box, Stack, Link, Card, Button, Divider, Typography, CardHeader } from '@mui/material';
4 | // utils
5 | import { fToNow } from '../../../utils/formatTime';
6 | // components
7 | import Iconify from '../../../components/Iconify';
8 | import Scrollbar from '../../../components/Scrollbar';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | AppNewsUpdate.propTypes = {
13 | title: PropTypes.string,
14 | subheader: PropTypes.string,
15 | list: PropTypes.array.isRequired,
16 | };
17 |
18 | export default function AppNewsUpdate({ title, subheader, list, ...other }) {
19 | return (
20 |
21 |
22 |
23 |
24 |
25 | {list.map((news) => (
26 |
27 | ))}
28 |
29 |
30 |
31 |
32 |
33 |
34 | }>
35 | View all
36 |
37 |
38 |
39 | );
40 | }
41 |
42 | // ----------------------------------------------------------------------
43 |
44 | NewsItem.propTypes = {
45 | news: PropTypes.shape({
46 | description: PropTypes.string,
47 | image: PropTypes.string,
48 | postedAt: PropTypes.instanceOf(Date),
49 | title: PropTypes.string,
50 | }),
51 | };
52 |
53 | function NewsItem({ news }) {
54 | const { image, title, description, postedAt } = news;
55 |
56 | return (
57 |
58 |
59 |
60 |
61 |
62 | {title}
63 |
64 |
65 |
66 | {description}
67 |
68 |
69 |
70 |
71 | {fToNow(postedAt)}
72 |
73 |
74 | );
75 | }
76 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppOrderTimeline.js:
--------------------------------------------------------------------------------
1 | // @mui
2 | import PropTypes from 'prop-types';
3 | import { Card, Typography, CardHeader, CardContent } from '@mui/material';
4 | import { Timeline, TimelineDot, TimelineItem, TimelineContent, TimelineSeparator, TimelineConnector } from '@mui/lab';
5 | // utils
6 | // import { fDateTime } from '../../../utils/formatTime';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | AppOrderTimeline.propTypes = {
11 | title: PropTypes.string,
12 | subheader: PropTypes.string,
13 | list: PropTypes.array.isRequired,
14 | };
15 | export default function AppOrderTimeline({ title, subheader, list, ...other }) {
16 | return (
17 |
18 |
19 |
20 |
27 |
28 | {list.map((item, index) => (
29 |
30 | ))}
31 |
32 |
33 |
34 | );
35 | }
36 |
37 | // ----------------------------------------------------------------------
38 |
39 | OrderItem.propTypes = {
40 | isLast: PropTypes.bool,
41 | item: PropTypes.shape({
42 | time: PropTypes.instanceOf(Date),
43 | title: PropTypes.string,
44 | type: PropTypes.string,
45 | }),
46 | };
47 |
48 | function OrderItem({ item, isLast }) {
49 | const { type, title } = item;
50 | // const { type, title, time } = item;
51 | return (
52 |
53 |
54 |
63 | {isLast ? null : }
64 |
65 |
66 |
67 | {title}
68 |
69 | {/*
70 | {fDateTime(time)}
71 | */}
72 |
73 |
74 | );
75 | }
76 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppTrafficBySite.js:
--------------------------------------------------------------------------------
1 | // @mui
2 | import PropTypes from 'prop-types';
3 | import { Box, Card, Paper, Typography, CardHeader, CardContent } from '@mui/material';
4 | // utils
5 | import { fShortenNumber } from '../../../utils/formatNumber';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | AppTrafficBySite.propTypes = {
10 | title: PropTypes.string,
11 | subheader: PropTypes.string,
12 | list: PropTypes.array.isRequired,
13 | };
14 |
15 | export default function AppTrafficBySite({ title, subheader, list, ...other }) {
16 | return (
17 |
18 |
19 |
20 |
21 |
28 | {list.map((site) => (
29 |
30 | {site.icon}
31 |
32 | {fShortenNumber(site.value)}
33 |
34 |
35 | {site.name}
36 |
37 |
38 | ))}
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppWebsiteVisits.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import merge from 'lodash/merge';
3 | import ReactApexChart from 'react-apexcharts';
4 | // @mui
5 | import { Card, CardHeader, Box } from '@mui/material';
6 | // components
7 | import { BaseOptionChart } from '../../../components/chart';
8 |
9 | // ----------------------------------------------------------------------
10 |
11 | AppWebsiteVisits.propTypes = {
12 | title: PropTypes.string,
13 | subheader: PropTypes.string,
14 | chartData: PropTypes.array.isRequired,
15 | chartLabels: PropTypes.arrayOf(PropTypes.string).isRequired,
16 | };
17 |
18 | export default function AppWebsiteVisits({ title, subheader, chartLabels, chartData, ...other }) {
19 | const chartOptions = merge(BaseOptionChart(), {
20 | plotOptions: { bar: { columnWidth: '16%' } },
21 | fill: { type: chartData.map((i) => i.fill) },
22 | labels: chartLabels,
23 | xaxis: { type: 'datetime' },
24 | tooltip: {
25 | shared: true,
26 | intersect: false,
27 | y: {
28 | formatter: (y) => {
29 | if (typeof y !== 'undefined') {
30 | return `${y.toFixed(0)} posts`;
31 | }
32 | return y;
33 | },
34 | },
35 | },
36 | });
37 |
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/AppWidgetSummary.js:
--------------------------------------------------------------------------------
1 | // @mui
2 | import PropTypes from 'prop-types';
3 | // import { alpha, styled } from '@mui/material/styles';
4 | import { Card, Typography } from '@mui/material';
5 | // utils
6 | // import { fShortenNumber } from '../../../utils/formatNumber';
7 | // components
8 | // import Iconify from '../../../components/Iconify';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | // const IconWrapperStyle = styled('div')(({ theme }) => ({
13 | // margin: 'auto',
14 | // display: 'flex',
15 | // borderRadius: '50%',
16 | // alignItems: 'center',
17 | // width: theme.spacing(8),
18 | // height: theme.spacing(8),
19 | // justifyContent: 'center',
20 | // marginBottom: theme.spacing(3),
21 | // }));
22 |
23 | // ----------------------------------------------------------------------
24 |
25 | AppWidgetSummary.propTypes = {
26 | color: PropTypes.string,
27 | icon: PropTypes.string,
28 | title: PropTypes.string.isRequired,
29 | total: PropTypes.number.isRequired,
30 | sx: PropTypes.object,
31 | };
32 |
33 | // export default function AppWidgetSummary({ title, total, icon, color = 'primary', sx, ...other }) {
34 | export default function AppWidgetSummary({ title, total, color = 'primary', sx, ...other }) {
35 | return (
36 | theme.palette[color].darker,
42 | bgcolor: (theme) => theme.palette[color].lighter,
43 | ...sx,
44 | }}
45 | {...other}
46 | >
47 | {/* theme.palette[color].dark,
50 | backgroundImage: (theme) =>
51 | `linear-gradient(135deg, ${alpha(theme.palette[color].dark, 0)} 0%, ${alpha(
52 | theme.palette[color].dark,
53 | 0.24
54 | )} 100%)`,
55 | }}
56 | >
57 |
58 | */}
59 |
60 | {/* {fShortenNumber(total)} */}
61 | {total}
62 |
63 |
64 | {title}
65 |
66 |
67 | );
68 | }
69 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/app/index.js:
--------------------------------------------------------------------------------
1 | export { default as AppTasks } from './AppTasks';
2 | export { default as AppNewsUpdate } from './AppNewsUpdate';
3 | export { default as AppCurrentVisits } from './AppCurrentVisits';
4 | export { default as AppOrderTimeline } from './AppOrderTimeline';
5 | export { default as AppTrafficBySite } from './AppTrafficBySite';
6 | export { default as AppWebsiteVisits } from './AppWebsiteVisits';
7 | export { default as AppWidgetSummary } from './AppWidgetSummary';
8 | export { default as AppCurrentSubject } from './AppCurrentSubject';
9 | export { default as AppConversionRates } from './AppConversionRates';
10 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/blog/BlogPostsSearch.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | // @mui
4 | import { styled } from '@mui/material/styles';
5 | import { Autocomplete, InputAdornment, Popper, TextField } from '@mui/material';
6 | // components
7 | import Iconify from '../../../components/Iconify';
8 |
9 | // ----------------------------------------------------------------------
10 |
11 | const PopperStyle = styled((props) => )({
12 | width: '280px !important',
13 | });
14 |
15 | // ----------------------------------------------------------------------
16 |
17 | BlogPostsSearch.propTypes = {
18 | posts: PropTypes.array.isRequired,
19 | };
20 |
21 | export default function BlogPostsSearch({ posts }) {
22 | return (
23 | post.title}
30 | isOptionEqualToValue={(option, value) => option.id === value.id}
31 | renderInput={(params) => (
32 |
39 |
40 |
41 | ),
42 | }}
43 | />
44 | )}
45 | />
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/blog/BlogPostsSort.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { MenuItem, TextField } from '@mui/material';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | BlogPostsSort.propTypes = {
8 | options: PropTypes.array,
9 | onSort: PropTypes.func
10 | };
11 |
12 | export default function BlogPostsSort({ options, onSort }) {
13 | return (
14 |
15 | {options.map((option) => (
16 |
19 | ))}
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/blog/index.js:
--------------------------------------------------------------------------------
1 | export { default as BlogPostCard } from './BlogPostCard';
2 | export { default as BlogPostsSearch } from './BlogPostsSearch';
3 | export { default as BlogPostsSort } from './BlogPostsSort';
4 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/newpost/NewPostCardSearch.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | // @mui
4 | import { styled } from '@mui/material/styles';
5 | import { Autocomplete, InputAdornment, Popper, TextField } from '@mui/material';
6 | // components
7 | import Iconify from '../../../components/Iconify';
8 |
9 | // ----------------------------------------------------------------------
10 |
11 | const PopperStyle = styled((props) => )({
12 | width: '280px !important',
13 | });
14 |
15 | // ----------------------------------------------------------------------
16 |
17 | NewPostCardSearch.propTypes = {
18 | posts: PropTypes.array.isRequired,
19 | };
20 |
21 | export default function NewPostCardSearch({ posts }) {
22 | return (
23 | post.title}
30 | isOptionEqualToValue={(option, value) => option.id === value.id}
31 | renderInput={(params) => (
32 |
39 |
40 |
41 | ),
42 | }}
43 | />
44 | )}
45 | />
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/newpost/NewPostCardSort.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { MenuItem, TextField } from '@mui/material';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | NewPostCardSort.propTypes = {
8 | options: PropTypes.array,
9 | onSort: PropTypes.func
10 | };
11 |
12 | export default function NewPostCardSort({ options, onSort }) {
13 | return (
14 |
15 | {options.map((option) => (
16 |
19 | ))}
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/newpost/index.js:
--------------------------------------------------------------------------------
1 | export { default as NewPostCard } from './NewPostCard';
2 | export { default as NewPostCardSearch } from './NewPostCardSearch';
3 | export { default as NewPostCardSort } from './NewPostCardSort';
4 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/products/ProductCard.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { Link as RouterLink } from 'react-router-dom';
3 | // material
4 | import { Box, Card, Link, Typography, Stack } from '@mui/material';
5 | import { styled } from '@mui/material/styles';
6 | // utils
7 | import { fCurrency } from '../../../utils/formatNumber';
8 | // components
9 | import Label from '../../../components/Label';
10 | import { ColorPreview } from '../../../components/color-utils';
11 |
12 | // ----------------------------------------------------------------------
13 |
14 | const ProductImgStyle = styled('img')({
15 | top: 0,
16 | width: '100%',
17 | height: '100%',
18 | objectFit: 'cover',
19 | position: 'absolute',
20 | });
21 |
22 | // ----------------------------------------------------------------------
23 |
24 | ShopProductCard.propTypes = {
25 | product: PropTypes.object,
26 | };
27 |
28 | export default function ShopProductCard({ product }) {
29 | const { name, cover, price, colors, status, priceSale } = product;
30 |
31 | return (
32 |
33 |
34 | {status && (
35 |
48 | )}
49 |
50 |
51 |
52 |
53 |
54 |
55 | {name}
56 |
57 |
58 |
59 |
60 |
61 |
62 |
70 | {priceSale && fCurrency(priceSale)}
71 |
72 |
73 | {fCurrency(price)}
74 |
75 |
76 |
77 |
78 | );
79 | }
80 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/products/ProductCartWidget.js:
--------------------------------------------------------------------------------
1 | // material
2 | import { styled } from '@mui/material/styles';
3 | import { Badge } from '@mui/material';
4 | // component
5 | import Iconify from '../../../components/Iconify';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const RootStyle = styled('div')(({ theme }) => ({
10 | zIndex: 999,
11 | right: 0,
12 | display: 'flex',
13 | cursor: 'pointer',
14 | position: 'fixed',
15 | alignItems: 'center',
16 | top: theme.spacing(16),
17 | height: theme.spacing(5),
18 | paddingLeft: theme.spacing(2),
19 | paddingRight: theme.spacing(2),
20 | paddingTop: theme.spacing(1.25),
21 | boxShadow: theme.customShadows.z20,
22 | color: theme.palette.text.primary,
23 | backgroundColor: theme.palette.background.paper,
24 | borderTopLeftRadius: Number(theme.shape.borderRadius) * 2,
25 | borderBottomLeftRadius: Number(theme.shape.borderRadius) * 2,
26 | transition: theme.transitions.create('opacity'),
27 | '&:hover': { opacity: 0.72 }
28 | }));
29 |
30 | // ----------------------------------------------------------------------
31 |
32 | export default function CartWidget() {
33 | return (
34 |
35 |
36 |
37 |
38 |
39 | );
40 | }
41 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/products/ProductList.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { Grid } from '@mui/material';
4 | import ShopProductCard from './ProductCard';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | ProductList.propTypes = {
9 | products: PropTypes.array.isRequired
10 | };
11 |
12 | export default function ProductList({ products, ...other }) {
13 | return (
14 |
15 | {products.map((product) => (
16 |
17 |
18 |
19 | ))}
20 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/products/ProductSort.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | // material
3 | import { Menu, Button, MenuItem, Typography } from '@mui/material';
4 | // component
5 | import Iconify from '../../../components/Iconify';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | const SORT_BY_OPTIONS = [
10 | { value: 'featured', label: 'Featured' },
11 | { value: 'newest', label: 'Newest' },
12 | { value: 'priceDesc', label: 'Price: High-Low' },
13 | { value: 'priceAsc', label: 'Price: Low-High' }
14 | ];
15 |
16 | export default function ShopProductSort() {
17 | const [open, setOpen] = useState(null);
18 |
19 | const handleOpen = (event) => {
20 | setOpen(event.currentTarget);
21 | };
22 |
23 | const handleClose = () => {
24 | setOpen(null);
25 | };
26 |
27 | return (
28 | <>
29 | }
34 | >
35 | Sort By:
36 |
37 | Newest
38 |
39 |
40 |
59 | >
60 | );
61 | }
62 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/products/index.js:
--------------------------------------------------------------------------------
1 | export { default as ProductCard } from './ProductCard';
2 | export { default as ProductList } from './ProductList';
3 | export { default as ProductSort } from './ProductSort';
4 | export { default as ProductCartWidget } from './ProductCartWidget';
5 | export { default as ProductFilterSidebar } from './ProductFilterSidebar';
6 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/user/UserListHead.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | // material
3 | import { Box, Checkbox, TableRow, TableCell, TableHead, TableSortLabel } from '@mui/material';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | const visuallyHidden = {
8 | border: 0,
9 | margin: -1,
10 | padding: 0,
11 | width: '1px',
12 | height: '1px',
13 | overflow: 'hidden',
14 | position: 'absolute',
15 | whiteSpace: 'nowrap',
16 | clip: 'rect(0 0 0 0)',
17 | };
18 |
19 | UserListHead.propTypes = {
20 | order: PropTypes.oneOf(['asc', 'desc']),
21 | orderBy: PropTypes.string,
22 | rowCount: PropTypes.number,
23 | headLabel: PropTypes.array,
24 | numSelected: PropTypes.number,
25 | onRequestSort: PropTypes.func,
26 | onSelectAllClick: PropTypes.func,
27 | };
28 |
29 | export default function UserListHead({
30 | order,
31 | orderBy,
32 | rowCount,
33 | headLabel,
34 | numSelected,
35 | onRequestSort,
36 | onSelectAllClick,
37 | }) {
38 | const createSortHandler = (property) => (event) => {
39 | onRequestSort(event, property);
40 | };
41 |
42 | return (
43 |
44 |
45 |
46 | 0 && numSelected < rowCount}
48 | checked={rowCount > 0 && numSelected === rowCount}
49 | onChange={onSelectAllClick}
50 | />
51 |
52 | {headLabel.map((headCell) => (
53 |
58 |
64 | {headCell.label}
65 | {orderBy === headCell.id ? (
66 | {order === 'desc' ? 'sorted descending' : 'sorted ascending'}
67 | ) : null}
68 |
69 |
70 | ))}
71 |
72 |
73 | );
74 | }
75 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/user/UserMoreMenu.js:
--------------------------------------------------------------------------------
1 | import { useRef, useState } from 'react';
2 | import { Link as RouterLink } from 'react-router-dom';
3 | // material
4 | import { Menu, MenuItem, IconButton, ListItemIcon, ListItemText } from '@mui/material';
5 | // component
6 | import Iconify from '../../../components/Iconify';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function UserMoreMenu() {
11 | const ref = useRef(null);
12 | const [isOpen, setIsOpen] = useState(false);
13 |
14 | return (
15 | <>
16 | setIsOpen(true)}>
17 |
18 |
19 |
20 |
44 | >
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/@dashboard/user/index.js:
--------------------------------------------------------------------------------
1 | export { default as UserListHead } from './UserListHead';
2 | export { default as UserListToolbar } from './UserListToolbar';
3 | export { default as UserMoreMenu } from './UserMoreMenu';
4 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/auth/AuthService.js:
--------------------------------------------------------------------------------
1 | export function getUser() {
2 | const user = sessionStorage.getItem("user");
3 | if (user === "undefined" || !user) {
4 | return null;
5 | }
6 | return JSON.parse(user);
7 | }
8 | export function getToken() {
9 | return sessionStorage.getItem("token");
10 | }
11 | export function setUserSession(user, token) {
12 | sessionStorage.setItem("user", JSON.stringify(user));
13 | sessionStorage.setItem("token", token);
14 | }
15 | export function resetUserSession() {
16 | sessionStorage.removeItem("user");
17 | sessionStorage.removeItem("token");
18 | }
19 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/auth/AuthSocial.js:
--------------------------------------------------------------------------------
1 | // material
2 | import { Stack, Button, Divider, Typography } from '@mui/material';
3 | // component
4 | import Iconify from '../../components/Iconify';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function AuthSocial() {
9 | return (
10 | <>
11 |
12 |
15 |
16 |
19 |
20 |
23 |
24 |
25 |
26 |
27 | OR
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/auth/login/index.js:
--------------------------------------------------------------------------------
1 | export { default as LoginForm } from './LoginForm';
2 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/auth/register/index.js:
--------------------------------------------------------------------------------
1 | export { default as RegisterForm } from './RegisterForm';
2 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/sections/auth/resetpassword/index.js:
--------------------------------------------------------------------------------
1 | export { default as ResetPasswordForm } from './ResetPasswordForm';
2 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/index.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { useMemo } from 'react';
3 | // material
4 | import { CssBaseline } from '@mui/material';
5 | import { ThemeProvider as MUIThemeProvider, createTheme, StyledEngineProvider } from '@mui/material/styles';
6 | //
7 | import palette from './palette';
8 | import typography from './typography';
9 | import componentsOverride from './overrides';
10 | import shadows, { customShadows } from './shadows';
11 |
12 | // ----------------------------------------------------------------------
13 |
14 | ThemeProvider.propTypes = {
15 | children: PropTypes.node,
16 | };
17 |
18 | export default function ThemeProvider({ children }) {
19 | const themeOptions = useMemo(
20 | () => ({
21 | palette,
22 | shape: { borderRadius: 8 },
23 | typography,
24 | shadows,
25 | customShadows,
26 | }),
27 | []
28 | );
29 |
30 | const theme = createTheme(themeOptions);
31 | theme.components = componentsOverride(theme);
32 |
33 | return (
34 |
35 |
36 |
37 | {children}
38 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Autocomplete.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Autocomplete(theme) {
4 | return {
5 | MuiAutocomplete: {
6 | styleOverrides: {
7 | paper: {
8 | boxShadow: theme.customShadows.z20
9 | }
10 | }
11 | }
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Backdrop.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export default function Backdrop(theme) {
6 | const varLow = alpha(theme.palette.grey[900], 0.48);
7 | const varHigh = alpha(theme.palette.grey[900], 1);
8 |
9 | return {
10 | MuiBackdrop: {
11 | styleOverrides: {
12 | root: {
13 | background: [
14 | `rgb(22,28,36)`,
15 | `-moz-linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`,
16 | `-webkit-linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`,
17 | `linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`
18 | ],
19 | '&.MuiBackdrop-invisible': {
20 | background: 'transparent'
21 | }
22 | }
23 | }
24 | }
25 | };
26 | }
27 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Button.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Button(theme) {
4 | return {
5 | MuiButton: {
6 | styleOverrides: {
7 | root: {
8 | '&:hover': {
9 | boxShadow: 'none'
10 | }
11 | },
12 | sizeLarge: {
13 | height: 48
14 | },
15 | containedInherit: {
16 | color: theme.palette.grey[800],
17 | boxShadow: theme.customShadows.z8,
18 | '&:hover': {
19 | backgroundColor: theme.palette.grey[400]
20 | }
21 | },
22 | containedPrimary: {
23 | boxShadow: theme.customShadows.primary
24 | },
25 | containedSecondary: {
26 | boxShadow: theme.customShadows.secondary
27 | },
28 | outlinedInherit: {
29 | border: `1px solid ${theme.palette.grey[500_32]}`,
30 | '&:hover': {
31 | backgroundColor: theme.palette.action.hover
32 | }
33 | },
34 | textInherit: {
35 | '&:hover': {
36 | backgroundColor: theme.palette.action.hover
37 | }
38 | }
39 | }
40 | }
41 | };
42 | }
43 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Card.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Card(theme) {
4 | return {
5 | MuiCard: {
6 | styleOverrides: {
7 | root: {
8 | boxShadow: theme.shadows[2],
9 | borderRadius: Number(theme.shape.borderRadius) * 2,
10 | position: 'relative',
11 | zIndex: 0, // Fix Safari overflow: hidden with border radius
12 | },
13 | },
14 | },
15 | MuiCardHeader: {
16 | defaultProps: {
17 | titleTypographyProps: { variant: 'h6' },
18 | subheaderTypographyProps: { variant: 'body2' },
19 | },
20 | styleOverrides: {
21 | root: {
22 | padding: theme.spacing(3, 3, 0),
23 | },
24 | },
25 | },
26 | MuiCardContent: {
27 | styleOverrides: {
28 | root: {
29 | padding: theme.spacing(3),
30 | },
31 | },
32 | },
33 | };
34 | }
35 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/CssBaseline.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function CssBaseline() {
4 | return {
5 | MuiCssBaseline: {
6 | styleOverrides: {
7 | '*': {
8 | margin: 0,
9 | padding: 0,
10 | boxSizing: 'border-box',
11 | },
12 | html: {
13 | width: '100%',
14 | height: '100%',
15 | WebkitOverflowScrolling: 'touch',
16 | },
17 | body: {
18 | width: '100%',
19 | height: '100%',
20 | },
21 | '#root': {
22 | width: '100%',
23 | height: '100%',
24 | },
25 | input: {
26 | '&[type=number]': {
27 | MozAppearance: 'textfield',
28 | '&::-webkit-outer-spin-button': {
29 | margin: 0,
30 | WebkitAppearance: 'none',
31 | },
32 | '&::-webkit-inner-spin-button': {
33 | margin: 0,
34 | WebkitAppearance: 'none',
35 | },
36 | },
37 | },
38 | img: {
39 | display: 'block',
40 | maxWidth: '100%',
41 | },
42 | },
43 | },
44 | };
45 | }
46 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/IconButton.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function IconButton(theme) {
4 | return {
5 | MuiIconButton: {
6 | variants: [
7 | {
8 | props: { color: 'default' },
9 | style: {
10 | '&:hover': { backgroundColor: theme.palette.action.hover }
11 | }
12 | },
13 | {
14 | props: { color: 'inherit' },
15 | style: {
16 | '&:hover': { backgroundColor: theme.palette.action.hover }
17 | }
18 | }
19 | ],
20 |
21 | styleOverrides: {
22 | root: {}
23 | }
24 | }
25 | };
26 | }
27 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Input.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Input(theme) {
4 | return {
5 | MuiInputBase: {
6 | styleOverrides: {
7 | root: {
8 | '&.Mui-disabled': {
9 | '& svg': { color: theme.palette.text.disabled }
10 | }
11 | },
12 | input: {
13 | '&::placeholder': {
14 | opacity: 1,
15 | color: theme.palette.text.disabled
16 | }
17 | }
18 | }
19 | },
20 | MuiInput: {
21 | styleOverrides: {
22 | underline: {
23 | '&:before': {
24 | borderBottomColor: theme.palette.grey[500_56]
25 | }
26 | }
27 | }
28 | },
29 | MuiFilledInput: {
30 | styleOverrides: {
31 | root: {
32 | backgroundColor: theme.palette.grey[500_12],
33 | '&:hover': {
34 | backgroundColor: theme.palette.grey[500_16]
35 | },
36 | '&.Mui-focused': {
37 | backgroundColor: theme.palette.action.focus
38 | },
39 | '&.Mui-disabled': {
40 | backgroundColor: theme.palette.action.disabledBackground
41 | }
42 | },
43 | underline: {
44 | '&:before': {
45 | borderBottomColor: theme.palette.grey[500_56]
46 | }
47 | }
48 | }
49 | },
50 | MuiOutlinedInput: {
51 | styleOverrides: {
52 | root: {
53 | '& .MuiOutlinedInput-notchedOutline': {
54 | borderColor: theme.palette.grey[500_32]
55 | },
56 | '&.Mui-disabled': {
57 | '& .MuiOutlinedInput-notchedOutline': {
58 | borderColor: theme.palette.action.disabledBackground
59 | }
60 | }
61 | }
62 | }
63 | }
64 | };
65 | }
66 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Lists.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Lists(theme) {
4 | return {
5 | MuiListItemIcon: {
6 | styleOverrides: {
7 | root: {
8 | color: 'inherit',
9 | minWidth: 'auto',
10 | marginRight: theme.spacing(2)
11 | }
12 | }
13 | },
14 | MuiListItemAvatar: {
15 | styleOverrides: {
16 | root: {
17 | minWidth: 'auto',
18 | marginRight: theme.spacing(2)
19 | }
20 | }
21 | },
22 | MuiListItemText: {
23 | styleOverrides: {
24 | root: {
25 | marginTop: 0,
26 | marginBottom: 0
27 | },
28 | multiline: {
29 | marginTop: 0,
30 | marginBottom: 0
31 | }
32 | }
33 | }
34 | };
35 | }
36 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Paper.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Paper() {
4 | return {
5 | MuiPaper: {
6 | defaultProps: {
7 | elevation: 0
8 | },
9 |
10 | styleOverrides: {
11 | root: {
12 | backgroundImage: 'none'
13 | }
14 | }
15 | }
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Tooltip.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Tooltip(theme) {
4 | return {
5 | MuiTooltip: {
6 | styleOverrides: {
7 | tooltip: {
8 | backgroundColor: theme.palette.grey[800]
9 | },
10 | arrow: {
11 | color: theme.palette.grey[800]
12 | }
13 | }
14 | }
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/Typography.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export default function Typography(theme) {
4 | return {
5 | MuiTypography: {
6 | styleOverrides: {
7 | paragraph: {
8 | marginBottom: theme.spacing(2)
9 | },
10 | gutterBottom: {
11 | marginBottom: theme.spacing(1)
12 | }
13 | }
14 | }
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/theme/overrides/index.js:
--------------------------------------------------------------------------------
1 | //
2 |
3 | import Card from './Card';
4 | import Paper from './Paper';
5 | import Input from './Input';
6 | import Button from './Button';
7 | import Tooltip from './Tooltip';
8 | import Backdrop from './Backdrop';
9 | import Typography from './Typography';
10 | import CssBaseline from './CssBaseline';
11 | import Autocomplete from './Autocomplete';
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | export default function ComponentsOverrides(theme) {
16 | return Object.assign(
17 | Card(theme),
18 | Input(theme),
19 | Paper(theme),
20 | Button(theme),
21 | Tooltip(theme),
22 | Backdrop(theme),
23 | Typography(theme),
24 | CssBaseline(theme),
25 | Autocomplete(theme)
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/utils/formatNumber.js:
--------------------------------------------------------------------------------
1 | import { replace } from 'lodash';
2 | import numeral from 'numeral';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function fCurrency(number) {
7 | return numeral(number).format(Number.isInteger(number) ? '$0,0' : '$0,0.00');
8 | }
9 |
10 | export function fPercent(number) {
11 | return numeral(number / 100).format('0.0%');
12 | }
13 |
14 | export function fNumber(number) {
15 | return numeral(number).format();
16 | }
17 |
18 | export function fShortenNumber(number) {
19 | return replace(numeral(number).format('0.00a'), '.00', '');
20 | }
21 |
22 | export function fData(number) {
23 | return numeral(number).format('0.0 b');
24 | }
25 |
--------------------------------------------------------------------------------
/modules/module-1/src/src/utils/formatTime.js:
--------------------------------------------------------------------------------
1 | import { format, formatDistanceToNow } from 'date-fns';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function fDate(date) {
6 | return format(new Date(date), 'dd MMMM yyyy');
7 | }
8 |
9 | export function fDateTime(date) {
10 | return format(new Date(date), 'dd MMM yyyy HH:mm');
11 | }
12 |
13 | export function fDateTimeSuffix(date) {
14 | return format(new Date(date), 'dd/MM/yyyy hh:mm p');
15 | }
16 |
17 | export function fToNow(date) {
18 | return formatDistanceToNow(new Date(date), {
19 | addSuffix: true,
20 | });
21 | }
22 |
--------------------------------------------------------------------------------
/modules/module-2/resources/ecs/task_definition.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "portMappings": [
4 | {
5 | "hostPort": 80,
6 | "protocol": "tcp",
7 | "containerPort": 80
8 | }
9 | ],
10 | "environment": [
11 | {
12 | "name": "RDS_ENDPOINT",
13 | "value": "RDS_ENDPOINT_VALUE"
14 | }
15 | ],
16 | "linuxParameters": {
17 | "capabilities": {
18 | "add": [
19 | "SYS_PTRACE"
20 | ]
21 | },
22 | "initProcessEnabled": true
23 | },
24 | "cpu": 0,
25 | "image": "public.ecr.aws/p3q0v3y2/aws-goat-m2:latest",
26 | "name": "aws-goat-m2",
27 | "mountPoints": [
28 | {
29 | "sourceVolume": "modules",
30 | "containerPath": "/lib/modules"
31 | },
32 | {
33 | "sourceVolume": "kernels",
34 | "containerPath": "/usr/src/kernels"
35 | }
36 | ]
37 | }
38 | ]
39 |
--------------------------------------------------------------------------------
/modules/module-2/resources/ecs/user_data.tpl:
--------------------------------------------------------------------------------
1 | Content-Type: multipart/mixed; boundary="==BOUNDARY=="
2 | MIME-Version: 1.0
3 |
4 | --==BOUNDARY==
5 | Content-Type: text/cloud-boothook; charset="us-ascii"
6 |
7 | # Set iptables configuration
8 |
9 | yum install iptables-services -y
10 |
11 | cat < /etc/sysconfig/iptables
12 | *filter
13 | :DOCKER-USER - [0:0]
14 | -A DOCKER-USER -d 169.254.169.254/32 -j DROP
15 | COMMIT
16 | EOF
17 |
18 | systemctl enable iptables && systemctl start iptables
19 |
20 | --==BOUNDARY==
21 | Content-Type: text/x-shellscript; charset="us-ascii"
22 |
23 | #!/bin/bash
24 |
25 | # Update all packages
26 | sudo yum install kernel-devel-$(uname -r) -y
27 |
28 | # Set any ECS agent configuration options
29 | echo "ECS_CLUSTER=ecs-lab-cluster" >> /etc/ecs/ecs.config
30 |
31 | python3 -m http.server 31452 &> /dev/null & pid=$!
32 | --==BOUNDARY==--
--------------------------------------------------------------------------------
/modules/module-2/src/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM php:8.0-apache
2 |
3 | RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
4 | RUN apt-get update && apt-get upgrade -y
5 | RUN apt-get install mariadb-client-10.5 -y
6 | RUN apt-get install -y python3 sudo vim libcap2-bin fdisk net-tools netcat
7 |
8 | COPY ./src /var/www/html
9 | COPY ./script /usr/local/bin
10 |
11 | RUN chmod +x /usr/local/bin/startup.sh
12 |
13 | RUN chown -R www-data /var/www/html/documents
14 | RUN echo "www-data ALL=NOPASSWD:/usr/bin/vim /var/www/html/documents" >> /etc/sudoers
15 |
16 | RUN chmod 774 -R /var/www/html/documents
17 |
18 | CMD ["/usr/local/bin/startup.sh"]
19 | EXPOSE 80
--------------------------------------------------------------------------------
/modules/module-2/src/README.md:
--------------------------------------------------------------------------------
1 | # HR Application Setup and installations
2 |
3 | ## Steps to build application code
4 |
5 |
6 | 1. Make changes to the source code in ``src/``.
7 |
8 | 2. Create a Public Repository in AWS ECR, and follow the push commands to build and push the updated image.
9 |
10 | 3. Retrieve the image URI from the ECR repository on AWS console.
11 |
12 | 4. Replace the image value, in ``../resources/ecs/task_definition.json`` with the image uri.
13 |
14 | 5. Run the terraform apply action.
--------------------------------------------------------------------------------
/modules/module-2/src/script/startup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | mysql -h $RDS_ENDPOINT -P 3306 -u root -pT2kVB3zgeN3YbrKS -e "source /var/www/html/dump.sql" > /dev/null 2>&1
3 | sed -i "s,RDS_ENDPOINT_VALUE,$RDS_ENDPOINT,g" /var/www/html/config.inc
4 | exec apache2-foreground
--------------------------------------------------------------------------------
/modules/module-2/src/src/CSS/loginstyle.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | font-family: 'Poppins', sans-serif;
8 | }
9 |
10 | body {
11 | width: 100%;
12 | min-height: 100vh;
13 | background-color: #343a40;
14 | background-position: center;
15 | background-size: cover;
16 | display: flex;
17 | justify-content: center;
18 | align-items: center;
19 | }
20 |
21 | .container {
22 | width: 400px;
23 | min-height: 400px;
24 | background: #FFF;
25 | border-radius: 3px;
26 | box-shadow: 0 0 5px rgba(0,0,0,.3);
27 | padding: 40px 30px;
28 | }
29 |
30 | .container .login-text {
31 | color: #111;
32 | font-weight: 500;
33 | font-size: 1.1rem;
34 | text-align: center;
35 | margin-bottom: 20px;
36 | display: block;
37 | text-transform: capitalize;
38 | }
39 |
40 |
41 | .container .login-email .input-group {
42 | width: 100%;
43 | height: 50px;
44 | margin-bottom: 25px;
45 | }
46 |
47 | .container .login-email .input-group input {
48 | width: 100%;
49 | height: 95%;
50 | border: 2px solid #e7e7e7;
51 | padding: 15px 20px;
52 | font-size: 1rem;
53 | border-radius: 5px;
54 | background: transparent;
55 | outline: none;
56 | transition: .3s;
57 | }
58 |
59 | .container .login-email .input-group input:focus, .container .login-email .input-group input:valid {
60 | border-color: rgb(0, 48, 99);
61 | }
62 |
63 | .container .login-email .input-group .btn {
64 | display: block;
65 | width: 100%;
66 | height: 50px;
67 | padding: 15px 20px;
68 | text-align: center;
69 | padding-top: 12px;
70 | border: none;
71 | background: rgb(0, 48, 99);
72 | outline: none;
73 | border-radius: 5px;
74 | font-size: 1.1rem;
75 | color: #FFF;
76 | cursor: pointer;
77 | transition: .3s;
78 | }
79 |
80 | .container .login-email .input-group .btn:hover {
81 |
82 | background: rgb(36, 119, 149);
83 | }
84 |
85 |
86 | @media (max-width: 430px) {
87 | .container {
88 | width: 300px;
89 | }
90 |
91 | }
--------------------------------------------------------------------------------
/modules/module-2/src/src/admin/admin-complaint.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/admin/leave-approve.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/admin/reimbursment-approve.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/admin/uploads/costs.csv:
--------------------------------------------------------------------------------
1 | Service,Relational Database Service($),EC2-ELB($),Key Management Service($),EC2-Instances($),CloudTrail($),S3($),EC2-Other($),Lambda($),Glue($),DynamoDB($),Elastic Container Registry Public($),CloudWatch($),Total cost ($)
2 | Service Total,0.202743406,0.022632495,0.014784946,0.0116,0.00982,0.003955337,0.003225852,0.000001136,0,0,0,0,0.268763172
3 | 03-10-2022,0.202743406,0.022632495,0.014784946,0.0116,0.00982,0.003955337,0.003225852,0.000001136,0,0,0,0,2.89822162
4 | ,,,,,,,,,,,,,
5 | ,,,,,,,,,,,,,
6 | ,,,,,,,,,,,,,
7 | ,,,,,,,,,,,,,
8 | ,,,,,,,,,,,,,
9 | ,,,,,,,,,,,,,
10 | ,,,,,,,,,,,,,
11 | ,,,,,,,,,,,,,
12 | ,,,,,,,,,,,,,
13 | ,,,,,,,,,,,,,
14 | ,,,,,,,,,,,,,
15 | ,,,,0.250021753,,,,,,,,,
16 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/config.inc:
--------------------------------------------------------------------------------
1 | alert('Connection Failed.')");
12 | }
13 |
14 | ?>
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/payslips/38343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/payslips/38343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/payslips/48343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/payslips/48343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/payslips/58343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/payslips/58343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/payslips/68343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/payslips/68343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/reimbursments/18343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/reimbursments/18343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/reimbursments/78343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/reimbursments/78343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/reimbursments/88343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/reimbursments/88343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/documents/reimbursments/98343834353753616c6172792d506179736c69702e706466.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/documents/reimbursments/98343834353753616c6172792d506179736c69702e706466.pdf
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/AWScloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/AWScloud.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/homepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/homepage.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/ine-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/ine-logo.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/logo-login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/logo-login.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/logo.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/pic.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/shadow.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/wave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/wave.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/wave2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/wave2.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/images/wave3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ine-labs/AWSGoat/b24869ad455ed8d1393d00ecdc15ee638d1c1332/modules/module-2/src/src/images/wave3.png
--------------------------------------------------------------------------------
/modules/module-2/src/src/logout.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/superadmin/adduser.php:
--------------------------------------------------------------------------------
1 | query($query3);
31 |
32 | $id = $result->fetch_array()[0] ?? '';
33 |
34 |
35 | $query2 = "INSERT INTO `users_info`(
36 | `id`,
37 | `first_name`,
38 | `last_name`,
39 | `email`,
40 | `address`,
41 | `ssn`,
42 | `bank_account`,
43 | `phone`,
44 | `isadmin`
45 | )
46 | VALUES(
47 | '$id',
48 | '$firstname',
49 | '$lastname',
50 | '$email',
51 | '$address',
52 | '$ssn',
53 | '$bank_account',
54 | '$phone',
55 | '$isadmin'
56 | );";
57 |
58 | mysqli_query($conn, $query2);
59 | header('Location: user-settings.php');
60 | ?>
--------------------------------------------------------------------------------
/modules/module-2/src/src/superadmin/deleteuser.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/superadmin/leave-approve-super.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/superadmin/reimbursment-approve-super.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/superadmin/updateuser.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/modules/module-2/src/src/user/complaint-apply.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------