Skip to content

Commit 54f012c

Browse files
jzheauxjoemoorefelipeg48cschuyle
authored andcommitted
Initial commit: Course baseline
Co-authored-by: Joe Moore <[email protected]> Co-authored-by: Felipe <[email protected]> Co-authored-by: Carlton Schuyler: <[email protected]>
0 parents  commit 54f012c

File tree

253 files changed

+7955
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

253 files changed

+7955
-0
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
name: Bug report
3+
about: Create a bug report to help us improve
4+
title: "BUG: "
5+
labels: bug
6+
assignees: ""
7+
---
8+
9+
**Current Behavior / Description**
10+
A clear and concise description of what the bug is.
11+
12+
**Expected behavior**
13+
A clear and concise description of what you expected to happen.
14+
15+
**To Reproduce**
16+
Steps to reproduce the behavior:
17+
18+
1. Go to '...'
19+
2. Click on '....'
20+
3. Scroll down to '....'
21+
4. See error
22+
23+
**Screenshots**
24+
If applicable, add screenshots to help explain your problem.
25+
26+
--- OPTIONAL BELOW ---
27+
**Desktop (please complete the following information):**
28+
29+
- OS: [e.g. iOS]
30+
- Browser [e.g. chrome, safari]
31+
- Version [e.g. 22]
32+
33+
**Smartphone (please complete the following information):**
34+
35+
- Device: [e.g. iPhone6]
36+
- OS: [e.g. iOS8.1]
37+
- Browser [e.g. stock browser, safari]
38+
- Version [e.g. 22]
39+
40+
**Additional context**
41+
Add any other context about the problem here.

.github/ISSUE_TEMPLATE/chore.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
name: Chore
3+
about: Default chore template
4+
title: CHORE
5+
labels: chore
6+
assignees: ""
7+
---
8+
9+
### Chore Description
10+
11+
### Definition of Done
12+
13+
### Notes

.github/ISSUE_TEMPLATE/user-story.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: User Story
3+
about: User story template
4+
title: ""
5+
labels: ""
6+
assignees: ""
7+
---
8+
9+
## User Story
10+
11+
**As** Jude
12+
**I want**
13+
**So that**
14+
15+
## Acceptance Criteria
16+
17+
**_Given_**
18+
**_When_**
19+
**_Then_**
20+
21+
### Notes
22+
23+
-
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: "Deploy to Production"
2+
run-name: Deploy Content and Metadata from ${{ github.ref_name }} to Production
3+
4+
on:
5+
# push:
6+
# tags:
7+
# - "v[0-9]+.[0-9]+.[0-9]+"
8+
workflow_dispatch:
9+
jobs:
10+
build:
11+
name: Deploy to Production
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v3
16+
with:
17+
fetch-depth: 0
18+
- name: Deploy content
19+
env:
20+
PENGUINCTL_APIURL: ${{ secrets.PENGUINCTL_APIURL_PROD }}
21+
PENGUINCTL_APITOKEN: ${{ secrets.PENGUINCTL_APITOKEN_PROD }}
22+
run: |
23+
make deploy
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: "Deploy to Staging"
2+
run-name: Deploy Content and Metadata from ${{ github.ref_name }} to Staging
3+
4+
on:
5+
# push:
6+
# branches:
7+
# - main
8+
workflow_dispatch:
9+
10+
jobs:
11+
build:
12+
name: Deploy to Staging
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v3
17+
with:
18+
fetch-depth: 0
19+
- name: Deploy content
20+
env:
21+
PENGUINCTL_APIURL: ${{ secrets.PENGUINCTL_APIURL_STAGING }}
22+
PENGUINCTL_APITOKEN: ${{ secrets.PENGUINCTL_APITOKEN_STAGING }}
23+
run: |
24+
make deploy
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Publish Workshops
2+
run-name: Publish Workshop Content and Configuration from ${{ github.ref_name }} to GHCR
3+
4+
on:
5+
push:
6+
branches:
7+
- main
8+
paths:
9+
- ".github/workflows/**"
10+
- "workshops/**"
11+
tags:
12+
- "v[0-9]+.[0-9]+.[0-9]+"
13+
workflow_dispatch:
14+
15+
jobs:
16+
publish-workshop:
17+
runs-on: ubuntu-latest
18+
19+
steps:
20+
- name: Publish Workshops
21+
uses: spring-academy/spring-academy-github-actions/publish-workshop@v6
22+
with:
23+
token: ${{secrets.GHCR_TOKEN}}

.gitignore

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# IDEs
2+
.idea
3+
4+
##
5+
*.swp
6+
.DS_Store
7+
.bash_history
8+
.cache
9+
.config
10+
.docker
11+
.envrc
12+
.gitconfig
13+
.kube
14+
.lesshst
15+
.local
16+
.ssh
17+
.theia
18+
.webdav
19+
.yarn
20+
.envrc
21+
.vscode

01-lesson-introduction/content.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
This course is designed to help you build your applications with the secure foundation of Spring Security, specifically in the context of Spring Boot.
2+
3+
Our Spring experts guide you through building and running a fully functional REST API that manages cash cards for an imaginary company Family Cash Cards. You can think of the cash card being very similar to a gift card that many of us send and receive.
4+
5+
## What You Will Learn
6+
7+
By the end of this course, you'll learn to:
8+
9+
- Understand the basics of authentication, authorization, and web application defense
10+
- Identify and evaluate authentication and authorization options
11+
- Secure a REST API using Spring Security's OAuth 2.0 Resource Server support
12+
- Secure Spring MVC endpoints and Spring Data queries using Spring Security primitives
13+
- Test your application with security enabled and accounted for
14+
15+
## What You Will Build
16+
17+
In this course's labs, you'll create a REST API that manages cash cards for an imaginary cash company, Family Cash Cards. The application stores cash cards in an in-memory database that can be administered through a GET endpoint and one POST. This application is based on Spring Boot and uses Spring Security to authenticate the user, authorize each request, and provide defense against common web application vulnerabilities like CSRF.
18+
19+
## Hands-On Labs
20+
21+
The labs in this course provide an interactive terminal and editor, so you don't need any specific tools installed on your own machine.
22+
23+
## Prerequisites
24+
25+
In order to get the most out of this course, you should have:
26+
27+
- Experience with Java
28+
- Familiarity with Spring Framework and Spring Boot
29+
- Basic knowledge of HTTP
30+
31+
## Project-Based
32+
33+
Rather than structuring this course like formal documentation or a textbook, we've approached it as a real-world development project. So what does this mean?
34+
35+
Each lesson is designed to explain a _specific_ Spring Security concept. The lessons have companion labs representing a task in the development process that you may encounter during a real-world project.
36+
37+
Additionally, rather than covering each concept in depth, we'll only cover enough details to complete each task, as well as help you generally understand what's going on "under the hood" in the application. We'll also explain _why_ we're making the choices we do as well as what _other options_ and _trade-offs_ exist.

01-lesson-introduction/description.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Learn what you will learn.

01-lesson-introduction/lesson.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"id": "spring-academy-secure-rest-api-oauth2-introduction",
3+
"slug": "introduction",
4+
"title": "Introduction",
5+
"status": "live",
6+
"type": "article",
7+
"duration": 300,
8+
"entitlements": [],
9+
"settings": {
10+
"manualCompletion": true
11+
}
12+
}

0 commit comments

Comments
 (0)