├── .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 | ![](https://user-images.githubusercontent.com/65826354/179527017-56acbc0d-4fc1-4d86-bee9-e96efaf6f48c.png) 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 | {LANGS[0].label} 57 | 58 | 59 | 70 | 71 | {LANGS.map((option) => ( 72 | handleClose()}> 73 | 74 | 75 | {option.label} 76 | 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 | 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 | 17 | {option.label} 18 | 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 | 17 | {option.label} 18 | 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 | 40 | 48 | {SORT_BY_OPTIONS.map((option) => ( 49 | 55 | {option.label} 56 | 57 | ))} 58 | 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 | setIsOpen(false)} 24 | PaperProps={{ 25 | sx: { width: 200, maxWidth: '100%' }, 26 | }} 27 | anchorOrigin={{ vertical: 'top', horizontal: 'right' }} 28 | transformOrigin={{ vertical: 'top', horizontal: 'right' }} 29 | > 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 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 | --------------------------------------------------------------------------------