Compare commits
424 Commits
Author | SHA1 | Date | |
---|---|---|---|
bd5fe360c7 | |||
015216df5f | |||
60fc807d36 | |||
636a2bdaf5 | |||
816a694c84 | |||
06a55ab278 | |||
0136c1070f | |||
dce5eeb797 | |||
ca886b4818 | |||
ff3a2983e2 | |||
6f0b88f9b6 | |||
9d9fb092be | |||
4bc53a6666 | |||
61d5fb9ece | |||
6eafa45e4c | |||
ac6de9d788 | |||
f6855bf6a5 | |||
f7b4af5023 | |||
e720eec5f9 | |||
a43a6125e8 | |||
d3e2164716 | |||
cbf2e153d9 | |||
0795ff0fc5 | |||
d7cdfeec2a | |||
491fe2d84d | |||
a509e8e24e | |||
e50986a098 | |||
61dac201f0 | |||
c5629be618 | |||
df8c83fe74 | |||
6d3813c2ce | |||
ecfa0197af | |||
8467ae8a0b | |||
5243fa2bf2 | |||
36f99dede8 | |||
5dbe2eaf19 | |||
1b49b2fd3b | |||
b49c61636b | |||
8269207d6b | |||
de2f568229 | |||
9f6cf39ff2 | |||
19d54dbe95 | |||
0f38519ecf | |||
4c95c9ec6a | |||
f6c7a54931 | |||
f1012c85d6 | |||
ecfc321f14 | |||
73b8c431fc | |||
b68adfbc7c | |||
1a2855afcd | |||
693771220c | |||
075b1ab30a | |||
390ff39f19 | |||
3ec34b0df5 | |||
eb4c8388f8 | |||
ae081ce319 | |||
bd398e4c09 | |||
c9d1653d4f | |||
77c91b8df8 | |||
f9b810c5ee | |||
dc0fc09679 | |||
a0173fd8f8 | |||
58e7e9d4ef | |||
c7a41d1b17 | |||
edd9aa36c2 | |||
27fe1850de | |||
5c2bbd1227 | |||
683b629663 | |||
04908a81e7 | |||
701de68ef2 | |||
81ed738493 | |||
c03d153978 | |||
6ab04db2ee | |||
a108a937b5 | |||
6d5ea57606 | |||
79fd88eeb6 | |||
64b10c1a59 | |||
6398d31c14 | |||
716a7dd9ea | |||
323daae578 | |||
bdbf66c8e1 | |||
174a59c35a | |||
a08e515f6d | |||
f766edcfcb | |||
3901814363 | |||
59bfd7c6d4 | |||
11776e1d6a | |||
7664625afa | |||
dca415099f | |||
54e115aff0 | |||
fcaa2d8589 | |||
9666597164 | |||
d2a1546dff | |||
b03777d39b | |||
32468ff90b | |||
614235d913 | |||
9abf4ef2ea | |||
6a18ee80be | |||
71ec36102f | |||
8db9ff30be | |||
b51be74cab | |||
d4e3c9b91c | |||
87358d4238 | |||
3bc5309a1c | |||
8ec69d0a41 | |||
1f567749bd | |||
ea892dbcb2 | |||
96c2595ad0 | |||
34f5b79249 | |||
f5e4d4717a | |||
de3c2c8d85 | |||
975cbf5769 | |||
3308f89acc | |||
50f932b02e | |||
251167c6b0 | |||
256c1dd3aa | |||
b93c935d6c | |||
827a9d3467 | |||
91470b93ea | |||
37d684fdd3 | |||
4f911c64a1 | |||
e0a0a80ad9 | |||
26c289d7d4 | |||
1eff81718b | |||
08ce1add01 | |||
25948306bd | |||
1c86f465dc | |||
3b330fb328 | |||
8a35316985 | |||
c63345e4ee | |||
005b9f03a4 | |||
4d48bd3d4c | |||
71afc6b6f3 | |||
242fdf39a1 | |||
37163a99a6 | |||
126ead2290 | |||
928bc32f4f | |||
6b63aaf8b1 | |||
c4f16ceff6 | |||
4050d1817c | |||
37186e1d90 | |||
06b7244de7 | |||
260168bb3f | |||
af9ba18040 | |||
20dd3ffb95 | |||
24fcc8f321 | |||
ff965c83be | |||
2aa3609461 | |||
fe7774bb6f | |||
9e3eb39069 | |||
7add1ef73e | |||
4fc03381a8 | |||
16af4272a5 | |||
b47568ed69 | |||
f8b7ca5c85 | |||
e4eb5d783a | |||
7dd0dd0923 | |||
aeb481e561 | |||
8a22c88d61 | |||
724666e10f | |||
4953dd63ed | |||
a32055995d | |||
3c0b243797 | |||
dfa31e0a28 | |||
b32240f96b | |||
02c3f9551f | |||
bc91ca86e8 | |||
1dadf20ee0 | |||
4ff41299e3 | |||
a9fa53535d | |||
711649924b | |||
f3d8206a07 | |||
56f5b0f0fa | |||
bed2eed8d8 | |||
984548ae88 | |||
32475ea37e | |||
2332bf22a7 | |||
3bc009297e | |||
44ab36aa1b | |||
969335f2f6 | |||
c000a9b467 | |||
c5389f31c3 | |||
85d4633f62 | |||
7ded0968c1 | |||
cb6b1d73d1 | |||
44f70ce4dc | |||
a42f8fcf75 | |||
ac4b06f11b | |||
705ec85f35 | |||
1f1fb73f86 | |||
e169650ebc | |||
2589aa3fa4 | |||
51c007c545 | |||
5089c107ba | |||
69a93f30d2 | |||
80e01d680b | |||
0658fcefcd | |||
d41d21b2e6 | |||
939f860ddd | |||
d047c41e86 | |||
8dd66fc0ff | |||
d496c929b3 | |||
f8dda37027 | |||
48fd7f310e | |||
5107e111bf | |||
dd2e9f074d | |||
ec954046db | |||
6be9635f51 | |||
f7dd69e382 | |||
fc6b0f28df | |||
f13632578d | |||
b23b428763 | |||
32a41debad | |||
fafddda82a | |||
5bf33db78f | |||
20d7015dff | |||
2fbc52e6a2 | |||
ab0433bb67 | |||
f2f7f36a6d | |||
3ad51e6d6b | |||
9e6ed11aa7 | |||
2bd6b36210 | |||
bcaf4485c2 | |||
cd2e1c1c09 | |||
22af35a9a7 | |||
c7e04cef97 | |||
fa2769cb25 | |||
1a64fcd8d4 | |||
36bdd9b1a0 | |||
6a875bdaa6 | |||
6a92f651f8 | |||
ad97e2c9a3 | |||
e709a501cb | |||
76af488d16 | |||
981fcb3ebc | |||
cc0d0fa2a6 | |||
a4104fdf8b | |||
720414eba6 | |||
541c424eb9 | |||
be2a6aa0bd | |||
e5ab24a1fc | |||
b0174a6b26 | |||
cb8739ac06 | |||
cb6c8af3bb | |||
672d752e0e | |||
8241d98a38 | |||
86d3868d9e | |||
2f007babec | |||
7742444a99 | |||
98bcef9a5e | |||
c3f9772a27 | |||
01d3453c41 | |||
eb163c8df1 | |||
ff67ee6484 | |||
ccdede647b | |||
4b32cc36a7 | |||
9e15e95001 | |||
dc71975f27 | |||
b79a9c6b2c | |||
a7b9954d0f | |||
dfa0e1cdca | |||
8e6d87d429 | |||
5adf1d1dd7 | |||
5164514789 | |||
f28bb09724 | |||
7602781a5b | |||
b6dff3f32b | |||
360cdc7239 | |||
74ca2ff12a | |||
fbf18440fb | |||
b7a1edd04a | |||
14bb53d43a | |||
906ab766df | |||
902af04dd4 | |||
05bef55c80 | |||
5933d226af | |||
b7ff89243a | |||
835104c88f | |||
246b4de1b8 | |||
49109154a8 | |||
efca784acf | |||
14a6efedf3 | |||
ef4b7ce1a7 | |||
68a69e9b07 | |||
93265a3686 | |||
ae87f7eb49 | |||
38bae09f82 | |||
75b63ea179 | |||
dd89e56f6e | |||
2cb9c52a7a | |||
e89a59b053 | |||
40456f25b9 | |||
f5604df256 | |||
32bd895632 | |||
ffe400cb76 | |||
897afa3c2b | |||
96ec4aa909 | |||
a1796f2577 | |||
362248a065 | |||
9403bbb851 | |||
0c285eef5b | |||
1461263b60 | |||
61f2bfa9ec | |||
04d1293a33 | |||
9af514f3eb | |||
8e567b0f86 | |||
a4218b0016 | |||
42369816c9 | |||
3492655f1d | |||
7847e69574 | |||
e75cfbeb11 | |||
7ec6826abc | |||
825193bbb5 | |||
a14e84d5c5 | |||
14ab2faeaf | |||
8e47eac263 | |||
6aaa743302 | |||
0e08c4bde0 | |||
f7871942da | |||
c8fad66973 | |||
9cc0ae5c38 | |||
9a37a27a3c | |||
453a09e0b4 | |||
d566080a79 | |||
4ce098f39b | |||
f22e4f55c1 | |||
15ea31a4df | |||
7881a70273 | |||
032b90d483 | |||
a050fa9669 | |||
60bd04b9aa | |||
91af9a0ef7 | |||
45c420ed05 | |||
486b81f8ec | |||
eed0feed06 | |||
2c6c103f3b | |||
e9df66ca1f | |||
1381daf06e | |||
ac542ad8b8 | |||
a2677cee58 | |||
a641a19615 | |||
a91d45dea5 | |||
81c551552b | |||
69a370f438 | |||
3aa791bc1b | |||
a53ba0af5c | |||
a1071e9c00 | |||
70cda80176 | |||
ac0cb3560c | |||
d9712e7589 | |||
cfe763f98d | |||
4869616176 | |||
30abcc0a1a | |||
38f1d52bf3 | |||
e49f5d610f | |||
04d065fd87 | |||
d345a9a716 | |||
2d8d898fb7 | |||
ad9ee094b4 | |||
cb2277628c | |||
5869b64ee0 | |||
6ae9e44e84 | |||
d0f36f5227 | |||
5d45fd6260 | |||
b3f7a5338e | |||
b858484b97 | |||
b76330f20f | |||
ee1d4b0ac1 | |||
abf431fffb | |||
3e8dbc9bc9 | |||
721edc9985 | |||
82198424df | |||
ba2cb7d14f | |||
de453fad84 | |||
59c96f9890 | |||
f7d3fd586e | |||
798afc756b | |||
59aaab52a9 | |||
14621003d7 | |||
23f67b3d25 | |||
1c6de07a54 | |||
cda852f4e8 | |||
1d6a5ca01b | |||
c574a6610b | |||
ae6d448aa0 | |||
b8bdb8f432 | |||
3300c47c03 | |||
d077a76063 | |||
43d13dd1f9 | |||
072d99040f | |||
4d5968da1a | |||
5a3843cf1f | |||
5fd0f03fd4 | |||
1cd115ace5 | |||
a9f8ff1090 | |||
e114360a5f | |||
b16e60f691 | |||
f959e0387e | |||
425eb03a6e | |||
8e312204ee | |||
2e733f8594 | |||
4e308d7880 | |||
935871c39a | |||
ce6e4d2090 | |||
68a53bc5dc | |||
459d9ad74c | |||
e40a26f193 | |||
59e04dee6e | |||
5a16ea514a | |||
8d2d82764f | |||
dedb2f9fef | |||
8b89667d9d | |||
d4da2d0efa | |||
c798e4be32 | |||
1ebd50cb5b | |||
f2ab5c1968 | |||
ead1d6fffb | |||
9b81cb44fa | |||
142631c7a0 | |||
e78549fb72 | |||
c0ce72a2bd | |||
a4f7059051 | |||
bd16fedb33 | |||
c8ac054093 |
4
.dockerignore
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
**
|
||||||
|
|
||||||
|
!/target
|
||||||
|
!/config/desktop
|
15
.editorconfig
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 120
|
||||||
|
tab_width = 4
|
||||||
|
ij_continuation_indent_size = 8
|
||||||
|
ij_formatter_off_tag = @formatter:off
|
||||||
|
ij_formatter_on_tag = @formatter:on
|
||||||
|
ij_formatter_tags_enabled = false
|
||||||
|
ij_java_names_count_to_use_import_on_demand = 999
|
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
custom: https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat
|
18
.github/dependabot.yml
vendored
@ -1,7 +1,15 @@
|
|||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
# Maintain dependencies for GitHub Actions
|
- package-ecosystem: "github-actions"
|
||||||
- package-ecosystem: "github-actions"
|
directory: "/"
|
||||||
directory: "/"
|
schedule:
|
||||||
schedule:
|
interval: "weekly"
|
||||||
interval: "daily"
|
- package-ecosystem: "maven"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
- package-ecosystem: "docker"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
|
||||||
|
10
.github/lock.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
daysUntilLock: 365
|
||||||
|
skipCreatedBefore: false
|
||||||
|
exemptLabels: []
|
||||||
|
lockLabel: false
|
||||||
|
lockComment: >
|
||||||
|
This thread has been automatically locked because it has not had
|
||||||
|
recent activity after it was closed. :lock: Please open a new issue
|
||||||
|
for regressions or related bugs.
|
||||||
|
setLockReason: false
|
10
.github/stale.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
daysUntilStale: 90
|
||||||
|
daysUntilClose: 14
|
||||||
|
onlyLabels:
|
||||||
|
- waiting for input
|
||||||
|
- wontfix
|
||||||
|
staleLabel: stale
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as `stale` because it has not had recent activity. :calendar: It will be _closed automatically_ in one week if no further activity occurs.
|
||||||
|
closeComment: false
|
60
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
name: "Pull requests build"
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- '.txt'
|
||||||
|
- 'LICENSE'
|
||||||
|
- 'docs/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pr-build:
|
||||||
|
if: >
|
||||||
|
github.event_name == 'pull_request' && !github.event.pull_request.draft && (
|
||||||
|
github.event.action == 'opened' ||
|
||||||
|
github.event.action == 'reopened' ||
|
||||||
|
github.event.action == 'synchronize'
|
||||||
|
)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: 17
|
||||||
|
architecture: x64
|
||||||
|
- name: Cache Maven packages
|
||||||
|
uses: actions/cache@v3.3.1
|
||||||
|
with:
|
||||||
|
path: ~/.m2
|
||||||
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
|
restore-keys: ${{ runner.os }}-m2-
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn --no-transfer-progress verify
|
||||||
|
- name: "Set up QEMU"
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
uses: docker/setup-qemu-action@v2.1.0
|
||||||
|
- name: "Set up Docker Buildx"
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
- name: "Verify Docker WebGoat build"
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
uses: docker/build-push-action@v4.1.0
|
||||||
|
with:
|
||||||
|
context: ./
|
||||||
|
file: ./Dockerfile
|
||||||
|
push: false
|
||||||
|
build-args: |
|
||||||
|
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
|
- name: "Verify Docker WebGoat desktop build"
|
||||||
|
uses: docker/build-push-action@v4.1.0
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
with:
|
||||||
|
context: ./
|
||||||
|
file: ./Dockerfile_desktop
|
||||||
|
push: false
|
||||||
|
build-args: |
|
||||||
|
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
42
.github/workflows/main.yml
vendored
@ -1,42 +0,0 @@
|
|||||||
name: "CI/CD Pipeline"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ '*' ]
|
|
||||||
tags-ignore:
|
|
||||||
- '*'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
||||||
java: [11, 15]
|
|
||||||
steps:
|
|
||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up JDK ${{ matrix.java }}
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: ${{ matrix.java }}
|
|
||||||
architecture: x64
|
|
||||||
- name: Cache Maven packages
|
|
||||||
uses: actions/cache@v2
|
|
||||||
with:
|
|
||||||
path: ~/.m2
|
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
|
||||||
restore-keys: ${{ runner.os }}-m2
|
|
||||||
- name: Build with Maven
|
|
||||||
run: mvn clean install
|
|
||||||
notify-slack:
|
|
||||||
if: github.event_name == 'push' && (success() || failure())
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: "Slack workflow notification"
|
|
||||||
uses: Gamesight/slack-workflow-status@master
|
|
||||||
with:
|
|
||||||
repo_token: ${{secrets.GITHUB_TOKEN}}
|
|
||||||
slack_webhook_url: ${{secrets.SLACK_WEBHOOK_URL}}
|
|
116
.github/workflows/release.yml
vendored
@ -2,26 +2,26 @@ name: "Release Pipeline"
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- test* # todo replace with v*
|
- v*
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
|
if: github.repository == 'WebGoat/WebGoat'
|
||||||
name: Release WebGoat
|
name: Release WebGoat
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: release
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: "Get tag name"
|
- name: Set up JDK 17
|
||||||
id: tag
|
uses: actions/setup-java@v3
|
||||||
uses: dawidd6/action-get-tag@v1
|
|
||||||
|
|
||||||
- name: Set up JDK 11
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
distribution: 'temurin'
|
||||||
|
java-version: 17
|
||||||
architecture: x64
|
architecture: x64
|
||||||
|
|
||||||
- name: Cache Maven packages
|
- name: Cache Maven packages
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3.3.1
|
||||||
with:
|
with:
|
||||||
path: ~/.m2
|
path: ~/.m2
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
@ -29,21 +29,20 @@ jobs:
|
|||||||
|
|
||||||
- name: "Set labels for ${{ github.ref }}"
|
- name: "Set labels for ${{ github.ref }}"
|
||||||
run: |
|
run: |
|
||||||
echo "WEBGOAT_TAG_VERSION=${{ steps.tag.outputs.tag }}" >> $GITHUB_ENV
|
echo "WEBGOAT_TAG_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_TAG_VERSION:1}" >> $GITHUB_ENV
|
WEBGOAT_MAVEN_VERSION=${{ github.ref_name }}
|
||||||
|
echo "WEBGOAT_MAVEN_VERSION=${WEBGOAT_MAVEN_VERSION:1}" >> $GITHUB_ENV
|
||||||
- name: Build with Maven
|
- name: Build with Maven
|
||||||
run: |
|
run: |
|
||||||
mvn versions:set ${WEBGOAT_VERSION}
|
mvn --no-transfer-progress versions:set -DnewVersion=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
mvn clean install -DskipTests
|
mvn --no-transfer-progress install -DskipTests
|
||||||
|
|
||||||
- name: "Create release"
|
- name: "Create release"
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
draft: false
|
draft: false
|
||||||
files: |
|
files: |
|
||||||
webgoat-server/target/webgoat-server-${WEBGOAT_MAVEN_VERSION}.jar
|
target/webgoat-${{ env.WEBGOAT_MAVEN_VERSION }}.jar
|
||||||
webwolf/target/webwolf-${WEBGOAT_MAVEN_VERSION}.jar
|
|
||||||
body: |
|
body: |
|
||||||
## Version ${{ steps.tag.outputs.tag }}
|
## Version ${{ steps.tag.outputs.tag }}
|
||||||
|
|
||||||
@ -55,6 +54,8 @@ jobs:
|
|||||||
|
|
||||||
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
- [#743 - Character encoding errors](https://github.com/WebGoat/WebGoat/issues/743)
|
||||||
|
|
||||||
|
Full change log: https://github.com/WebGoat/WebGoat/compare/${{ steps.tag.outputs.tag }}...${{ steps.tag.outputs.tag }}
|
||||||
|
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
@ -69,26 +70,79 @@ jobs:
|
|||||||
Team WebGoat
|
Team WebGoat
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: "Set up QEMU"
|
- name: "Set up QEMU"
|
||||||
uses: docker/setup-qemu-action@v1
|
uses: docker/setup-qemu-action@v2.1.0
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
- name: "Set up Docker Buildx"
|
- name: "Set up Docker Buildx"
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
- name: "Login to dockerhub"
|
- name: "Login to dockerhub"
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v2.2.0
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: "Build and push"
|
|
||||||
uses: docker/build-push-action@v2
|
- name: "Build and push WebGoat"
|
||||||
|
uses: docker/build-push-action@v4.1.0
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./
|
||||||
file: docker/Dockerfile
|
file: ./Dockerfile
|
||||||
push: false #todo enable
|
push: true
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64, linux/arm64, linux/arm/v7
|
||||||
tags: |
|
tags: |
|
||||||
webgoat/goatandwolf:${WEBGOAT_TAG_VERSION}
|
webgoat/webgoat:${{ env.WEBGOAT_TAG_VERSION }}
|
||||||
# todo webgoat/goatandwolf:latest
|
webgoat/webgoat:latest
|
||||||
build-args: |
|
build-args: |
|
||||||
webgoat_version=${WEBGOAT_TAG_VERSION}
|
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
- name: "Image digest"
|
|
||||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
- name: "Build and push WebGoat desktop"
|
||||||
|
uses: docker/build-push-action@v4.1.0
|
||||||
|
with:
|
||||||
|
context: ./
|
||||||
|
file: ./Dockerfile_desktop
|
||||||
|
push: true
|
||||||
|
platforms: linux/amd64, linux/arm64
|
||||||
|
tags: |
|
||||||
|
webgoat/webgoat-desktop:${{ env.WEBGOAT_TAG_VERSION }}
|
||||||
|
webgoat/webgoat-desktop:latest
|
||||||
|
build-args: |
|
||||||
|
webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
|
||||||
|
new_version:
|
||||||
|
if: github.repository == 'WebGoat/WebGoat'
|
||||||
|
name: Update to next SNAPSHOT version
|
||||||
|
needs: [ release ]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: 17
|
||||||
|
architecture: x64
|
||||||
|
|
||||||
|
- name: Set version to next snapshot
|
||||||
|
run: |
|
||||||
|
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}-SNAPSHOT versions:commit
|
||||||
|
|
||||||
|
- name: Push the changes to new branch
|
||||||
|
uses: devops-infra/action-commit-push@v0.9.2
|
||||||
|
with:
|
||||||
|
github_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
add_timestamp: true
|
||||||
|
commit_message: "Updating to the new development version"
|
||||||
|
force: false
|
||||||
|
|
||||||
|
- name: Create PR
|
||||||
|
uses: devops-infra/action-pull-request@v0.5.5
|
||||||
|
with:
|
||||||
|
github_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
title: ${{ github.event.commits[0].message }}
|
||||||
|
target_branch: main
|
||||||
|
|
||||||
|
67
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
name: "UI-Test"
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- 'LICENSE'
|
||||||
|
- 'docs/**'
|
||||||
|
push:
|
||||||
|
tags-ignore:
|
||||||
|
- 'v*'
|
||||||
|
paths-ignore:
|
||||||
|
- '.txt'
|
||||||
|
- '*.MD'
|
||||||
|
- '*.md'
|
||||||
|
- 'LICENSE'
|
||||||
|
- 'docs/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# display name of the job
|
||||||
|
name: "Robot framework test"
|
||||||
|
steps:
|
||||||
|
# Uses an default action to checkout the code
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
# Uses an action to add Python to the VM
|
||||||
|
- name: Setup Pyton
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.7'
|
||||||
|
architecture: x64
|
||||||
|
# Uses an action to add JDK 17 to the VM (and mvn?)
|
||||||
|
- name: set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: 17
|
||||||
|
architecture: x64
|
||||||
|
#Uses an action to set up a cache using a certain key based on the hash of the dependencies
|
||||||
|
- name: Cache Maven packages
|
||||||
|
uses: actions/cache@v3.3.1
|
||||||
|
with:
|
||||||
|
path: ~/.m2
|
||||||
|
key: ubuntu-latest-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
|
restore-keys: ubuntu-latest-m2-
|
||||||
|
- uses: BSFishy/pip-action@v1
|
||||||
|
with:
|
||||||
|
packages: |
|
||||||
|
robotframework
|
||||||
|
robotframework-SeleniumLibrary
|
||||||
|
webdriver-manager
|
||||||
|
selenium==4.9.1
|
||||||
|
# TODO https://github.com/robotframework/SeleniumLibrary/issues/1835
|
||||||
|
- name: Run with Maven
|
||||||
|
run: mvn --no-transfer-progress spring-boot:run &
|
||||||
|
- name: Wait to start
|
||||||
|
uses: ifaxity/wait-on-action@v1
|
||||||
|
with:
|
||||||
|
resource: http://127.0.0.1:8080/WebGoat
|
||||||
|
- name: Test with Robotframework
|
||||||
|
run: python3 -m robot --variable HEADLESS:"1" --outputdir robotreport robot/goat.robot
|
||||||
|
# send report to forks only due to limits on permission tokens
|
||||||
|
- name: Send report to commit
|
||||||
|
if: github.repository != 'WebGoat/WebGoat' && github.event_name == 'push'
|
||||||
|
uses: joonvena/robotframework-reporter-action@v2.1
|
||||||
|
with:
|
||||||
|
gh_access_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
report_path: 'robotreport'
|
17
.github/workflows/welcome.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
name: Welcome
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
greeting:
|
||||||
|
if: github.repository == 'WebGoat/WebGoat'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/first-interaction@v1.1.1
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
issue-message: 'Thanks for submitting your first issue, we will have a look as quickly as possible.'
|
||||||
|
pr-message: 'Thanks so much for your contribution, really appreciated! We will have a look and merge it if everything checks out!'
|
3
.gitignore
vendored
@ -54,3 +54,6 @@ webgoat.properties
|
|||||||
webgoat.script
|
webgoat.script
|
||||||
TestClass.class
|
TestClass.class
|
||||||
**/*.flattened-pom.xml
|
**/*.flattened-pom.xml
|
||||||
|
/.gitconfig
|
||||||
|
|
||||||
|
webgoat.gitconfig
|
4
.mvn/wrapper/maven-wrapper.properties
vendored
@ -1,2 +1,2 @@
|
|||||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.2.5/apache-maven-3.2.5-bin.zip
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
|
||||||
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar
|
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
||||||
|
62
.travis.yml
@ -1,62 +0,0 @@
|
|||||||
services:
|
|
||||||
- docker
|
|
||||||
language: java
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
dist: xenial
|
|
||||||
jdk:
|
|
||||||
- openjdk11
|
|
||||||
- openjdk15
|
|
||||||
addons:
|
|
||||||
firefox: latest
|
|
||||||
install:
|
|
||||||
- true
|
|
||||||
script:
|
|
||||||
- export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH;
|
|
||||||
else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
|
|
||||||
- echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
|
|
||||||
- if [ ! -z "${TRAVIS_TAG}" ]; then mvn versions:set -DnewVersion=${TRAVIS_TAG:1};
|
|
||||||
fi
|
|
||||||
- mvn clean install -q
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- "$HOME/.m2"
|
|
||||||
before_deploy:
|
|
||||||
- export WEBGOAT_SERVER_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webgoat-server/target
|
|
||||||
- export WEBWOLF_TARGET_DIR=$HOME/build/$TRAVIS_REPO_SLUG/webwolf/target
|
|
||||||
- export WEBGOAT_ARTIFACTS_FOLDER=$HOME/build/$TRAVIS_REPO_SLUG/Deployable_Artifacts/
|
|
||||||
- mkdir -p $WEBGOAT_ARTIFACTS_FOLDER
|
|
||||||
- cp -fa $WEBGOAT_SERVER_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
|
||||||
- cp -fa $WEBWOLF_TARGET_DIR/*.jar $WEBGOAT_ARTIFACTS_FOLDER/
|
|
||||||
- echo "Contents of artifacts folder:"
|
|
||||||
- ls $WEBGOAT_ARTIFACTS_FOLDER
|
|
||||||
deploy:
|
|
||||||
- provider: script
|
|
||||||
cleanup: false
|
|
||||||
script: bash scripts/deploy-webgoat.sh
|
|
||||||
on:
|
|
||||||
condition: $TRAVIS_OS_NAME == 'linux'
|
|
||||||
jdk: openjdk11
|
|
||||||
tags: true
|
|
||||||
- provider: releases
|
|
||||||
cleanup: false
|
|
||||||
overwrite: true
|
|
||||||
token:
|
|
||||||
secure: pJOLBnl6427PcVg/tVy/qB18JC7b8cKpffau+IP0pjdSt7KUfBdBY3QuJ7mrM65zRoVILzggLckaew2PlRmYQRdumyWlyRn44XiJ9KO4n6Bsufbz+ictB4ggtozpp9+I9IIUh1TmqypL9lhkX2ONM9dSHmyblYpAAgMuYSK8FYc=
|
|
||||||
file_glob: true
|
|
||||||
file: "$WEBGOAT_ARTIFACTS_FOLDER/*"
|
|
||||||
on:
|
|
||||||
condition: $TRAVIS_OS_NAME == 'linux'
|
|
||||||
jdk: openjdk11
|
|
||||||
tags: true
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
#Docker login
|
|
||||||
- secure: XgPc0UKRTUI70I4YWNQpThPPWeQIxkmzh1GNoR/SSDC2GPIBq3EfkkbSQewqil8stTy+S1/xSzc0JXG8NTn7UOxHVHA/2nhI6jX9E+DKtXQ89YwmaDNQjkbMjziAtDCIex+5TRykxNfkxj6VPYbDssrzI7iJXOIZVj/HoyO3O5E=
|
|
||||||
#Docker password
|
|
||||||
- secure: aly5TKBUK9sIiqtMbytNNPZHQhC0a7Yond5tEtuJ8fO+j/KZB4Uro3I6BhzYjGWFb5Kndd0j2TXHPFvtOl402J1CmFsY3v0BhilQd0g6zOssp5T0A73m8Jgq4ItV8wQJJy2bQsXqL1B+uFYieYPiMchj7JxWW0vBn7TV5b68l6U=
|
|
||||||
notifications:
|
|
||||||
slack:
|
|
||||||
rooms:
|
|
||||||
secure: cDG2URRy7SEipMLyhodwjRBtsPBmfngFB4FyNaIhhr+2/SGyKvGhfW75YA9V+eC7J40KllxQhiIvrxngKDRABb3L1O72Sdj8mZSi8TVsUNLOdamJXHKGUwNSPWXv/1s2m+uC20cgxl66o31vxdV33uvxLdvGOd5e5qOKTsKP7UE=
|
|
60
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment include:
|
||||||
|
|
||||||
|
- Using welcoming and inclusive language
|
||||||
|
- Being respectful of differing viewpoints and experiences
|
||||||
|
- Gracefully accepting constructive criticism
|
||||||
|
- Focusing on what is best for the community
|
||||||
|
- Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
- The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
|
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
- Public or private harassment
|
||||||
|
- Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||||
|
- Misusing the context of the WebGoat project for commercial goals (e.g. adding sales pitches to the codebase or to communication channels used by the project, such as Slack).
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Disclaimer
|
||||||
|
|
||||||
|
The WebGoat project and its materials are conceived for educational and research purposes only.
|
||||||
|
|
||||||
|
Refrain from violating the laws in your country by carefully consulting them before executing any tests against web applications or other assets utilizing the WebGoat (or Webwolf) materials.
|
||||||
|
|
||||||
|
The WebGoat project is also NOT supporting unethical activities in any way. If you come across such requests, please reach out to the project leaders and raise this to them.
|
||||||
|
|
||||||
|
Neither OWASP, the WebGoat project leaders, authors or anyone else involved in this project is going to take responsibility for your actions.
|
||||||
|
|
||||||
|
The intention of the WebGoat is not to encourage hacking or malicious activities! Instead, the goal of the project is to learn different hacking techniques and offer ways to reduce or mitigate that risk.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community includes using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nanne.baars@owasp.org.
|
||||||
|
|
||||||
|
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org "Contributor Covenant homepage"), [version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html "Code of Conduct version 1.4").
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see [the Contributor Covenant FAQ](https://www.contributor-covenant.org/faq)
|
119
CONTRIBUTING.md
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
[](https://github.com/WebGoat/WebGoat/graphs/contributors)
|
||||||
|

|
||||||
|

|
||||||
|
[](https://conventionalcommits.org)
|
||||||
|
|
||||||
|
This document describes how you can contribute to WebGoat. Please read it carefully.
|
||||||
|
|
||||||
|
**Table of Contents**
|
||||||
|
|
||||||
|
* [How to Contribute to the Project](#how-to-contribute-to-the-project)
|
||||||
|
* [How to set up your Contributor Environment](#how-to-set-up-your-contributor-environment)
|
||||||
|
* [How to get your PR Accepted](#how-to-get-your-pr-accepted)
|
||||||
|
|
||||||
|
## How to Contribute to the project
|
||||||
|
|
||||||
|
There are a couple of ways on how you can contribute to the project:
|
||||||
|
|
||||||
|
* **File [issues](https://github.com/WebGoat/WebGoat/issues "Webgoat Issues")** for missing content or errors. Explain what you think is missing and give a suggestion as to where it could be added.
|
||||||
|
* **Create a [pull request (PR)](https://github.com/WebGoat/WebGoat/pulls "Create a pull request")**. This is a direct contribution to the project and may be merged after review. You should ideally [create an issue](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues") for any PR you would like to submit, as we can first review the merit of the PR and avoid any unnecessary work. This is of course not needed for small modifications such as correcting typos.
|
||||||
|
* **Help out financially** by donating via [OWASP donations](https://owasp.org/donate/?reponame=www-project-webgoat&title=OWASP+WebGoat).
|
||||||
|
|
||||||
|
## How to get your PR accepted
|
||||||
|
|
||||||
|
Your PR is valuable to us, and to make sure we can integrate it smoothly, we have a few items for you to consider. In short:
|
||||||
|
The minimum requirements for code contributions are:
|
||||||
|
|
||||||
|
1. The code _must_ be compliant with the configured Java Google Formatter, Checkstyle and PMD rules.
|
||||||
|
2. All new and changed code _should_ have a corresponding unit and/or integration test.
|
||||||
|
3. New and changed lessons _must_ have a corresponding integration test.
|
||||||
|
4. [Status checks](https://docs.github.com/en/github/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) should pass for your last commit.
|
||||||
|
|
||||||
|
Additionally, the following guidelines can help:
|
||||||
|
|
||||||
|
### Keep your pull requests limited to a single issue
|
||||||
|
|
||||||
|
Pull requests should be as small/atomic as possible. Large, wide-sweeping changes in a pull request will be **rejected**, with comments to isolate the specific code in your pull request. Some examples:
|
||||||
|
|
||||||
|
* If you are making spelling corrections in the docs, don't modify other files.
|
||||||
|
* If you are adding new functions don't '*cleanup*' unrelated functions. That cleanup belongs in another pull request.
|
||||||
|
|
||||||
|
### Write a good commit message
|
||||||
|
|
||||||
|
* We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and use the following types:
|
||||||
|
|
||||||
|
- fix:
|
||||||
|
- feat:
|
||||||
|
- build:
|
||||||
|
- chore:
|
||||||
|
- ci:
|
||||||
|
- docs:
|
||||||
|
- refactor:
|
||||||
|
- test:
|
||||||
|
|
||||||
|
Using this style of commits makes it possible to create our release notes automatically.
|
||||||
|
|
||||||
|
* Explain why you make the changes. [More infos about a good commit message.](https://betterprogramming.pub/stop-writing-bad-commit-messages-8df79517177d)
|
||||||
|
|
||||||
|
* If you fix an issue with your commit, please close the issue by [adding one of the keywords and the issue number](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) to your commit message.
|
||||||
|
|
||||||
|
For example: `Fix #545` or `Closes #10`
|
||||||
|
|
||||||
|
## How to set up your Contributor Environment
|
||||||
|
|
||||||
|
1. Create a GitHub account. Multiple different GitHub subscription plans are available, but you only need a free one. Follow [these steps](https://help.github.com/en/articles/signing-up-for-a-new-github-account "Signing up for a new GitHub account") to set up your account.
|
||||||
|
2. Fork the repository. Creating a fork means creating a copy of the repository on your own account, which you can modify without any impact on this repository. GitHub has an [article that describes all the needed steps](https://help.github.com/en/articles/fork-a-repo "Fork a repo").
|
||||||
|
3. Clone your own repository to your host computer so that you can make modifications. If you followed the GitHub tutorial from step 2, you have already done this.
|
||||||
|
4. Go to the newly cloned directory "WebGoat" and add the remote upstream repository:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git remote -v
|
||||||
|
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
|
||||||
|
origin git@github.com:<your Github handle>/WebGoat.git (push)
|
||||||
|
|
||||||
|
$ git remote add upstream git@github.com:WebGoat/WebGoat.git
|
||||||
|
|
||||||
|
$ git remote -v
|
||||||
|
origin git@github.com:<your Github handle>/WebGoat.git (fetch)
|
||||||
|
origin git@github.com:<your Github handle>/WebGoat.git (push)
|
||||||
|
upstream git@github.com:OWASP/WebGoat.git (fetch)
|
||||||
|
upstream git@github.com:OWASP/WebGoat.git (push)
|
||||||
|
```
|
||||||
|
|
||||||
|
See also the GitHub documentation on "[Configuring a remote for a fork](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork "Configuring a remote for a fork")".
|
||||||
|
|
||||||
|
5. Choose what to work on, based on any of the outstanding [issues](https://github.com/WebGoat/WebGoat/issues "WebGoat Issues").
|
||||||
|
|
||||||
|
6. Create a branch so that you can cleanly work on the chosen issue: `git checkout -b FixingIssue66`
|
||||||
|
|
||||||
|
7. Open your favorite editor and start making modifications. We recommend using the [IntelliJ Idea](https://www.jetbrains.com/idea/).
|
||||||
|
|
||||||
|
8. After your modifications are done, push them to your forked repository. This can be done by executing the command `git add MYFILE` for every file you have modified, followed by `git commit -m 'your commit message here'` to commit the modifications and `git push` to push your modifications to GitHub.
|
||||||
|
|
||||||
|
9. Create a Pull Request (PR) by going to your fork, <https://github.com/Your_Github_Handle/WebGoat> and click on the "New Pull Request" button. The target branch should typically be the Master branch. When submitting a PR, be sure to follow the checklist that is provided in the PR template. The checklist itself will be filled out by the reviewer.
|
||||||
|
|
||||||
|
10. Your PR will be reviewed and comments may be given. In order to process a comment, simply make modifications to the same branch as before and push them to your repository. GitHub will automatically detect these changes and add them to your existing PR.
|
||||||
|
|
||||||
|
11. When starting on a new PR in the future, make sure to always keep your local repo up to date:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git fetch upstream
|
||||||
|
$ git merge upstream/main
|
||||||
|
```
|
||||||
|
|
||||||
|
See also the following article for further explanation on "[How to Keep a Downstream git Repository Current with Upstream Repository Changes](https://medium.com/sweetmeat/how-to-keep-a-downstream-git-repository-current-with-upstream-repository-changes-10b76fad6d97 "How to Keep a Downstream git Repository Current with Upstream Repository Changes")".
|
||||||
|
|
||||||
|
If at any time you want to work on a different issue, you can simply switch to a different branch, as explained in step 5.
|
||||||
|
|
||||||
|
> Tip: Don't try to work on too many issues at once though, as it will be a lot more difficult to merge branches the longer they are open.
|
||||||
|
|
||||||
|
## What not to do
|
||||||
|
|
||||||
|
Although we greatly appreciate any and all contributions to the project, there are a few things that you should take into consideration:
|
||||||
|
|
||||||
|
* The WebGoat project should not be used as a platform for advertisement for commercial tools, companies or individuals. Write-ups should be written with free and open-source tools in mind and commercial tools are typically not accepted, unless as a reference in the security tools section.
|
||||||
|
* Unnecessary self-promotion of tools or blog posts is frowned upon. If you have a relation with on of the URLs or tools you are referencing, please state so in the PR so that we can verify that the reference is in line with the rest of the guide.
|
||||||
|
|
||||||
|
Please be sure to take a careful look at our [Code of Conduct](https://github.com/WebGoat/WebGoat/blob/master/CODE_OF_CONDUCT.md) for all the details.
|
@ -1,35 +0,0 @@
|
|||||||
## Release WebGoat
|
|
||||||
|
|
||||||
|
|
||||||
### Version numbers
|
|
||||||
|
|
||||||
For WebGoat we use milestone releases first before we release the official version, we use `v8.0.0.M3` while tagging
|
|
||||||
and 8.0.0.M3 in the `pom.xml`. When we create the final release we remove the milestone release and use
|
|
||||||
`v8.0.0` in the `pom.xml`
|
|
||||||
|
|
||||||
### Release notes:
|
|
||||||
Update the release notes with the correct version. Use `git shortlog -s -n --since "SEP 31 2019"` for the list of
|
|
||||||
committers.
|
|
||||||
|
|
||||||
At the moment we use Gitflow, for a release you create a new release branch and take the following steps:
|
|
||||||
|
|
||||||
```
|
|
||||||
git checkout develop
|
|
||||||
git flow release start <version>
|
|
||||||
mvn versions:set <<version>
|
|
||||||
git commit -am "New release, updating pom.xml"
|
|
||||||
git flow release publish
|
|
||||||
|
|
||||||
<<Make changes if necessary>>
|
|
||||||
|
|
||||||
git flow release finish <version>
|
|
||||||
git push origin develop
|
|
||||||
git push origin master
|
|
||||||
git push --tags
|
|
||||||
```
|
|
||||||
|
|
||||||
Now Travis takes over and will create the release in Github and on Docker Hub.
|
|
||||||
|
|
||||||
NOTE: the `mvn versions:set` command above is just there to make sure the master branch contains the latest version
|
|
||||||
|
|
||||||
|
|
21
CREATE_RELEASE.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
## Release WebGoat
|
||||||
|
|
||||||
|
### Version numbers
|
||||||
|
|
||||||
|
For WebGoat we use milestone releases first before we release the official version, we use `v2023.01` while tagging
|
||||||
|
and 2023.01 in the `pom.xml`.
|
||||||
|
|
||||||
|
### Release notes:
|
||||||
|
|
||||||
|
Update the release notes with the correct version. Use `git shortlog -s -n --since "JAN 06 2023"` for the list of
|
||||||
|
committers.
|
||||||
|
|
||||||
|
```
|
||||||
|
mvn versions:set
|
||||||
|
<< update release notes >>
|
||||||
|
mvn verify
|
||||||
|
git commit ....
|
||||||
|
git tag v2023.01
|
||||||
|
git push --tags
|
||||||
|
```
|
||||||
|
|
37
Dockerfile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
FROM docker.io/eclipse-temurin:19-jre-focal
|
||||||
|
LABEL NAME = "WebGoat: A deliberately insecure Web Application"
|
||||||
|
MAINTAINER "WebGoat team"
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
useradd -ms /bin/bash webgoat && \
|
||||||
|
chgrp -R 0 /home/webgoat && \
|
||||||
|
chmod -R g=u /home/webgoat
|
||||||
|
|
||||||
|
USER webgoat
|
||||||
|
|
||||||
|
COPY --chown=webgoat target/webgoat-*.jar /home/webgoat/webgoat.jar
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
EXPOSE 9090
|
||||||
|
|
||||||
|
WORKDIR /home/webgoat
|
||||||
|
ENTRYPOINT [ "java", \
|
||||||
|
"-Duser.home=/home/webgoat", \
|
||||||
|
"-Dfile.encoding=UTF-8", \
|
||||||
|
"--add-opens", "java.base/java.lang=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.text=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.desktop/java.beans=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.desktop/java.awt.font=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.util=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED", \
|
||||||
|
"--add-opens", "java.base/java.io=ALL-UNNAMED", \
|
||||||
|
"-Drunning.in.docker=true", \
|
||||||
|
"-Dwebgoat.host=0.0.0.0", \
|
||||||
|
"-Dwebwolf.host=0.0.0.0", \
|
||||||
|
"-Dwebgoat.port=8080", \
|
||||||
|
"-Dwebwolf.port=9090", \
|
||||||
|
"-jar", "webgoat.jar" ]
|
34
Dockerfile_desktop
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
FROM lscr.io/linuxserver/webtop:ubuntu-xfce
|
||||||
|
LABEL NAME = "WebGoat: A deliberately insecure Web Application"
|
||||||
|
MAINTAINER "WebGoat team"
|
||||||
|
|
||||||
|
WORKDIR /config
|
||||||
|
|
||||||
|
COPY target/webgoat-*.jar /config/webgoat.jar
|
||||||
|
COPY config/desktop/start_webgoat.sh /config/start_webgoat.sh
|
||||||
|
COPY config/desktop/start_zap.sh /config/start_zap.sh
|
||||||
|
COPY config/desktop/WebGoat.txt /config/Desktop/
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
case $(uname -m) in \
|
||||||
|
x86_64) ARCH=x64;; \
|
||||||
|
aarch64) ARCH=aarch64;; \
|
||||||
|
*) ARCH=unknown;; \
|
||||||
|
esac && \
|
||||||
|
curl -LO https://github.com/zaproxy/zaproxy/releases/download/v2.12.0/ZAP_2.12.0_Linux.tar.gz && \
|
||||||
|
tar zfxv ZAP_2.12.0_Linux.tar.gz && \
|
||||||
|
rm -rf ZAP_2.12.0_Linux.tar.gz && \
|
||||||
|
curl -LO https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.6%2B10/OpenJDK17U-jre_${ARCH}_linux_hotspot_17.0.6_10.tar.gz && \
|
||||||
|
tar zfxv OpenJDK17U-jre_${ARCH}_linux_hotspot_17.0.6_10.tar.gz && \
|
||||||
|
rm -rf OpenJDK17U-jre_${ARCH}_linux_hotspot_17.0.6_10.tar.gz && \
|
||||||
|
chmod +x /config/start_webgoat.sh && \
|
||||||
|
chmod +x /config/start_zap.sh && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get --yes install vim nano && \
|
||||||
|
echo "JAVA_HOME=/config/jdk-17.0.6+10-jre/" >> .bash_aliases && \
|
||||||
|
echo "PATH=$PATH:$JAVA_HOME/bin" >> .bash_aliases
|
||||||
|
|
||||||
|
|
||||||
|
ENV JAVA_HOME=/home/webgoat/jdk-17.0.6+10-jre
|
||||||
|
|
||||||
|
WORKDIR /config/Desktop
|
8
FAQ.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# FAQ for development
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
### Integration tests fail
|
||||||
|
|
||||||
|
Try to run the command in the console `java -jar ...` and remove `-Dlogging.pattern.console=` from the command line.
|
||||||
|
|
1
PULL_REQUEST_TEMPLATE.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
Thank you for submitting a pull request to the WebGoat!
|
146
README.MD
@ -1,146 +0,0 @@
|
|||||||
# WebGoat 8: A deliberately insecure Web Application
|
|
||||||
|
|
||||||
[](https://travis-ci.org/WebGoat/WebGoat)
|
|
||||||
[](https://coveralls.io/github/WebGoat/WebGoat?branch=master)
|
|
||||||
[](https://www.codacy.com/app/dm/WebGoat)
|
|
||||||
[](https://www.owasp.org/index.php/OWASP_Project_Inventory#tab=Labs_Projects)
|
|
||||||
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
|
||||||
[](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
|
||||||
|
|
||||||
# Introduction
|
|
||||||
|
|
||||||
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
|
|
||||||
application security lessons.
|
|
||||||
|
|
||||||
This program is a demonstration of common server-side application flaws. The
|
|
||||||
exercises are intended to be used by people to learn about application security and
|
|
||||||
penetration testing techniques.
|
|
||||||
|
|
||||||
**WARNING 1:** *While running this program your machine will be extremely
|
|
||||||
vulnerable to attack. You should disconnect from the Internet while using
|
|
||||||
this program.* WebGoat's default configuration binds to localhost to minimize
|
|
||||||
the exposure.
|
|
||||||
|
|
||||||
**WARNING 2:** *This program is for educational purposes only. If you attempt
|
|
||||||
these techniques without authorization, you are very likely to get caught. If
|
|
||||||
you are caught engaging in unauthorized hacking, most companies will fire you.
|
|
||||||
Claiming that you were doing security research will not work as that is the
|
|
||||||
first thing that all hackers claim.*
|
|
||||||
|
|
||||||
# Installation Instructions:
|
|
||||||
|
|
||||||
## 1. Run using Docker
|
|
||||||
|
|
||||||
Every release is also published on [DockerHub]((https://hub.docker.com/r/webgoat/webgoat-8.0/)).
|
|
||||||
|
|
||||||
### Using docker run
|
|
||||||
|
|
||||||
The easiest way to start WebGoat as a Docker container is to use the all-in-one docker container. This is a docker image that has WebGoat and WebWolf running inside.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker run -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf
|
|
||||||
```
|
|
||||||
|
|
||||||
WebGoat will be located at: http://127.0.0.1:8080/WebGoat
|
|
||||||
WebWolf will be located at: http://127.0.0.1:9090/WebWolf
|
|
||||||
|
|
||||||
**Important**: Choose the correct timezone, so that the docker container and your host are in the same timezone. As it important for the validity of JWT tokens used in certain exercises.
|
|
||||||
|
|
||||||
### Using docker stack deploy
|
|
||||||
|
|
||||||
Another way to deply WebGoat and WebWolf in a more advanced way is to use a compose-file in a docker stack deploy.
|
|
||||||
You can define which containers should run in which combinations and define all of this in a yaml file.
|
|
||||||
An example of such a file is: [goat-with-reverseproxy.yaml](goat-with-reverseproxy.yaml)
|
|
||||||
|
|
||||||
This sets up an nginx webserver as reverse proxy to WebGoat and WebWolf. You can change the timezone by adjusting the value in the yaml file.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker stack init
|
|
||||||
docker stack deploy --compose-file goat-with-reverseproxy.yaml webgoatdemo
|
|
||||||
```
|
|
||||||
|
|
||||||
Add the following entries in your local hosts file:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
127.0.0.1 www.webgoat.local www.webwolf.localhost
|
|
||||||
```
|
|
||||||
|
|
||||||
You can use the overall start page: http://www.webgoat.local or:
|
|
||||||
|
|
||||||
WebGoat will be located at: http://www.webgoat.local/WebGoat
|
|
||||||
|
|
||||||
WebWolf will be located at: http://www.webwolf.local/WebWolf
|
|
||||||
|
|
||||||
**Important**: the current directory on your host will be mapped into the container for keeping state.
|
|
||||||
|
|
||||||
## 2. Standalone
|
|
||||||
|
|
||||||
Download the latest WebGoat and WebWolf release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
|
||||||
|
|
||||||
```Shell
|
|
||||||
java -jar webgoat-server-8.1.0.jar [--server.port=8080] [--server.address=localhost]
|
|
||||||
java -jar webwolf-8.1.0.jar [--server.port=9090] [--server.address=localhost]
|
|
||||||
```
|
|
||||||
|
|
||||||
The latest version of WebGoat needs Java 11 or above. By default WebGoat and WebWolf start on port 8080,9000 and 9090 with the environment variable WEBGOAT_PORT, WEBWOLF_PORT and WEBGOAT_HSQLPORT you can set different values.
|
|
||||||
```Shell
|
|
||||||
export WEBGOAT_PORT=18080
|
|
||||||
export WEBGOAT_HSQLPORT=19001
|
|
||||||
export WEBWOLF_PORT=19090
|
|
||||||
java -jar webgoat-server-8.1.0.jar
|
|
||||||
java -jar webwolf-8.1.0.jar
|
|
||||||
```
|
|
||||||
Use set in stead of export on Windows cmd.
|
|
||||||
|
|
||||||
|
|
||||||
## 3. Run from the sources
|
|
||||||
|
|
||||||
### Prerequisites:
|
|
||||||
|
|
||||||
* Java 11
|
|
||||||
* Maven > 3.2.1
|
|
||||||
* Your favorite IDE
|
|
||||||
* Git, or Git support in your IDE
|
|
||||||
|
|
||||||
Open a command shell/window:
|
|
||||||
|
|
||||||
```Shell
|
|
||||||
git clone git@github.com:WebGoat/WebGoat.git
|
|
||||||
```
|
|
||||||
|
|
||||||
Now let's start by compiling the project.
|
|
||||||
|
|
||||||
```Shell
|
|
||||||
cd WebGoat
|
|
||||||
git checkout <<branch_name>>
|
|
||||||
mvn clean install
|
|
||||||
```
|
|
||||||
|
|
||||||
Now we are ready to run the project. WebGoat 8.x is using Spring-Boot.
|
|
||||||
|
|
||||||
```Shell
|
|
||||||
mvn -pl webgoat-server spring-boot:run
|
|
||||||
```
|
|
||||||
... you should be running webgoat on localhost:8080/WebGoat momentarily
|
|
||||||
|
|
||||||
|
|
||||||
To change IP address add the following variable to WebGoat/webgoat-container/src/main/resources/application.properties file
|
|
||||||
|
|
||||||
```
|
|
||||||
server.address=x.x.x.x
|
|
||||||
```
|
|
||||||
|
|
||||||
## 4. Run with custom menu
|
|
||||||
|
|
||||||
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting environment variables.
|
|
||||||
|
|
||||||
For instance running as a jar on a Linux/MacOS it will look like:
|
|
||||||
```Shell
|
|
||||||
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
|
|
||||||
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
|
|
||||||
java -jar webgoat-server/target/webgoat-server-v8.2.0-SNAPSHOT.jar
|
|
||||||
```
|
|
||||||
Or in a docker run it would (once this version is pushed into docker hub) look like:
|
|
||||||
```Shell
|
|
||||||
docker run -d -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/goatandwolf
|
|
||||||
```
|
|
145
README.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# WebGoat 8: A deliberately insecure Web Application
|
||||||
|
|
||||||
|
[](https://github.com/WebGoat/WebGoat/actions/workflows/build.yml)
|
||||||
|
[](https://jdk.java.net/)
|
||||||
|
[](https://owasp.org/projects/)
|
||||||
|
[](https://github.com/WebGoat/WebGoat/releases/latest)
|
||||||
|
[](https://gitter.im/OWASPWebGoat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||||
|
[](https://github.com/WebGoat/WebGoat/discussions)
|
||||||
|
[](https://conventionalcommits.org)
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
WebGoat is a deliberately insecure web application maintained by [OWASP](http://www.owasp.org/) designed to teach web
|
||||||
|
application security lessons.
|
||||||
|
|
||||||
|
This program is a demonstration of common server-side application flaws. The
|
||||||
|
exercises are intended to be used by people to learn about application security and
|
||||||
|
penetration testing techniques.
|
||||||
|
|
||||||
|
**WARNING 1:** *While running this program your machine will be extremely
|
||||||
|
vulnerable to attack. You should disconnect from the Internet while using
|
||||||
|
this program.* WebGoat's default configuration binds to localhost to minimize
|
||||||
|
the exposure.
|
||||||
|
|
||||||
|
**WARNING 2:** *This program is for educational purposes only. If you attempt
|
||||||
|
these techniques without authorization, you are very likely to get caught. If
|
||||||
|
you are caught engaging in unauthorized hacking, most companies will fire you.
|
||||||
|
Claiming that you were doing security research will not work as that is the
|
||||||
|
first thing that all hackers claim.*
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Installation instructions:
|
||||||
|
|
||||||
|
For more details check [the Contribution guide](/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
## 1. Run using Docker
|
||||||
|
|
||||||
|
Already have a browser and ZAP and/or Burp installed on your machine in this case you can run the WebGoat image directly using Docker.
|
||||||
|
|
||||||
|
Every release is also published on [DockerHub](https://hub.docker.com/r/webgoat/webgoat).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 webgoat/webgoat
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to reuse the container, give it a name:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run --name webgoat -it -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 webgoat/webgoat
|
||||||
|
```
|
||||||
|
|
||||||
|
As long as you don't remove the container you can use:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker start webgoat
|
||||||
|
```
|
||||||
|
|
||||||
|
This way, you can start where you left off. If you remove the container, you need to use `docker run` again.
|
||||||
|
|
||||||
|
## 2. Run using Docker with complete Linux Desktop
|
||||||
|
|
||||||
|
Instead of installing tools locally we have a complete Docker image based on running a desktop in your browser. This way you only have to run a Docker image which will give you the best user experience.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -p 127.0.0.1:3000:3000 webgoat/webgoat-desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Standalone
|
||||||
|
|
||||||
|
Download the latest WebGoat release from [https://github.com/WebGoat/WebGoat/releases](https://github.com/WebGoat/WebGoat/releases)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
java -Dfile.encoding=UTF-8 -Dwebgoat.port=8080 -Dwebwolf.port=9090 -jar webgoat-2023.3.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
Click the link in the log to start WebGoat.
|
||||||
|
|
||||||
|
## 4. Run from the sources
|
||||||
|
|
||||||
|
### Prerequisites:
|
||||||
|
|
||||||
|
* Java 17
|
||||||
|
* Your favorite IDE
|
||||||
|
* Git, or Git support in your IDE
|
||||||
|
|
||||||
|
Open a command shell/window:
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
git clone git@github.com:WebGoat/WebGoat.git
|
||||||
|
```
|
||||||
|
|
||||||
|
Now let's start by compiling the project.
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
cd WebGoat
|
||||||
|
git checkout <<branch_name>>
|
||||||
|
# On Linux/Mac:
|
||||||
|
./mvnw clean install
|
||||||
|
|
||||||
|
# On Windows:
|
||||||
|
./mvnw.cmd clean install
|
||||||
|
|
||||||
|
# Using docker or podman, you can than build the container locally
|
||||||
|
docker build -f Dockerfile . -t webgoat/webgoat
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we are ready to run the project. WebGoat is using Spring Boot.
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
# On Linux/Mac:
|
||||||
|
./mvnw spring-boot:run
|
||||||
|
# On Windows:
|
||||||
|
./mvnw.cmd spring-boot:run
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
... you should be running WebGoat on http://localhost:8080/WebGoat momentarily.
|
||||||
|
|
||||||
|
Note: The above link will redirect you to login page if you are not logged in. LogIn/Create account to proceed.
|
||||||
|
|
||||||
|
To change the IP address add the following variable to the `WebGoat/webgoat-container/src/main/resources/application.properties` file:
|
||||||
|
|
||||||
|
```
|
||||||
|
server.address=x.x.x.x
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Run with custom menu
|
||||||
|
|
||||||
|
For specialist only. There is a way to set up WebGoat with a personalized menu. You can leave out some menu categories or individual lessons by setting certain environment variables.
|
||||||
|
|
||||||
|
For instance running as a jar on a Linux/macOS it will look like this:
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
export EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE"
|
||||||
|
export EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations"
|
||||||
|
java -jar target/webgoat-2023.3-SNAPSHOT.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
Or in a docker run it would (once this version is pushed into docker hub) look like this:
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
docker run -d -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e EXCLUDE_CATEGORIES="CLIENT_SIDE,GENERAL,CHALLENGE" -e EXCLUDE_LESSONS="SqlInjectionAdvanced,SqlInjectionMitigations" webgoat/webgoat
|
||||||
|
```
|
||||||
|
|
34
README_I18N.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Multi language support in WebGoat
|
||||||
|
|
||||||
|
WebGoat is mainly written in English, but it does support multiple languages.
|
||||||
|
|
||||||
|
## Default language selection
|
||||||
|
|
||||||
|
1. Current supported languages are: en, fr, de, nl
|
||||||
|
2. The primary language is based on the language setting of the browser.
|
||||||
|
3. If the language is not in the list of supported language, the language is English
|
||||||
|
4. Once logged in, you can switch between the supported languages using a language dropdown menu on the main page
|
||||||
|
1. After switching a language you are back at the Introduction page
|
||||||
|
|
||||||
|
## Adding a new language
|
||||||
|
|
||||||
|
The following steps are required when you want to add a new language
|
||||||
|
|
||||||
|
1. Update [main_new.html](src/main/resources/webgoat/static/main_new.html)
|
||||||
|
1. Add the parts for showing the flag and providing the correct value for the flag= parameter
|
||||||
|
2.
|
||||||
|
3. Add a flag image to src/main/resources/webgoat/static/css/img
|
||||||
|
1. See the main_new.html for a link to download flag resources
|
||||||
|
4. Add a welcome page to the introduction lesson
|
||||||
|
1. Copy Introduction_.adoc to Introduction_es.adoc (if in this case you want to add Spanish)
|
||||||
|
2. Add a highlighted section that explains that most parts of WebGoat will still be in English and invite people to translate parts where it would be valuable
|
||||||
|
5. Translate the main labels
|
||||||
|
1. Copy messages.properties to messages_es.properties (if in this case you want to add Spanish)
|
||||||
|
2. Translate the label values
|
||||||
|
6. Optionally translate lessons by
|
||||||
|
1. Adding lang specifc adoc files in documentation folder of the lesson
|
||||||
|
2. Adding WebGoatLabels.properties of a specific language if you want to
|
||||||
|
7. Run mvn clean to see if the LabelAndHintIntegration test passes
|
||||||
|
8. Run WebGoat and verify that your own language and the other languages work as expected
|
||||||
|
|
||||||
|
If you only want to translate more for a certain language, you only need to do step 4-8
|
133
RELEASE_NOTES.md
@ -1,5 +1,122 @@
|
|||||||
# WebGoat release notes
|
# WebGoat release notes
|
||||||
|
|
||||||
|
## Version 2023.4
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- [#1422 Add Docker Linux Desktop variant with all tools installed](https://github.com/WebGoat/WebGoat/issues/1422). Thanks to the [OWASP WrongSecrets project](https://owasp.org/www-project-wrongsecrets/) we now have a Docker Linux desktop image with all the tools installed. No need to install any tools locally only run the new Docker image. See README.md for details on how to start it.
|
||||||
|
- [#1411 JWT: looks that buy as Tom also works with alg:none](https://github.com/WebGoat/WebGoat/issues/1411).
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#1410 WebWolf: JWT decode is broken](https://github.com/WebGoat/WebGoat/issues/1410).
|
||||||
|
- [#1396 password_reset return 500 Error](https://github.com/WebGoat/WebGoat/issues/1396).
|
||||||
|
- [#1379 Move XXE to A05:2021-Security Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379).
|
||||||
|
|
||||||
|
## Version 2023.3
|
||||||
|
|
||||||
|
With great pleasure, we present you with a new release of WebGoat **2023.3**. Finally, it has been a while. This year starts with a new release of WebGoat. This year we will undoubtedly release more often. From this release on, we began to use a new versioning scheme (https://calver.org/#scheme).
|
||||||
|
|
||||||
|
A big thanks to René Zubcevic and Àngel Ollé Blázquez for keeping the project alive this last year, and hopefully, we can make
|
||||||
|
many more releases this year.
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- New year's resolution(2022): major refactoring of WebGoat to simplify the setup and improve building times.
|
||||||
|
- Move away from multi-project setup:
|
||||||
|
* This has a huge performance benefit when building the application. Build time locally is now `Total time: 42.469 s` (depends on your local machine of course)
|
||||||
|
* No longer add Maven dependencies in several places
|
||||||
|
* H2 no longer needs to run as separate process, which solves the issue of WebWolf sharing and needing to configure the correct database connection.
|
||||||
|
- More explicit paths in html files to reference `adoc` files, less magic.
|
||||||
|
- Integrate WebWolf in WebGoat, the setup was way too complicated and needed configuration which could lead to mistakes and a not working application. This also simplifies the Docker configuration as there is only 1 Docker image.
|
||||||
|
- Add WebWolf button in WebGoat
|
||||||
|
- Move all lessons into `src/main/resources`
|
||||||
|
- WebGoat selects a port dynamically when starting. It will still start of port 8080 it will try another port to ease the user experience.
|
||||||
|
- WebGoat logs URL after startup: `Please browse to http://127.0.0.1:8080/WebGoat to get started...`
|
||||||
|
- Simplify `Dockerfile` as we no longer need a script to start everything
|
||||||
|
- Maven build now start WebGoat jar with Maven plugin to make sure we run against the latest build.
|
||||||
|
- Added `Initializable` interface for a lesson, an assignment can implement this interface to set it up for a specific user and to reset the assignment back to its original state when a reset lesson occurs. See `BlindSendFileAssignment` for an example.
|
||||||
|
- Integration tests now use the same user. This saves a lot of time as before every test used a different user which triggered the Flyway migration to set up the database schema for the user. This migration took a lot of time.
|
||||||
|
- Updated introduction lesson to WebWolf.
|
||||||
|
- Added language switch for support for multiple languages.
|
||||||
|
- Removed logic to start WebGoat on a random port when port `8080` is taken. We would loop until we found a free port. We simplified this to just start on the specified port.
|
||||||
|
- Add Google formatter for all our code, a PR now checks whether the code adheres to the standard.
|
||||||
|
- Renaming of all packages and folders.
|
||||||
|
- [#1039 New OWASP Top 10](https://github.com/WebGoat/WebGoat/issues/1093)
|
||||||
|
- [#1065 New lesson about logging](https://github.com/WebGoat/WebGoat/issues/1065)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#1193 Vulnerable component lesson - java.desktop does not "opens java.beans" to unnamed module](https://github.com/WebGoat/WebGoat/issues/1193)
|
||||||
|
- [#1176 Minor: XXE lesson 12 patch not reset by 'lesson reset' while it IS reset by leaving/returning to lesson](https://github.com/WebGoat/WebGoat/issues/1176)
|
||||||
|
- [#1134 "Exploiting XStream" assignment does not work](https://github.com/WebGoat/WebGoat/issues/1134)
|
||||||
|
- [#1130 Typo: Using Indrect References](https://github.com/WebGoat/WebGoat/issues/1130)
|
||||||
|
- [#1101 SQL lesson not correct](https://github.com/WebGoat/WebGoat/issues/1101)
|
||||||
|
- [#1079 startup.sh issues of WebWolf - cannot connect to the WebGoat DB](https://github.com/WebGoat/WebGoat/issues/1079)
|
||||||
|
- [#1379 Move XXE to A05:2021-_Security_ Misconfiguration](https://github.com/WebGoat/WebGoat/issues/1379)
|
||||||
|
- [#1298 SocketUtils is deprecated and will be removed in Spring Security 6](https://github.com/WebGoat/WebGoat/issues/1298)
|
||||||
|
- [#1248 Rewrite the WebWolf Introduction Lesson with the new changes](https://github.com/WebGoat/WebGoat/issues/1248)
|
||||||
|
- [#1200 Type cast error in sample code at JWT token section](https://github.com/WebGoat/WebGoat/issues/1200)
|
||||||
|
- [#1173 --server.port=9000 is not respected on Windows (both cmd as Powershell)](https://github.com/WebGoat/WebGoat/issues/1173)
|
||||||
|
- [#1103 (A1) path traversel lesson 7 seems broken](https://github.com/WebGoat/WebGoat/issues/1103)
|
||||||
|
- [#986 - User registration not persistant](https://github.com/WebGoat/WebGoat/issues/986)
|
||||||
|
|
||||||
|
## Version 8.2.2
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- Docker image now supports nginx when browsing to http://localhost a landing page is shown.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#1039 jwt-7-Code review](https://github.com/WebGoat/WebGoat/issues/1039)
|
||||||
|
- [#1031 SQL Injection (intro) 5: Data Control Language (DCL) the wiki's solution is not correct](https://github.com/WebGoat/WebGoat/issues/1031)
|
||||||
|
- [#1027 Webgoat 8.2.1 Vulnerable_Components_12 Shows internal server error](https://github.com/WebGoat/WebGoat/issues/1027)
|
||||||
|
|
||||||
|
## Version 8.2.1
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- New Docker image for arm64 architecture is now available (for Apple M1)
|
||||||
|
|
||||||
|
## Version 8.2.0
|
||||||
|
|
||||||
|
### New functionality
|
||||||
|
|
||||||
|
- Add new zip slip lesson (part of path traversal)
|
||||||
|
- SQL lessons are now separate for each user, database are now per user and no longer shared across users
|
||||||
|
- Moved to Java 15 & Spring Boot 2.4 & moved to JUnit 5
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- [#974 SQL injection Intro 5 not solvable](https://github.com/WebGoat/WebGoat/issues/974)
|
||||||
|
- [#962 SQL-Lesson 5 (Advanced) Solvable with wrong anwser](https://github.com/WebGoat/WebGoat/issues/962)
|
||||||
|
- [#961 SQl-Injection lesson 4 not deleting created row](https://github.com/WebGoat/WebGoat/issues/961)
|
||||||
|
- [#949 Challenge: Admin password reset always solvable](https://github.com/WebGoat/WebGoat/issues/949)
|
||||||
|
- [#923 - Upgrade to Java 15](https://github.com/WebGoat/WebGoat/issues/923)
|
||||||
|
- [#922 - Vulnerable components lesson](https://github.com/WebGoat/WebGoat/issues/922)
|
||||||
|
- [#891 - Update the OWASP website with the new all-in-one Docker container](https://github.com/WebGoat/WebGoat/issues/891)
|
||||||
|
- [#844 - Suggestion: Update navigation](https://github.com/WebGoat/WebGoat/issues/844)
|
||||||
|
- [#843 - Bypass front-end restrictions: Field restrictions - confusing text in form](https://github.com/WebGoat/WebGoat/issues/843)
|
||||||
|
- [#841 - XSS - Reflected XSS confusing instruction and success messages](https://github.com/WebGoat/WebGoat/issues/841)
|
||||||
|
- [#839 - SQL Injection (mitigation) Order by clause confusing](https://github.com/WebGoat/WebGoat/issues/839)
|
||||||
|
- [#838 - SQL mitigation (filtering) can only be passed by updating table](https://github.com/WebGoat/WebGoat/issues/838)
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
Special thanks to the following contributors providing us with a pull request:
|
||||||
|
|
||||||
|
- nicholas-quirk
|
||||||
|
- VijoPlays
|
||||||
|
- aolle
|
||||||
|
- trollingHeifer
|
||||||
|
- maximmasiutin
|
||||||
|
- toshihue
|
||||||
|
- avivmu
|
||||||
|
- KellyMarchewa
|
||||||
|
- NatasG
|
||||||
|
- gabe-sky
|
||||||
|
|
||||||
## Version 8.1.0
|
## Version 8.1.0
|
||||||
|
|
||||||
### New functionality
|
### New functionality
|
||||||
@ -20,13 +137,13 @@
|
|||||||
- [#766 - Unclear objective of vulnerable components practical assignment](https://github.com/WebGoat/WebGoat/issues/766)
|
- [#766 - Unclear objective of vulnerable components practical assignment](https://github.com/WebGoat/WebGoat/issues/766)
|
||||||
- [#708 - Seems like the home directory of WebGoat always use @project.version@](https://github.com/WebGoat/WebGoat/issues/708)
|
- [#708 - Seems like the home directory of WebGoat always use @project.version@](https://github.com/WebGoat/WebGoat/issues/708)
|
||||||
- [#719 - WebGoat: 'Contact Us' email link in header is not correctly set](https://github.com/WebGoat/WebGoat/issues/719)
|
- [#719 - WebGoat: 'Contact Us' email link in header is not correctly set](https://github.com/WebGoat/WebGoat/issues/719)
|
||||||
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
|
- [#715 - Reset lesson doesn't reset the "HTML lesson" => forms stay succesful](https://github.com/WebGoat/WebGoat/issues/715)
|
||||||
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
|
- [#725 - Vulnerable Components lesson 12 broken due to too new dependency](https://github.com/WebGoat/WebGoat/issues/725)
|
||||||
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
|
- [#716 - On M26 @project.version@ is not "interpreted" #7](https://github.com/WebGoat/WebGoat/issues/716)
|
||||||
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
|
- [#721 couldn't be able to run CSRF lesson 3: Receive Whitelabel Error Page](https://github.com/WebGoat/WebGoat/issues/721)
|
||||||
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
|
- [#724 - Dead link in VulnerableComponents lesson 11](https://github.com/WebGoat/WebGoat/issues/724)
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
Special thanks to the following contributors providing us with a pull request:
|
Special thanks to the following contributors providing us with a pull request:
|
||||||
|
|
||||||
@ -42,9 +159,5 @@ Special thanks to the following contributors providing us with a pull request:
|
|||||||
|
|
||||||
And everyone who provided feedback through Github.
|
And everyone who provided feedback through Github.
|
||||||
|
|
||||||
|
|
||||||
Team WebGoat
|
Team WebGoat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
version: 0.1
|
|
||||||
|
|
||||||
phases:
|
|
||||||
build:
|
|
||||||
commands:
|
|
||||||
- mvn package
|
|
||||||
|
|
||||||
artifacts:
|
|
||||||
files:
|
|
||||||
- webgoat-server/target/webgoat-server-8.0-SNAPSHOT.jar
|
|
||||||
discard-paths: yes
|
|
||||||
|
|
77
config/dependency-check/project-suppression.xml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
This suppresses all CVE entries that have a score below CVSS 7.
|
||||||
|
]]></notes>
|
||||||
|
<cvssBelow>7</cvssBelow>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: spring-tx-5.3.21.jar
|
||||||
|
]]></notes>
|
||||||
|
<sha1>13f4f564024d2f85502c151942307c3ca851a4f7</sha1>
|
||||||
|
<cve>CVE-2016-1000027</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: spring-core-5.3.21.jar
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-core@.*$</packageUrl>
|
||||||
|
<cve>CVE-2016-1000027</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: spring-aop-5.3.21.jar
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-aop@.*$</packageUrl>
|
||||||
|
<cve>CVE-2016-1000027</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: spring-boot-starter-security-2.7.1.jar
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework\.boot/spring\-boot\-starter\-security@.*$</packageUrl>
|
||||||
|
<cve>CVE-2022-22978</cve>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: jruby-stdlib-9.2.20.1.jar: jopenssl.jar (shaded: rubygems:jruby-openssl:0.11.0)
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/rubygems/jruby\-openssl@.*$</packageUrl>
|
||||||
|
<cpe>cpe:/a:jruby:jruby</cpe>
|
||||||
|
<cpe>cpe:/a:openssl:openssl</cpe>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: xstream-1.4.5.jar
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/com\.thoughtworks\.xstream/xstream@.*$</packageUrl>
|
||||||
|
<cpe>cpe:/a:xstream_project:xstream</cpe>
|
||||||
|
<vulnerabilityName>CVE-2013-7285</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2016-3674</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2017-7957</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2020-26217</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2020-26258</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2020-26259</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21341</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21342</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21343</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21344</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21345</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21346</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21347</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21348</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21349</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21350</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-21351</vulnerabilityName>
|
||||||
|
<vulnerabilityName>CVE-2021-43859</vulnerabilityName>
|
||||||
|
</suppress>
|
||||||
|
<suppress>
|
||||||
|
<notes><![CDATA[
|
||||||
|
file name: spring-jcl-5.3.21.jar
|
||||||
|
]]></notes>
|
||||||
|
<packageUrl regex="true">^pkg:maven/org\.springframework/spring\-.*@.*$</packageUrl>
|
||||||
|
<cve>CVE-2016-1000027</cve>
|
||||||
|
</suppress>
|
||||||
|
</suppressions>
|
10
config/desktop/WebGoat.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
** Welcome to WebGoat desktop image
|
||||||
|
|
||||||
|
With this image you have WebGoat and ZAP and a browser available to you in a browser running on Ubuntu.
|
||||||
|
You can start WebGoat and ZAP by opening a terminal and type:
|
||||||
|
|
||||||
|
./start-webgoat.sh
|
||||||
|
./start_zap.sh
|
||||||
|
|
||||||
|
Happy hacking,
|
||||||
|
Team WebGoat
|
17
config/desktop/start_webgoat.sh
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
/config/jdk-17.0.6+10-jre/bin/java \
|
||||||
|
-Duser.home=/config \
|
||||||
|
-Dfile.encoding=UTF-8 \
|
||||||
|
-DTZ=Europe/Amsterdam \
|
||||||
|
--add-opens java.base/java.lang=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/java.util=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/java.text=ALL-UNNAMED \
|
||||||
|
--add-opens java.desktop/java.beans=ALL-UNNAMED \
|
||||||
|
--add-opens java.desktop/java.awt.font=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/sun.nio.ch=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/java.io=ALL-UNNAMED \
|
||||||
|
--add-opens java.base/java.util=ALL-UNNAMED \
|
||||||
|
-Drunning.in.docker=false \
|
||||||
|
-jar /config/webgoat.jar
|
3
config/desktop/start_zap.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
/config/jdk-17.0.6+10-jre/bin/java -jar /config/ZAP_2.12.0/zap-2.12.0.jar
|
@ -1,13 +0,0 @@
|
|||||||
version: '2.1'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-v8.0.0.snapshot
|
|
||||||
extends:
|
|
||||||
file: docker-compose.yml
|
|
||||||
service: webgoat
|
|
||||||
webwolf:
|
|
||||||
extends:
|
|
||||||
file: docker-compose.yml
|
|
||||||
service: webwolf
|
|
||||||
image: webgoat/webwolf-v8.0.0.snapshot
|
|
@ -1,40 +0,0 @@
|
|||||||
version: '2.0'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-8.0
|
|
||||||
user: webgoat
|
|
||||||
environment:
|
|
||||||
- WEBWOLF_HOST=webwolf
|
|
||||||
- WEBWOLF_PORT=9090
|
|
||||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
|
||||||
- spring.datasource.username=webgoat
|
|
||||||
- spring.datasource.password=webgoat
|
|
||||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
|
||||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
|
|
||||||
- webgoat.server.directory=/home/webgoat/.webgoat/
|
|
||||||
- webgoat.user.directory=/home/webgoat/.webgoat/
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
webwolf:
|
|
||||||
image: webgoat/webwolf
|
|
||||||
environment:
|
|
||||||
- spring.datasource.url=jdbc:postgresql://webgoat_db:5432/webgoat?user=webgoat&password=webgoat
|
|
||||||
- spring.datasource.username=webgoat
|
|
||||||
- spring.datasource.password=webgoat
|
|
||||||
- spring.datasource.driver-class-name=org.postgresql.Driver
|
|
||||||
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
webgoat_db:
|
|
||||||
image: postgres:10.12
|
|
||||||
# Uncomment to store the state of the database on the host.
|
|
||||||
# volumes:
|
|
||||||
# - ./database:/var/lib/postgresql
|
|
||||||
environment:
|
|
||||||
- POSTGRES_PASSWORD=webgoat
|
|
||||||
- POSTGRES_USER=webgoat
|
|
||||||
- POSTGRES_DB=webgoat
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
|
|
||||||
services:
|
|
||||||
webgoat:
|
|
||||||
image: webgoat/webgoat-8.0
|
|
||||||
environment:
|
|
||||||
- WEBWOLF_HOST=webwolf
|
|
||||||
- WEBWOLF_PORT=9090
|
|
||||||
- TZ=Europe/Amsterdam
|
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
- "9001:9001"
|
|
||||||
volumes:
|
|
||||||
- .:/home/webgoat/.webgoat
|
|
||||||
working_dir: /home/webgoat
|
|
||||||
webwolf:
|
|
||||||
image: webgoat/webwolf
|
|
||||||
ports:
|
|
||||||
- "9090:9090"
|
|
||||||
command: --spring.datasource.url=jdbc:hsqldb:hsql://webgoat:9001/webgoat --server.address=0.0.0.0
|
|
||||||
depends_on:
|
|
||||||
- webgoat
|
|
1
docker/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
*.jar
|
|
@ -1,32 +0,0 @@
|
|||||||
FROM openjdk:11.0.1-jre-slim-stretch
|
|
||||||
|
|
||||||
ARG webgoat_version=v8.2.0-SNAPSHOT
|
|
||||||
ENV webgoat_version_env=${webgoat_version}
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install
|
|
||||||
RUN useradd --home-dir /home/webgoat --create-home -U webgoat
|
|
||||||
RUN cd /home/webgoat/;
|
|
||||||
RUN chgrp -R 0 /home/webgoat
|
|
||||||
RUN chmod -R g=u /home/webgoat
|
|
||||||
RUN apt-get -y install apt-utils nginx
|
|
||||||
|
|
||||||
USER webgoat
|
|
||||||
|
|
||||||
COPY nginx.conf /etc/nginx/nginx.conf
|
|
||||||
COPY index.html /usr/share/nginx/html/
|
|
||||||
COPY webgoat-server-${webgoat_version}.jar /home/webgoat/webgoat.jar
|
|
||||||
COPY webwolf-${webgoat_version}.jar /home/webgoat/webwolf.jar
|
|
||||||
COPY start.sh /home/webgoat
|
|
||||||
|
|
||||||
EXPOSE 8080
|
|
||||||
EXPOSE 9090
|
|
||||||
|
|
||||||
ENV WEBGOAT_PORT 8080
|
|
||||||
ENV WEBGOAT_SSLENABLED false
|
|
||||||
|
|
||||||
ENV GOATURL https://127.0.0.1:$WEBGOAT_PORT
|
|
||||||
ENV WOLFURL http://127.0.0.1:9090
|
|
||||||
|
|
||||||
|
|
||||||
WORKDIR /home/webgoat
|
|
||||||
ENTRYPOINT /bin/bash /home/webgoat/start.sh $webgoat_version_env
|
|
@ -1,9 +0,0 @@
|
|||||||
# Docker all-in-one image
|
|
||||||
|
|
||||||
## Docker build
|
|
||||||
|
|
||||||
docker build --no-cache --build-arg webgoat_version=v8.2.0-SNAPSHOT -t webgoat/goatandwolf:latest .
|
|
||||||
|
|
||||||
## Docker run
|
|
||||||
|
|
||||||
docker run -d -p 80:8888 -p 8080:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf:latest
|
|
@ -1,43 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<h1>OWASP WebGoat Training tools</h1>
|
|
||||||
<p>
|
|
||||||
Use the following links to access the WebGoat and WebWolf applications.
|
|
||||||
Register a user using WebGoat. The same user can access WebWolf.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>Use without special host name entries</h2>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>WebGoat URL</td>
|
|
||||||
<td><a href="http://127.0.0.1:8080/WebGoat" target="_blank">http://127.0.0.1:8080/WebGoat</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>WebWolf URL</td>
|
|
||||||
<td><a href="http://127.0.0.1:9090/WebWolf" target="_blank">http://127.0.0.1:9090/WebWolf</a></td>
|
|
||||||
</tr>
|
|
||||||
<table>
|
|
||||||
|
|
||||||
<h2>Use with www.webgoat.local and www.webwolf.local</h2>
|
|
||||||
<p>
|
|
||||||
Add the following entries to your local <b><i>hosts</i></b> file on Windows (c:\Windows\System32\drivers\etc\hosts) or Linux (/etc/hosts)
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
127.0.0.1 www.webgoat.local www.webwolf.local
|
|
||||||
</pre>
|
|
||||||
Then use the following URL's:
|
|
||||||
</p>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>WebGoat URL</td>
|
|
||||||
<td><a href="http://www.webgoat.local/WebGoat" target="_blank">http://www.webgoat.local/WebGoat</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>WebWolf URL</td>
|
|
||||||
<td><a href="http://www.webwolf.local/WebWolf" target="_blank">http://www.webwolf.local/WebWolf</a></td>
|
|
||||||
</tr>
|
|
||||||
<table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,140 +0,0 @@
|
|||||||
error_log /tmp/error.log;
|
|
||||||
pid /tmp/nginx.pid;
|
|
||||||
|
|
||||||
worker_processes 1;
|
|
||||||
|
|
||||||
events { worker_connections 1024; }
|
|
||||||
|
|
||||||
http {
|
|
||||||
|
|
||||||
client_body_temp_path /tmp/client_body;
|
|
||||||
fastcgi_temp_path /tmp/fastcgi_temp;
|
|
||||||
proxy_temp_path /tmp/proxy_temp;
|
|
||||||
scgi_temp_path /tmp/scgi_temp;
|
|
||||||
uwsgi_temp_path /tmp/uwsgi_temp;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
|
|
||||||
upstream docker-webgoat {
|
|
||||||
server 127.0.0.1:8080;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream docker-webwolf {
|
|
||||||
server 127.0.0.1:9090;
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Host $server_name;
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 8888;
|
|
||||||
server_name www.webgoat.local;
|
|
||||||
|
|
||||||
root /var/www;
|
|
||||||
|
|
||||||
access_log /tmp/goataccess.log;
|
|
||||||
error_log /tmp/goaterror.log;
|
|
||||||
|
|
||||||
location ~* \.(png|jpg|jpeg|gif|ico|woff|otf|ttf|mvc|svg|txt|pdf|docx?|xlsx?)$ {
|
|
||||||
access_log off;
|
|
||||||
proxy_pass http://docker-webgoat;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html;
|
|
||||||
add_header Cache-Control no-cache;
|
|
||||||
expires 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /WebGoat {
|
|
||||||
proxy_pass http://docker-webgoat;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 8888;
|
|
||||||
server_name www.webwolf.local;
|
|
||||||
|
|
||||||
root /var/www;
|
|
||||||
|
|
||||||
access_log /tmp/wolfaccess.log;
|
|
||||||
error_log /tmp/wolferror.log;
|
|
||||||
|
|
||||||
location /WebGoat/PasswordReset/ForgotPassword/create-password-reset-link {
|
|
||||||
proxy_pass http://docker-webgoat;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /PasswordReset/reset/reset-password {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /files {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /tmpdir {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /webjars {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /css {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /login {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /images {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /mail {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /upload {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /js {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /landing {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /logout {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /WebWolf {
|
|
||||||
proxy_pass http://docker-webwolf;
|
|
||||||
proxy_redirect off;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>webgoat-all-in-one-docker</artifactId>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<parent>
|
|
||||||
<groupId>org.owasp.webgoat</groupId>
|
|
||||||
<artifactId>webgoat-parent</artifactId>
|
|
||||||
<version>${revision}</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
|
||||||
<version>1.8</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>install</phase>
|
|
||||||
<configuration>
|
|
||||||
<target>
|
|
||||||
<copy file="../webgoat-server/target/webgoat-server-${project.version}.jar" tofile="webgoat-server-${project.version}.jar"/>
|
|
||||||
<copy file="../webwolf/target/webwolf-${project.version}.jar" tofile="webwolf-${project.version}.jar"/>
|
|
||||||
</target>
|
|
||||||
</configuration>
|
|
||||||
<goals>
|
|
||||||
<goal>run</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cd /home/webgoat
|
|
||||||
service nginx start
|
|
||||||
sleep 1
|
|
||||||
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webgoat.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webgoat.log &
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
java -Duser.home=/home/webgoat -Dfile.encoding=UTF-8 -jar webwolf.jar --webgoat.build.version=$1 --server.address=0.0.0.0 > webwolf.log &
|
|
||||||
|
|
||||||
tail -300f webgoat.log
|
|
21
docs/LICENSE
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013-2019 Blackrock Digital LLC
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
@ -1,20 +1,4 @@
|
|||||||
# WebGoat landing page
|
# WebGoat landing page
|
||||||
|
|
||||||
This serves the Github pages for the landing page of WebGoat.
|
Old GitHub page which now redirects to OWASP website.
|
||||||
|
|
||||||
# Running locally
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -t --rm -v "$PWD":/usr/src/app -p "4000:4000" starefossen/github-pages
|
|
||||||
```
|
|
||||||
|
|
||||||
And then browse to http://localhost:4000/docs
|
|
||||||
|
|
||||||
# Thanks to
|
|
||||||
|
|
||||||
[Freelancer](http://startbootstrap.com/template-overviews/freelancer/) is a one page freelancer portfolio theme for [Bootstrap](http://getbootstrap.com/) created by [Start Bootstrap](http://startbootstrap.com/). This theme features several content sections, a responsive portfolio grid with hover effects, full page portfolio item modals, and a working PHP contact form.
|
|
||||||
|
|
||||||
## Copyright and License
|
|
||||||
|
|
||||||
Copyright 2013-2018 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/gh-pages/LICENSE) license.
|
|
||||||
|
|
||||||
|
@ -1,380 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light,
|
|
||||||
hr.star-dark {
|
|
||||||
max-width: 15rem;
|
|
||||||
padding: 0;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-top: solid 0.25rem;
|
|
||||||
margin-top: 2.5rem;
|
|
||||||
margin-bottom: 2.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after,
|
|
||||||
hr.star-dark:after {
|
|
||||||
position: relative;
|
|
||||||
top: -.8em;
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 0.25em;
|
|
||||||
content: '\f005';
|
|
||||||
font-family: FontAwesome;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light {
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark {
|
|
||||||
border-color: #2C3E50;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark:after {
|
|
||||||
color: #2C3E50;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
section {
|
|
||||||
padding: 6rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
section h2 {
|
|
||||||
font-size: 2.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
section h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-xl {
|
|
||||||
padding: 1rem 1.75rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-social {
|
|
||||||
width: 3.25rem;
|
|
||||||
height: 3.25rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-to-top {
|
|
||||||
z-index: 1042;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-to-top a {
|
|
||||||
width: 3.5rem;
|
|
||||||
height: 3.5rem;
|
|
||||||
background-color: rgba(33, 37, 41, 0.5);
|
|
||||||
line-height: 3.1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-brand {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav {
|
|
||||||
margin-top: 1rem;
|
|
||||||
letter-spacing: 0.0625rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link:hover {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link:active, #mainNav .navbar-nav li.nav-item a.nav-link:focus {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-nav li.nav-item a.nav-link.active {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mainNav .navbar-toggler {
|
|
||||||
font-size: 80%;
|
|
||||||
padding: 0.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1.5rem;
|
|
||||||
padding-bottom: 1.5rem;
|
|
||||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-brand {
|
|
||||||
font-size: 2em;
|
|
||||||
-webkit-transition: font-size 0.3s;
|
|
||||||
-moz-transition: font-size 0.3s;
|
|
||||||
transition: font-size 0.3s;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active {
|
|
||||||
color: #fff;
|
|
||||||
background: #18BC9C;
|
|
||||||
}
|
|
||||||
#mainNav .navbar-nav > li.nav-item > a.nav-link.active:active, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:focus, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: #18BC9C;
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink .navbar-brand {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 72px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
header.masthead h2 {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 106px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
}
|
|
||||||
header.masthead h1 {
|
|
||||||
font-size: 4.75em;
|
|
||||||
line-height: 4rem;
|
|
||||||
}
|
|
||||||
header.masthead h2 {
|
|
||||||
font-size: 1.75em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
max-width: 25rem;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption {
|
|
||||||
-webkit-transition: all ease 0.5s;
|
|
||||||
-moz-transition: all ease 0.5s;
|
|
||||||
transition: all ease 0.5s;
|
|
||||||
opacity: 0;
|
|
||||||
background-color: rgba(24, 188, 156, 0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -30px;
|
|
||||||
}
|
|
||||||
.portfolio .portfolio-item {
|
|
||||||
margin-bottom: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog {
|
|
||||||
padding: 3rem 1rem;
|
|
||||||
min-height: calc(100vh - 2rem);
|
|
||||||
margin: 1rem calc(1rem - 8px);
|
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
-moz-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
-webkit-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog .close-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 2rem;
|
|
||||||
right: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog .close-button i {
|
|
||||||
line-height: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.portfolio-modal .portfolio-modal-dialog {
|
|
||||||
min-height: 100vh;
|
|
||||||
padding: 5rem;
|
|
||||||
margin: 3rem calc(3rem - 8px);
|
|
||||||
}
|
|
||||||
.portfolio-modal .portfolio-modal-dialog h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group {
|
|
||||||
position: relative;
|
|
||||||
border-bottom: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group input,
|
|
||||||
.floating-label-form-group textarea {
|
|
||||||
font-size: 1.5em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
padding-right: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
resize: none;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
background: none;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group label {
|
|
||||||
font-size: 0.85em;
|
|
||||||
line-height: 1.764705882em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
top: 2em;
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
vertical-align: middle;
|
|
||||||
vertical-align: baseline;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group:not(:first-child) {
|
|
||||||
padding-left: 14px;
|
|
||||||
border-left: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-value label {
|
|
||||||
top: 0;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-focus label {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
form .row:first-child .floating-label-form-group {
|
|
||||||
border-top: 1px solid #e9ecef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 5rem;
|
|
||||||
background-color: #2C3E50;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copyright {
|
|
||||||
background-color: #1a252f;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:focus, a:hover, a:active {
|
|
||||||
color: #128f76;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
border-width: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-primary {
|
|
||||||
background-color: #18BC9C !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-secondary {
|
|
||||||
background-color: #2C3E50 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-primary {
|
|
||||||
color: #18BC9C !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-secondary {
|
|
||||||
color: #2C3E50 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary {
|
|
||||||
background-color: #18BC9C;
|
|
||||||
border-color: #18BC9C;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary:hover, .btn-primary:focus, .btn-primary:active {
|
|
||||||
background-color: #128f76;
|
|
||||||
border-color: #128f76;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary {
|
|
||||||
background-color: #2C3E50;
|
|
||||||
border-color: #2C3E50;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active {
|
|
||||||
background-color: #1a252f;
|
|
||||||
border-color: #1a252f;
|
|
||||||
}
|
|
1
docs/css/freelancer.min.css
vendored
137
docs/gulpfile.js
@ -1,137 +0,0 @@
|
|||||||
// Load plugins
|
|
||||||
const autoprefixer = require("gulp-autoprefixer");
|
|
||||||
const browsersync = require("browser-sync").create();
|
|
||||||
const cleanCSS = require("gulp-clean-css");
|
|
||||||
const gulp = require("gulp");
|
|
||||||
const header = require("gulp-header");
|
|
||||||
const plumber = require("gulp-plumber");
|
|
||||||
const rename = require("gulp-rename");
|
|
||||||
const sass = require("gulp-sass");
|
|
||||||
const uglify = require("gulp-uglify");
|
|
||||||
const pkg = require('./package.json');
|
|
||||||
|
|
||||||
// Set the banner content
|
|
||||||
const banner = ['/*!\n',
|
|
||||||
' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n',
|
|
||||||
' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n',
|
|
||||||
' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n',
|
|
||||||
' */\n',
|
|
||||||
'\n'
|
|
||||||
].join('');
|
|
||||||
|
|
||||||
// Copy third party libraries from /node_modules into /vendor
|
|
||||||
gulp.task('vendor', function(cb) {
|
|
||||||
|
|
||||||
// Bootstrap
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/bootstrap/dist/**/*',
|
|
||||||
'!./node_modules/bootstrap/dist/css/bootstrap-grid*',
|
|
||||||
'!./node_modules/bootstrap/dist/css/bootstrap-reboot*'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/bootstrap'))
|
|
||||||
|
|
||||||
// Font Awesome
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/@fortawesome/**/*',
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor'))
|
|
||||||
|
|
||||||
// jQuery
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/jquery/dist/*',
|
|
||||||
'!./node_modules/jquery/dist/core.js'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/jquery'))
|
|
||||||
|
|
||||||
// jQuery Easing
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/jquery.easing/*.js'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/jquery-easing'))
|
|
||||||
|
|
||||||
// Magnific Popup
|
|
||||||
gulp.src([
|
|
||||||
'./node_modules/magnific-popup/dist/*'
|
|
||||||
])
|
|
||||||
.pipe(gulp.dest('./vendor/magnific-popup'))
|
|
||||||
|
|
||||||
cb();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// CSS task
|
|
||||||
function css() {
|
|
||||||
return gulp
|
|
||||||
.src("./scss/*.scss")
|
|
||||||
.pipe(plumber())
|
|
||||||
.pipe(sass({
|
|
||||||
outputStyle: "expanded"
|
|
||||||
}))
|
|
||||||
.on("error", sass.logError)
|
|
||||||
.pipe(autoprefixer({
|
|
||||||
browsers: ['last 2 versions'],
|
|
||||||
cascade: false
|
|
||||||
}))
|
|
||||||
.pipe(header(banner, {
|
|
||||||
pkg: pkg
|
|
||||||
}))
|
|
||||||
.pipe(gulp.dest("./css"))
|
|
||||||
.pipe(rename({
|
|
||||||
suffix: ".min"
|
|
||||||
}))
|
|
||||||
.pipe(cleanCSS())
|
|
||||||
.pipe(gulp.dest("./css"))
|
|
||||||
.pipe(browsersync.stream());
|
|
||||||
}
|
|
||||||
|
|
||||||
// JS task
|
|
||||||
function js() {
|
|
||||||
return gulp
|
|
||||||
.src([
|
|
||||||
'./js/*.js',
|
|
||||||
'!./js/*.min.js',
|
|
||||||
'!./js/contact_me.js',
|
|
||||||
'!./js/jqBootstrapValidation.js'
|
|
||||||
])
|
|
||||||
.pipe(uglify())
|
|
||||||
.pipe(header(banner, {
|
|
||||||
pkg: pkg
|
|
||||||
}))
|
|
||||||
.pipe(rename({
|
|
||||||
suffix: '.min'
|
|
||||||
}))
|
|
||||||
.pipe(gulp.dest('./js'))
|
|
||||||
.pipe(browsersync.stream());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tasks
|
|
||||||
gulp.task("css", css);
|
|
||||||
gulp.task("js", js);
|
|
||||||
|
|
||||||
// BrowserSync
|
|
||||||
function browserSync(done) {
|
|
||||||
browsersync.init({
|
|
||||||
server: {
|
|
||||||
baseDir: "./"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
// BrowserSync Reload
|
|
||||||
function browserSyncReload(done) {
|
|
||||||
browsersync.reload();
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch files
|
|
||||||
function watchFiles() {
|
|
||||||
gulp.watch("./scss/**/*", css);
|
|
||||||
gulp.watch(["./js/**/*.js", "!./js/*.min.js"], js);
|
|
||||||
gulp.watch("./**/*.html", browserSyncReload);
|
|
||||||
}
|
|
||||||
|
|
||||||
gulp.task("default", gulp.parallel('vendor', css, js));
|
|
||||||
|
|
||||||
// dev task
|
|
||||||
gulp.task("dev", gulp.parallel(watchFiles, browserSync));
|
|
BIN
docs/images/webgoat.png
Normal file
After Width: | Height: | Size: 319 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 978 KiB |
Before Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 483 KiB |
Before Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.3 KiB |
284
docs/index.html
@ -12,287 +12,3 @@
|
|||||||
</h1>
|
</h1>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
<!--<head>-->
|
|
||||||
|
|
||||||
<!-- <meta charset="utf-8">-->
|
|
||||||
<!-- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">-->
|
|
||||||
<!-- <meta name="description" content="WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities-->
|
|
||||||
<!-- commonly found in Java-based applications that use common and popular open source components">-->
|
|
||||||
<!-- <meta name="author" content="WebGoat">-->
|
|
||||||
|
|
||||||
<!-- <title>WebGoat</title>-->
|
|
||||||
|
|
||||||
<!-- <!– Bootstrap core CSS –>-->
|
|
||||||
<!-- <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">-->
|
|
||||||
|
|
||||||
<!-- <!– Custom fonts for this template –>-->
|
|
||||||
<!-- <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">-->
|
|
||||||
<!-- <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">-->
|
|
||||||
<!-- <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css">-->
|
|
||||||
|
|
||||||
<!-- <!– Plugin CSS –>-->
|
|
||||||
<!-- <link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet" type="text/css">-->
|
|
||||||
|
|
||||||
<!-- <!– Custom styles for this template –>-->
|
|
||||||
<!-- <link href="css/freelancer.min.css" rel="stylesheet">-->
|
|
||||||
|
|
||||||
<!--</head>-->
|
|
||||||
|
|
||||||
<!--<body id="page-top">-->
|
|
||||||
|
|
||||||
<!-- <!– Navigation –>-->
|
|
||||||
<!-- <nav class="navbar navbar-expand-lg bg-secondary fixed-top text-uppercase" id="mainNav">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <!– Brand and toggle get grouped for better mobile display –>-->
|
|
||||||
<!-- <div class="navbar-header page-scroll">-->
|
|
||||||
<!-- <img class="img-responsive" src="img/profile.png" alt="">-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </nav>-->
|
|
||||||
|
|
||||||
<!-- <!– Header –>-->
|
|
||||||
<!-- <header class="masthead bg-primary text-white text-center">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-12">-->
|
|
||||||
<!-- <h2 class="text-center text-uppercase mb-5">Learn the hack - Stop the attack</h2>-->
|
|
||||||
<!-- -->
|
|
||||||
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-8 mx-auto">-->
|
|
||||||
<!-- <p>WebGoat is a deliberately insecure application that allows interested developers just like you to test vulnerabilities-->
|
|
||||||
<!-- commonly found in Java-based applications that use common and popular open source components.</p>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-lg-8 mx-auto">-->
|
|
||||||
<!-- <a href="https://github.com/WebGoat/WebGoat/releases" class="btn btn-xl btn-outline-light">-->
|
|
||||||
<!-- <i class="fa fa-download"></i> Download standalone-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- <a href="https://hub.docker.com/r/webgoat/webgoat-8.0/" class="btn btn-xl btn-outline-light">-->
|
|
||||||
<!-- <i class="fa fa-download"></i> Run using Docker-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </header>-->
|
|
||||||
|
|
||||||
<!-- <!– Portfolio Grid Section –>-->
|
|
||||||
<!-- <section class="portfolio" id="portfolio">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <h3 class="text-center text-uppercase text-secondary mb-0">Learn in 3 steps</h3>-->
|
|
||||||
<!-- <hr class="star-dark mb-5">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-md-6 col-lg-4 text-center">-->
|
|
||||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-1">-->
|
|
||||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
|
||||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
|
||||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <img class="img-fluid" src="img/portfolio/teach.png" alt="">-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-md-6 col-lg-4 text-center">-->
|
|
||||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-2">-->
|
|
||||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
|
||||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
|
||||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <img class="img-fluid" src="img/portfolio/assignment.png" alt="">-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-md-6 col-lg-4 text-center" >-->
|
|
||||||
<!-- <a class="portfolio-item d-block mx-auto" href="#portfolio-modal-3">-->
|
|
||||||
<!-- <div class="portfolio-item-caption d-flex position-absolute h-100 w-100">-->
|
|
||||||
<!-- <div class="portfolio-item-caption-content my-auto w-100 text-center text-white">-->
|
|
||||||
<!-- <i class="fa fa-search-plus fa-3x"></i>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <img class="img-fluid" src="img/portfolio/mitigation.png" alt="">-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </section>-->
|
|
||||||
|
|
||||||
<!-- <!– Goals Section –>-->
|
|
||||||
<!-- <section class="bg-primary text-white mb-0" id="goals">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <h3 class="text-center text-uppercase text-white">Goals</h3>-->
|
|
||||||
<!-- <hr class="star-light mb-5">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-6 ml-auto">-->
|
|
||||||
<!-- <p class="lead">-->
|
|
||||||
<!-- Web application security is difficult to learn and practice. Not many people have full blown web applications like online book -->
|
|
||||||
<!-- stores or online banks that can be used to scan for vulnerabilities. In addition, security professionals frequently need to test -->
|
|
||||||
<!-- tools against a platform known to be vulnerable to ensure that they perform as advertised. All of this needs to happen in a safe -->
|
|
||||||
<!-- and legal environment.-->
|
|
||||||
<!-- -->
|
|
||||||
<!-- </p>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-lg-6 mr-auto">-->
|
|
||||||
<!-- <p class="lead">Even if your intentions are good, we believe you should never attempt to find vulnerabilities without-->
|
|
||||||
<!-- permission. The primary goal of the WebGoat project is simple: create a de-facto interactive teaching environment for web application security. -->
|
|
||||||
<!-- In the future, the project team hopes to extend WebGoat into becoming a security benchmarking platform and a Java-based Web site Honeypot.-->
|
|
||||||
<!-- </p>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </section>-->
|
|
||||||
|
|
||||||
<!-- <!– Contributing Section –>-->
|
|
||||||
<!-- <section class="portfolio" id="portfolio">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <h3 class="text-center text-uppercase text-secondary mb-0">More information</h3>-->
|
|
||||||
<!-- <hr class="star-dark mb-5">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-4 ml-auto">-->
|
|
||||||
<!-- <p class="lead">For more information about running WebGoat / FAQ see our <a href="https://github.com/WebGoat/WebGoat/wiki">wiki pages.</a>-->
|
|
||||||
<!-- </p>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-lg-4 mr-auto">-->
|
|
||||||
<!-- <p class="lead">Interested in contributing to WebGoat, take a look at our <a href="https://github.com/WebGoat/WebGoat/issues">issues.</a> </p>-->
|
|
||||||
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </section>-->
|
|
||||||
<!-- -->
|
|
||||||
|
|
||||||
<!-- <!– Footer –>-->
|
|
||||||
<!-- <footer class="footer text-center">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-md-4 mb-5 mb-lg-0">-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <div class="col-md-4 mb-5 mb-lg-0">-->
|
|
||||||
<!-- <h4 class="text-uppercase mb-4">Around the Web</h4>-->
|
|
||||||
<!-- <ul class="list-inline mb-0">-->
|
|
||||||
<!-- <li class="list-inline-item">-->
|
|
||||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="mailto:webgoat@owasp.org">-->
|
|
||||||
<!-- <i class="fa fa-fw fa-at"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<!-- <li class="list-inline-item">-->
|
|
||||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://github.com/WebGoat">-->
|
|
||||||
<!-- <i class="fa fa-fw fa-github"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<!-- <li class="list-inline-item">-->
|
|
||||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://stackoverflow.com/search?q=webgoat">-->
|
|
||||||
<!-- <i class="fa fa-fw fa-stack-overflow"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<!-- <li class="list-inline-item">-->
|
|
||||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://twitter.com/OWASP_WebGoat">-->
|
|
||||||
<!-- <i class="fa fa-fw fa-twitter"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<!-- <li class="list-inline-item">-->
|
|
||||||
<!-- <a class="btn btn-outline-light btn-social text-center rounded-circle" href="https://owasp.slack.com/messages/#project-webgoat/">-->
|
|
||||||
<!-- <i class="fa fa-fw fa-slack"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<!-- </ul>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </footer>-->
|
|
||||||
|
|
||||||
<!-- <div class="copyright py-4 text-center text-white">-->
|
|
||||||
<!-- <div class="container">-->
|
|
||||||
<!-- <small>Team WebGoat 2019</small>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<!-- <!– Scroll to Top Button (Only visible on small and extra-small screen sizes) –>-->
|
|
||||||
<!-- <div class="scroll-to-top d-lg-none position-fixed ">-->
|
|
||||||
<!-- <a class="js-scroll-trigger d-block text-center text-white rounded" href="#page-top">-->
|
|
||||||
<!-- <i class="fa fa-chevron-up"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<!-- <!– Explain modal –>-->
|
|
||||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-1">-->
|
|
||||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
|
||||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- <div class="container text-center">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-8 mx-auto">-->
|
|
||||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Explain the vulnerability</h3>-->
|
|
||||||
<!-- <hr class="star-dark mb-5">-->
|
|
||||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/lesson.png" alt="">-->
|
|
||||||
<!-- <p class="mb-5">Teaching is now a first class citizen of WebGoat, we explain explain the vulnerability. Instead of 'just hacking' we now focus on explaining from the beginning what for example a SQL injection is.-->
|
|
||||||
<!-- </p>-->
|
|
||||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-close"></i>-->
|
|
||||||
<!-- Close</a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<!-- <!– Assignment modal –>-->
|
|
||||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-2">-->
|
|
||||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
|
||||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- <div class="container text-center">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-8 mx-auto">-->
|
|
||||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Learn by doing</h3>-->
|
|
||||||
<!-- <hr class="star-dark mb-5">-->
|
|
||||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/assignment-example.png" alt="">-->
|
|
||||||
<!-- <p class="mb-5">During the explanation of a vulnerability we build assignments which will help you understand how it works.</p>-->
|
|
||||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-close"></i>-->
|
|
||||||
<!-- Close</a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<!-- <!– Mitigation modal –>-->
|
|
||||||
<!-- <div class="portfolio-modal mfp-hide" id="portfolio-modal-3">-->
|
|
||||||
<!-- <div class="portfolio-modal-dialog bg-white">-->
|
|
||||||
<!-- <a class="close-button d-none d-md-block portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-3x fa-times"></i>-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- <div class="container text-center">-->
|
|
||||||
<!-- <div class="row">-->
|
|
||||||
<!-- <div class="col-lg-8 mx-auto">-->
|
|
||||||
<!-- <h3 class="text-secondary text-uppercase mb-0">Explain mitigations</h3>-->
|
|
||||||
<!-- <hr class="star-dark mb-5">-->
|
|
||||||
<!-- <img class="img-fluid mb-5" src="img/portfolio/mitigation-example.png" alt="">-->
|
|
||||||
<!-- <p class="mb-5">At the end of each lesson you will receive an overview of possible mitigations which will help you during your development work.</p>-->
|
|
||||||
<!-- <a class="btn btn-primary btn-lg rounded-pill portfolio-modal-dismiss" href="#">-->
|
|
||||||
<!-- <i class="fa fa-close"></i>-->
|
|
||||||
<!-- Close</a>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<!-- <!– Bootstrap core JavaScript –>-->
|
|
||||||
<!-- <script src="vendor/jquery/jquery.min.js"></script>-->
|
|
||||||
<!-- <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>-->
|
|
||||||
|
|
||||||
<!-- <!– Plugin JavaScript –>-->
|
|
||||||
<!-- <script src="vendor/jquery-easing/jquery.easing.min.js"></script>-->
|
|
||||||
<!-- <script src="vendor/magnific-popup/jquery.magnific-popup.min.js"></script>-->
|
|
||||||
|
|
||||||
<!-- <!– Custom scripts for this template –>-->
|
|
||||||
<!-- <script src="js/freelancer.min.js"></script>-->
|
|
||||||
|
|
||||||
<!--</body>-->
|
|
||||||
|
|
||||||
<!--</html>-->
|
|
@ -1,75 +0,0 @@
|
|||||||
(function($) {
|
|
||||||
"use strict"; // Start of use strict
|
|
||||||
|
|
||||||
// Smooth scrolling using jQuery easing
|
|
||||||
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
|
|
||||||
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
|
|
||||||
var target = $(this.hash);
|
|
||||||
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
|
|
||||||
if (target.length) {
|
|
||||||
$('html, body').animate({
|
|
||||||
scrollTop: (target.offset().top - 70)
|
|
||||||
}, 1000, "easeInOutExpo");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Scroll to top button appear
|
|
||||||
$(document).scroll(function() {
|
|
||||||
var scrollDistance = $(this).scrollTop();
|
|
||||||
if (scrollDistance > 100) {
|
|
||||||
$('.scroll-to-top').fadeIn();
|
|
||||||
} else {
|
|
||||||
$('.scroll-to-top').fadeOut();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Closes responsive menu when a scroll trigger link is clicked
|
|
||||||
$('.js-scroll-trigger').click(function() {
|
|
||||||
$('.navbar-collapse').collapse('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Activate scrollspy to add active class to navbar items on scroll
|
|
||||||
$('body').scrollspy({
|
|
||||||
target: '#mainNav',
|
|
||||||
offset: 80
|
|
||||||
});
|
|
||||||
|
|
||||||
// Collapse Navbar
|
|
||||||
var navbarCollapse = function() {
|
|
||||||
if ($("#mainNav").offset().top > 100) {
|
|
||||||
$("#mainNav").addClass("navbar-shrink");
|
|
||||||
} else {
|
|
||||||
$("#mainNav").removeClass("navbar-shrink");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// Collapse now if page is not at top
|
|
||||||
navbarCollapse();
|
|
||||||
// Collapse the navbar when page is scrolled
|
|
||||||
$(window).scroll(navbarCollapse);
|
|
||||||
|
|
||||||
// Modal popup$(function () {
|
|
||||||
$('.portfolio-item').magnificPopup({
|
|
||||||
type: 'inline',
|
|
||||||
preloader: false,
|
|
||||||
focus: '#username',
|
|
||||||
modal: true
|
|
||||||
});
|
|
||||||
$(document).on('click', '.portfolio-modal-dismiss', function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$.magnificPopup.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Floating label headings for the contact form
|
|
||||||
$(function() {
|
|
||||||
$("body").on("input propertychange", ".floating-label-form-group", function(e) {
|
|
||||||
$(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val());
|
|
||||||
}).on("focus", ".floating-label-form-group", function() {
|
|
||||||
$(this).addClass("floating-label-form-group-with-focus");
|
|
||||||
}).on("blur", ".floating-label-form-group", function() {
|
|
||||||
$(this).removeClass("floating-label-form-group-with-focus");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery); // End of use strict
|
|
7
docs/js/freelancer.min.js
vendored
@ -1,7 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Start Bootstrap - Freelancer v5.0.2 (https://startbootstrap.com/template-overviews/freelancer)
|
|
||||||
* Copyright 2013-2019 Start Bootstrap
|
|
||||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
!function(t){"use strict";t('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function(){if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var o=t(this.hash);if((o=o.length?o:t("[name="+this.hash.slice(1)+"]")).length)return t("html, body").animate({scrollTop:o.offset().top-70},1e3,"easeInOutExpo"),!1}}),t(document).scroll(function(){100<t(this).scrollTop()?t(".scroll-to-top").fadeIn():t(".scroll-to-top").fadeOut()}),t(".js-scroll-trigger").click(function(){t(".navbar-collapse").collapse("hide")}),t("body").scrollspy({target:"#mainNav",offset:80});var o=function(){100<t("#mainNav").offset().top?t("#mainNav").addClass("navbar-shrink"):t("#mainNav").removeClass("navbar-shrink")};o(),t(window).scroll(o),t(".portfolio-item").magnificPopup({type:"inline",preloader:!1,focus:"#username",modal:!0}),t(document).on("click",".portfolio-modal-dismiss",function(o){o.preventDefault(),t.magnificPopup.close()}),t(function(){t("body").on("input propertychange",".floating-label-form-group",function(o){t(this).toggleClass("floating-label-form-group-with-value",!!t(o.target).val())}).on("focus",".floating-label-form-group",function(){t(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){t(this).removeClass("floating-label-form-group-with-focus")})})}(jQuery);
|
|
6595
docs/package-lock.json
generated
@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"title": "Freelancer",
|
|
||||||
"name": "startbootstrap-freelancer",
|
|
||||||
"version": "5.0.2",
|
|
||||||
"description": "A freelancer portfolio HTML theme for Bootstrap.",
|
|
||||||
"keywords": [
|
|
||||||
"css",
|
|
||||||
"sass",
|
|
||||||
"html",
|
|
||||||
"responsive",
|
|
||||||
"theme",
|
|
||||||
"template"
|
|
||||||
],
|
|
||||||
"homepage": "https://startbootstrap.com/template-overviews/freelancer",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer/issues",
|
|
||||||
"email": "feedback@startbootstrap.com"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"author": "Start Bootstrap",
|
|
||||||
"contributors": [
|
|
||||||
"David Miller (http://davidmiller.io/)"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/BlackrockDigital/startbootstrap-freelancer.git"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-free": "5.7.0",
|
|
||||||
"bootstrap": "4.2.1",
|
|
||||||
"jquery": "3.3.1",
|
|
||||||
"jquery.easing": "^1.4.1",
|
|
||||||
"magnific-popup": "^1.1.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"browser-sync": "2.26.3",
|
|
||||||
"gulp": "4.0.0",
|
|
||||||
"gulp-autoprefixer": "6.0.0",
|
|
||||||
"gulp-clean-css": "4.0.0",
|
|
||||||
"gulp-filter": "5.1.0",
|
|
||||||
"gulp-header": "2.0.7",
|
|
||||||
"gulp-plumber": "^1.2.1",
|
|
||||||
"gulp-rename": "1.4.0",
|
|
||||||
"gulp-sass": "4.0.2",
|
|
||||||
"gulp-uglify": "3.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
// Bootstrap overrides for this template
|
|
||||||
a {
|
|
||||||
color: $primary;
|
|
||||||
&:focus,
|
|
||||||
&:hover,
|
|
||||||
&:active {
|
|
||||||
color: darken($primary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
|
||||||
border-width: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-primary {
|
|
||||||
background-color: $primary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-secondary {
|
|
||||||
background-color: $secondary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-primary {
|
|
||||||
color: $primary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-secondary {
|
|
||||||
color: $secondary !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary {
|
|
||||||
background-color: $primary;
|
|
||||||
border-color: $primary;
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active {
|
|
||||||
background-color: darken($primary, 10%);
|
|
||||||
border-color: darken($primary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary {
|
|
||||||
background-color: $secondary;
|
|
||||||
border-color: $secondary;
|
|
||||||
&:hover,
|
|
||||||
&:focus,
|
|
||||||
&:active {
|
|
||||||
background-color: darken($secondary, 10%);
|
|
||||||
border-color: darken($secondary, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
// Styling for the contact section
|
|
||||||
.floating-label-form-group {
|
|
||||||
position: relative;
|
|
||||||
border-bottom: 1px solid $gray-200;
|
|
||||||
input,
|
|
||||||
textarea {
|
|
||||||
font-size: 1.5em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
padding-right: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
resize: none;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
background: none;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
label {
|
|
||||||
font-size: 0.85em;
|
|
||||||
line-height: 1.764705882em;
|
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
top: 2em;
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
-webkit-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-moz-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
-ms-transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
transition: top 0.3s ease, opacity 0.3s ease;
|
|
||||||
vertical-align: middle;
|
|
||||||
vertical-align: baseline;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
&:not(:first-child) {
|
|
||||||
padding-left: 14px;
|
|
||||||
border-left: 1px solid $gray-200;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-value {
|
|
||||||
label {
|
|
||||||
top: 0;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-label-form-group-with-focus {
|
|
||||||
label {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
form .row:first-child .floating-label-form-group {
|
|
||||||
border-top: 1px solid $gray-200;
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
.footer {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 5rem;
|
|
||||||
background-color: $secondary;
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copyright {
|
|
||||||
background-color: darken($secondary, 10%);
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
// Typography
|
|
||||||
body {
|
|
||||||
@include body-font;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
@include heading-font;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Horizontal Rule with Star Icon
|
|
||||||
hr.star-light,
|
|
||||||
hr.star-dark {
|
|
||||||
max-width: 15rem;
|
|
||||||
padding: 0;
|
|
||||||
text-align: center;
|
|
||||||
border: none;
|
|
||||||
border-top: solid 0.25rem;
|
|
||||||
margin-top: 2.5rem;
|
|
||||||
margin-bottom: 2.5rem;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light:after,
|
|
||||||
hr.star-dark:after {
|
|
||||||
position: relative;
|
|
||||||
top: -.8em;
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 0.25em;
|
|
||||||
content: '\f005';
|
|
||||||
font-family: "Font Awesome 5 Free";
|
|
||||||
font-weight: 900;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-light {
|
|
||||||
border-color: $white;
|
|
||||||
}
|
|
||||||
hr.star-light:after {
|
|
||||||
color: $white;
|
|
||||||
background-color: $primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr.star-dark {
|
|
||||||
border-color: $secondary;
|
|
||||||
}
|
|
||||||
hr.star-dark:after {
|
|
||||||
color: $secondary;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Section Padding Settings
|
|
||||||
section {
|
|
||||||
padding: 6rem 0;
|
|
||||||
h2 {
|
|
||||||
font-size: 2.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 2.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Button Size
|
|
||||||
.btn-xl {
|
|
||||||
padding: 1rem 1.75rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom Rounded Social Button
|
|
||||||
.btn-social {
|
|
||||||
width: 3.25rem;
|
|
||||||
height: 3.25rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scroll to Top Button
|
|
||||||
.scroll-to-top {
|
|
||||||
z-index: 1042;
|
|
||||||
right: 1rem;
|
|
||||||
bottom: 1rem;
|
|
||||||
display: none;
|
|
||||||
a {
|
|
||||||
width: 3.5rem;
|
|
||||||
height: 3.5rem;
|
|
||||||
background-color: fade-out($gray-900, 0.5);
|
|
||||||
line-height: 3.1rem;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 72px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
line-height: 3rem;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
@include body-font;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (min-width: 992px) {
|
|
||||||
header.masthead {
|
|
||||||
padding-top: calc(6rem + 106px);
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
h1 {
|
|
||||||
font-size: 4.75em;
|
|
||||||
line-height: 4rem;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 1.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
@mixin body-font() {
|
|
||||||
font-family: 'Lato';
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin heading-font() {
|
|
||||||
font-weight: 700;
|
|
||||||
font-family: 'Montserrat';
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
// Styling for the navbar
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
@include heading-font;
|
|
||||||
.navbar-brand {
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
.navbar-nav {
|
|
||||||
margin-top: 1rem;
|
|
||||||
letter-spacing: 0.0625rem;
|
|
||||||
li.nav-item {
|
|
||||||
a.nav-link {
|
|
||||||
color: $white;
|
|
||||||
&:hover {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
&:active,
|
|
||||||
&:focus {
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
&.active {
|
|
||||||
color: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.navbar-toggler {
|
|
||||||
font-size: 80%;
|
|
||||||
padding: 0.8rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media(min-width:992px) {
|
|
||||||
#mainNav {
|
|
||||||
padding-top: 1.5rem;
|
|
||||||
padding-bottom: 1.5rem;
|
|
||||||
-webkit-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
-moz-transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
transition: padding-top 0.3s, padding-bottom 0.3s;
|
|
||||||
.navbar-brand {
|
|
||||||
font-size: 2em;
|
|
||||||
-webkit-transition: font-size 0.3s;
|
|
||||||
-moz-transition: font-size 0.3s;
|
|
||||||
transition: font-size 0.3s;
|
|
||||||
}
|
|
||||||
.navbar-nav {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.navbar-nav > li.nav-item > a.nav-link.active {
|
|
||||||
color: $white;
|
|
||||||
background: $primary;
|
|
||||||
&:active,
|
|
||||||
&:focus,
|
|
||||||
&:hover {
|
|
||||||
color: $white;
|
|
||||||
background: $primary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#mainNav.navbar-shrink {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
.navbar-brand {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
// Styling for the portfolio section
|
|
||||||
.portfolio {
|
|
||||||
margin-bottom: -15px;
|
|
||||||
.portfolio-item {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
max-width: 25rem;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
.portfolio-item-caption {
|
|
||||||
-webkit-transition: all ease 0.5s;
|
|
||||||
-moz-transition: all ease 0.5s;
|
|
||||||
transition: all ease 0.5s;
|
|
||||||
opacity: 0;
|
|
||||||
background-color: fade-out($primary, .1);
|
|
||||||
&:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
.portfolio-item-caption-content {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
margin-bottom: -30px;
|
|
||||||
.portfolio-item {
|
|
||||||
margin-bottom: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.portfolio-modal {
|
|
||||||
.portfolio-modal-dialog {
|
|
||||||
padding: 3rem 1rem;
|
|
||||||
min-height: calc(100vh - 2rem);
|
|
||||||
margin: 1rem calc(1rem - 8px);
|
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
-moz-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
-webkit-box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
box-shadow: 0 0 3rem 1rem fade-out(black, .5);
|
|
||||||
.close-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 2rem;
|
|
||||||
right: 2rem;
|
|
||||||
i {
|
|
||||||
line-height: 38px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media(min-width: 768px) {
|
|
||||||
.portfolio-modal-dialog {
|
|
||||||
min-height: 100vh;
|
|
||||||
padding: 5rem;
|
|
||||||
margin: 3rem calc(3rem - 8px);
|
|
||||||
h2 {
|
|
||||||
font-size: 3rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
// Variables
|
|
||||||
|
|
||||||
$white: #fff !default;
|
|
||||||
$gray-100: #f8f9fa !default;
|
|
||||||
$gray-200: #e9ecef !default;
|
|
||||||
$gray-300: #dee2e6 !default;
|
|
||||||
$gray-400: #ced4da !default;
|
|
||||||
$gray-500: #adb5bd !default;
|
|
||||||
$gray-600: #868e96 !default;
|
|
||||||
$gray-700: #495057 !default;
|
|
||||||
$gray-800: #343a40 !default;
|
|
||||||
$gray-900: #212529 !default;
|
|
||||||
$black: #000 !default;
|
|
||||||
|
|
||||||
$primary: #18BC9C !default;
|
|
||||||
$secondary: #2C3E50 !default;
|
|
@ -1,9 +0,0 @@
|
|||||||
@import "variables.scss";
|
|
||||||
@import "mixins.scss";
|
|
||||||
@import "global.scss";
|
|
||||||
@import "navbar.scss";
|
|
||||||
@import "masthead.scss";
|
|
||||||
@import "portfolio.scss";
|
|
||||||
@import "contact.scss";
|
|
||||||
@import "footer.scss";
|
|
||||||
@import "bootstrap-overrides.scss";
|
|
9887
docs/vendor/bootstrap/css/bootstrap.css
vendored
1
docs/vendor/bootstrap/css/bootstrap.css.map
vendored
7
docs/vendor/bootstrap/css/bootstrap.min.css
vendored
6818
docs/vendor/bootstrap/js/bootstrap.bundle.js
vendored
4249
docs/vendor/bootstrap/js/bootstrap.js
vendored
1
docs/vendor/bootstrap/js/bootstrap.js.map
vendored
7
docs/vendor/bootstrap/js/bootstrap.min.js
vendored
2337
docs/vendor/font-awesome/css/font-awesome.css
vendored
BIN
docs/vendor/font-awesome/fonts/FontAwesome.otf
vendored
2671
docs/vendor/font-awesome/fonts/fontawesome-webfont.svg
vendored
Before Width: | Height: | Size: 434 KiB |
34
docs/vendor/font-awesome/less/animated.less
vendored
@ -1,34 +0,0 @@
|
|||||||
// Animated Icons
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-spin {
|
|
||||||
-webkit-animation: fa-spin 2s infinite linear;
|
|
||||||
animation: fa-spin 2s infinite linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pulse {
|
|
||||||
-webkit-animation: fa-spin 1s infinite steps(8);
|
|
||||||
animation: fa-spin 1s infinite steps(8);
|
|
||||||
}
|
|
||||||
|
|
||||||
@-webkit-keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fa-spin {
|
|
||||||
0% {
|
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
-webkit-transform: rotate(359deg);
|
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
// Bordered & Pulled
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-border {
|
|
||||||
padding: .2em .25em .15em;
|
|
||||||
border: solid .08em @fa-border-color;
|
|
||||||
border-radius: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-pull-left { float: left; }
|
|
||||||
.@{fa-css-prefix}-pull-right { float: right; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
|
|
||||||
&.@{fa-css-prefix}-pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Deprecated as of 4.4.0 */
|
|
||||||
.pull-right { float: right; }
|
|
||||||
.pull-left { float: left; }
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
&.pull-left { margin-right: .3em; }
|
|
||||||
&.pull-right { margin-left: .3em; }
|
|
||||||
}
|
|
12
docs/vendor/font-awesome/less/core.less
vendored
@ -1,12 +0,0 @@
|
|||||||
// Base Class Definition
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix} {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
// Fixed Width Icons
|
|
||||||
// -------------------------
|
|
||||||
.@{fa-css-prefix}-fw {
|
|
||||||
width: (18em / 14);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
18
docs/vendor/font-awesome/less/font-awesome.less
vendored
@ -1,18 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
|
||||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import "variables.less";
|
|
||||||
@import "mixins.less";
|
|
||||||
@import "path.less";
|
|
||||||
@import "core.less";
|
|
||||||
@import "larger.less";
|
|
||||||
@import "fixed-width.less";
|
|
||||||
@import "list.less";
|
|
||||||
@import "bordered-pulled.less";
|
|
||||||
@import "animated.less";
|
|
||||||
@import "rotated-flipped.less";
|
|
||||||
@import "stacked.less";
|
|
||||||
@import "icons.less";
|
|
||||||
@import "screen-reader.less";
|
|
789
docs/vendor/font-awesome/less/icons.less
vendored
@ -1,789 +0,0 @@
|
|||||||
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
|
|
||||||
readers do not read off random characters that represent icons */
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
|
|
||||||
.@{fa-css-prefix}-music:before { content: @fa-var-music; }
|
|
||||||
.@{fa-css-prefix}-search:before { content: @fa-var-search; }
|
|
||||||
.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
|
|
||||||
.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
|
|
||||||
.@{fa-css-prefix}-star:before { content: @fa-var-star; }
|
|
||||||
.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
|
|
||||||
.@{fa-css-prefix}-user:before { content: @fa-var-user; }
|
|
||||||
.@{fa-css-prefix}-film:before { content: @fa-var-film; }
|
|
||||||
.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
|
|
||||||
.@{fa-css-prefix}-th:before { content: @fa-var-th; }
|
|
||||||
.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
|
|
||||||
.@{fa-css-prefix}-check:before { content: @fa-var-check; }
|
|
||||||
.@{fa-css-prefix}-remove:before,
|
|
||||||
.@{fa-css-prefix}-close:before,
|
|
||||||
.@{fa-css-prefix}-times:before { content: @fa-var-times; }
|
|
||||||
.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
|
|
||||||
.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
|
|
||||||
.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
|
|
||||||
.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
|
|
||||||
.@{fa-css-prefix}-gear:before,
|
|
||||||
.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
|
|
||||||
.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
|
|
||||||
.@{fa-css-prefix}-home:before { content: @fa-var-home; }
|
|
||||||
.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
|
|
||||||
.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
|
|
||||||
.@{fa-css-prefix}-road:before { content: @fa-var-road; }
|
|
||||||
.@{fa-css-prefix}-download:before { content: @fa-var-download; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
|
|
||||||
.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
|
|
||||||
.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
|
|
||||||
.@{fa-css-prefix}-rotate-right:before,
|
|
||||||
.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
|
|
||||||
.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
|
|
||||||
.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
|
|
||||||
.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
|
|
||||||
.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
|
|
||||||
.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
|
|
||||||
.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
|
|
||||||
.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
|
|
||||||
.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
|
|
||||||
.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
|
|
||||||
.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
|
|
||||||
.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
|
|
||||||
.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
|
|
||||||
.@{fa-css-prefix}-book:before { content: @fa-var-book; }
|
|
||||||
.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
|
|
||||||
.@{fa-css-prefix}-print:before { content: @fa-var-print; }
|
|
||||||
.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
|
|
||||||
.@{fa-css-prefix}-font:before { content: @fa-var-font; }
|
|
||||||
.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
|
|
||||||
.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
|
|
||||||
.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
|
|
||||||
.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
|
|
||||||
.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
|
|
||||||
.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
|
|
||||||
.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
|
|
||||||
.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
|
|
||||||
.@{fa-css-prefix}-list:before { content: @fa-var-list; }
|
|
||||||
.@{fa-css-prefix}-dedent:before,
|
|
||||||
.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
|
|
||||||
.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
|
|
||||||
.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
|
|
||||||
.@{fa-css-prefix}-photo:before,
|
|
||||||
.@{fa-css-prefix}-image:before,
|
|
||||||
.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
|
|
||||||
.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
|
|
||||||
.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
|
|
||||||
.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
|
|
||||||
.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
|
|
||||||
.@{fa-css-prefix}-edit:before,
|
|
||||||
.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
|
|
||||||
.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
|
|
||||||
.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
|
|
||||||
.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
|
|
||||||
.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
|
|
||||||
.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
|
|
||||||
.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
|
|
||||||
.@{fa-css-prefix}-play:before { content: @fa-var-play; }
|
|
||||||
.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
|
|
||||||
.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
|
|
||||||
.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
|
|
||||||
.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
|
|
||||||
.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
|
|
||||||
.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
|
|
||||||
.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
|
|
||||||
.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
|
|
||||||
.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
|
|
||||||
.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
|
|
||||||
.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
|
|
||||||
.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
|
|
||||||
.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
|
|
||||||
.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
|
|
||||||
.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
|
|
||||||
.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
|
|
||||||
.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
|
|
||||||
.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-mail-forward:before,
|
|
||||||
.@{fa-css-prefix}-share:before { content: @fa-var-share; }
|
|
||||||
.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
|
|
||||||
.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
|
|
||||||
.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
|
|
||||||
.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
|
|
||||||
.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
|
|
||||||
.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
|
|
||||||
.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
|
|
||||||
.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
|
|
||||||
.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
|
|
||||||
.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
|
|
||||||
.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
|
|
||||||
.@{fa-css-prefix}-warning:before,
|
|
||||||
.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
|
|
||||||
.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
|
|
||||||
.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
|
|
||||||
.@{fa-css-prefix}-random:before { content: @fa-var-random; }
|
|
||||||
.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
|
|
||||||
.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
|
|
||||||
.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
|
|
||||||
.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
|
|
||||||
.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
|
|
||||||
.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
|
|
||||||
.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
|
|
||||||
.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
|
|
||||||
.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
|
|
||||||
.@{fa-css-prefix}-bar-chart-o:before,
|
|
||||||
.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
|
|
||||||
.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
|
|
||||||
.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
|
|
||||||
.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
|
|
||||||
.@{fa-css-prefix}-key:before { content: @fa-var-key; }
|
|
||||||
.@{fa-css-prefix}-gears:before,
|
|
||||||
.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
|
|
||||||
.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
|
|
||||||
.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
|
|
||||||
.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
|
|
||||||
.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
|
|
||||||
.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
|
|
||||||
.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
|
|
||||||
.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
|
|
||||||
.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
|
|
||||||
.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
|
|
||||||
.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
|
|
||||||
.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
|
|
||||||
.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
|
|
||||||
.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
|
|
||||||
.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
|
|
||||||
.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
|
|
||||||
.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
|
|
||||||
.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
|
|
||||||
.@{fa-css-prefix}-facebook-f:before,
|
|
||||||
.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
|
|
||||||
.@{fa-css-prefix}-github:before { content: @fa-var-github; }
|
|
||||||
.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
|
|
||||||
.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
|
|
||||||
.@{fa-css-prefix}-feed:before,
|
|
||||||
.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
|
|
||||||
.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
|
|
||||||
.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
|
|
||||||
.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
|
|
||||||
.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
|
|
||||||
.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
|
|
||||||
.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
|
|
||||||
.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
|
|
||||||
.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
|
|
||||||
.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
|
|
||||||
.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
|
|
||||||
.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
|
|
||||||
.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
|
|
||||||
.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
|
|
||||||
.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
|
|
||||||
.@{fa-css-prefix}-group:before,
|
|
||||||
.@{fa-css-prefix}-users:before { content: @fa-var-users; }
|
|
||||||
.@{fa-css-prefix}-chain:before,
|
|
||||||
.@{fa-css-prefix}-link:before { content: @fa-var-link; }
|
|
||||||
.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
|
|
||||||
.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
|
|
||||||
.@{fa-css-prefix}-cut:before,
|
|
||||||
.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
|
|
||||||
.@{fa-css-prefix}-copy:before,
|
|
||||||
.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
|
|
||||||
.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
|
|
||||||
.@{fa-css-prefix}-save:before,
|
|
||||||
.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
|
|
||||||
.@{fa-css-prefix}-square:before { content: @fa-var-square; }
|
|
||||||
.@{fa-css-prefix}-navicon:before,
|
|
||||||
.@{fa-css-prefix}-reorder:before,
|
|
||||||
.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
|
|
||||||
.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
|
|
||||||
.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
|
|
||||||
.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
|
|
||||||
.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
|
|
||||||
.@{fa-css-prefix}-table:before { content: @fa-var-table; }
|
|
||||||
.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
|
|
||||||
.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
|
|
||||||
.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
|
|
||||||
.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
|
|
||||||
.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
|
|
||||||
.@{fa-css-prefix}-money:before { content: @fa-var-money; }
|
|
||||||
.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
|
|
||||||
.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
|
|
||||||
.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
|
|
||||||
.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
|
|
||||||
.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
|
|
||||||
.@{fa-css-prefix}-unsorted:before,
|
|
||||||
.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
|
|
||||||
.@{fa-css-prefix}-sort-down:before,
|
|
||||||
.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-up:before,
|
|
||||||
.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
|
|
||||||
.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
|
|
||||||
.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
|
|
||||||
.@{fa-css-prefix}-rotate-left:before,
|
|
||||||
.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
|
|
||||||
.@{fa-css-prefix}-legal:before,
|
|
||||||
.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
|
|
||||||
.@{fa-css-prefix}-dashboard:before,
|
|
||||||
.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
|
|
||||||
.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
|
|
||||||
.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
|
|
||||||
.@{fa-css-prefix}-flash:before,
|
|
||||||
.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
|
|
||||||
.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
|
|
||||||
.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
|
|
||||||
.@{fa-css-prefix}-paste:before,
|
|
||||||
.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
|
|
||||||
.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
|
|
||||||
.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
|
|
||||||
.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
|
|
||||||
.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
|
|
||||||
.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
|
|
||||||
.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
|
|
||||||
.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
|
|
||||||
.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
|
|
||||||
.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
|
|
||||||
.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
|
|
||||||
.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
|
|
||||||
.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
|
|
||||||
.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
|
|
||||||
.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
|
|
||||||
.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
|
|
||||||
.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
|
|
||||||
.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
|
|
||||||
.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
|
|
||||||
.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
|
|
||||||
.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
|
|
||||||
.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
|
|
||||||
.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
|
|
||||||
.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
|
|
||||||
.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
|
|
||||||
.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
|
|
||||||
.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
|
|
||||||
.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
|
|
||||||
.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
|
|
||||||
.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
|
|
||||||
.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
|
|
||||||
.@{fa-css-prefix}-mobile-phone:before,
|
|
||||||
.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
|
|
||||||
.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
|
|
||||||
.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
|
|
||||||
.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
|
|
||||||
.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
|
|
||||||
.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
|
|
||||||
.@{fa-css-prefix}-mail-reply:before,
|
|
||||||
.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
|
|
||||||
.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
|
|
||||||
.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
|
|
||||||
.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
|
|
||||||
.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
|
|
||||||
.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
|
|
||||||
.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
|
|
||||||
.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
|
|
||||||
.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
|
|
||||||
.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
|
|
||||||
.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
|
|
||||||
.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
|
|
||||||
.@{fa-css-prefix}-code:before { content: @fa-var-code; }
|
|
||||||
.@{fa-css-prefix}-mail-reply-all:before,
|
|
||||||
.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
|
|
||||||
.@{fa-css-prefix}-star-half-empty:before,
|
|
||||||
.@{fa-css-prefix}-star-half-full:before,
|
|
||||||
.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
|
|
||||||
.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
|
|
||||||
.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
|
|
||||||
.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
|
|
||||||
.@{fa-css-prefix}-unlink:before,
|
|
||||||
.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
|
|
||||||
.@{fa-css-prefix}-question:before { content: @fa-var-question; }
|
|
||||||
.@{fa-css-prefix}-info:before { content: @fa-var-info; }
|
|
||||||
.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
|
|
||||||
.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
|
|
||||||
.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
|
|
||||||
.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
|
|
||||||
.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
|
|
||||||
.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
|
|
||||||
.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
|
|
||||||
.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
|
|
||||||
.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
|
|
||||||
.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
|
|
||||||
.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
|
|
||||||
.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
|
|
||||||
.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
|
|
||||||
.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
|
|
||||||
.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
|
|
||||||
.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
|
|
||||||
.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
|
|
||||||
.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
|
|
||||||
.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
|
|
||||||
.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
|
|
||||||
.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
|
|
||||||
.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
|
|
||||||
.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
|
|
||||||
.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
|
|
||||||
.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
|
|
||||||
.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
|
|
||||||
.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
|
|
||||||
.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
|
|
||||||
.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
|
|
||||||
.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
|
|
||||||
.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
|
|
||||||
.@{fa-css-prefix}-toggle-down:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
|
|
||||||
.@{fa-css-prefix}-toggle-up:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
|
|
||||||
.@{fa-css-prefix}-toggle-right:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
|
|
||||||
.@{fa-css-prefix}-euro:before,
|
|
||||||
.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
|
|
||||||
.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
|
|
||||||
.@{fa-css-prefix}-dollar:before,
|
|
||||||
.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
|
|
||||||
.@{fa-css-prefix}-rupee:before,
|
|
||||||
.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
|
|
||||||
.@{fa-css-prefix}-cny:before,
|
|
||||||
.@{fa-css-prefix}-rmb:before,
|
|
||||||
.@{fa-css-prefix}-yen:before,
|
|
||||||
.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
|
|
||||||
.@{fa-css-prefix}-ruble:before,
|
|
||||||
.@{fa-css-prefix}-rouble:before,
|
|
||||||
.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
|
|
||||||
.@{fa-css-prefix}-won:before,
|
|
||||||
.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
|
|
||||||
.@{fa-css-prefix}-bitcoin:before,
|
|
||||||
.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
|
|
||||||
.@{fa-css-prefix}-file:before { content: @fa-var-file; }
|
|
||||||
.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
|
|
||||||
.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
|
|
||||||
.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
|
|
||||||
.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
|
|
||||||
.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
|
|
||||||
.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
|
|
||||||
.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
|
|
||||||
.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
|
|
||||||
.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
|
|
||||||
.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
|
|
||||||
.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
|
|
||||||
.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
|
|
||||||
.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
|
|
||||||
.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
|
|
||||||
.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
|
|
||||||
.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
|
|
||||||
.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
|
|
||||||
.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
|
|
||||||
.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
|
|
||||||
.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
|
|
||||||
.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
|
|
||||||
.@{fa-css-prefix}-android:before { content: @fa-var-android; }
|
|
||||||
.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
|
|
||||||
.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
|
|
||||||
.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
|
|
||||||
.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
|
|
||||||
.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
|
|
||||||
.@{fa-css-prefix}-female:before { content: @fa-var-female; }
|
|
||||||
.@{fa-css-prefix}-male:before { content: @fa-var-male; }
|
|
||||||
.@{fa-css-prefix}-gittip:before,
|
|
||||||
.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
|
|
||||||
.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
|
|
||||||
.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
|
|
||||||
.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
|
|
||||||
.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
|
|
||||||
.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
|
|
||||||
.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
|
|
||||||
.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
|
|
||||||
.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
|
|
||||||
.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
|
|
||||||
.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
|
|
||||||
.@{fa-css-prefix}-toggle-left:before,
|
|
||||||
.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
|
|
||||||
.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
|
|
||||||
.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
|
|
||||||
.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
|
|
||||||
.@{fa-css-prefix}-turkish-lira:before,
|
|
||||||
.@{fa-css-prefix}-try:before { content: @fa-var-try; }
|
|
||||||
.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
|
|
||||||
.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
|
|
||||||
.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
|
|
||||||
.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
|
|
||||||
.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
|
|
||||||
.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
|
|
||||||
.@{fa-css-prefix}-institution:before,
|
|
||||||
.@{fa-css-prefix}-bank:before,
|
|
||||||
.@{fa-css-prefix}-university:before { content: @fa-var-university; }
|
|
||||||
.@{fa-css-prefix}-mortar-board:before,
|
|
||||||
.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
|
|
||||||
.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
|
|
||||||
.@{fa-css-prefix}-google:before { content: @fa-var-google; }
|
|
||||||
.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
|
|
||||||
.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
|
|
||||||
.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
|
|
||||||
.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
|
|
||||||
.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
|
|
||||||
.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
|
|
||||||
.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
|
|
||||||
.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
|
|
||||||
.@{fa-css-prefix}-language:before { content: @fa-var-language; }
|
|
||||||
.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
|
|
||||||
.@{fa-css-prefix}-building:before { content: @fa-var-building; }
|
|
||||||
.@{fa-css-prefix}-child:before { content: @fa-var-child; }
|
|
||||||
.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
|
|
||||||
.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
|
|
||||||
.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
|
|
||||||
.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
|
|
||||||
.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
|
|
||||||
.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
|
|
||||||
.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
|
|
||||||
.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
|
|
||||||
.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
|
|
||||||
.@{fa-css-prefix}-automobile:before,
|
|
||||||
.@{fa-css-prefix}-car:before { content: @fa-var-car; }
|
|
||||||
.@{fa-css-prefix}-cab:before,
|
|
||||||
.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
|
|
||||||
.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
|
|
||||||
.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
|
|
||||||
.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
|
|
||||||
.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
|
|
||||||
.@{fa-css-prefix}-database:before { content: @fa-var-database; }
|
|
||||||
.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
|
|
||||||
.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
|
|
||||||
.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
|
|
||||||
.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
|
|
||||||
.@{fa-css-prefix}-file-photo-o:before,
|
|
||||||
.@{fa-css-prefix}-file-picture-o:before,
|
|
||||||
.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
|
|
||||||
.@{fa-css-prefix}-file-zip-o:before,
|
|
||||||
.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
|
|
||||||
.@{fa-css-prefix}-file-sound-o:before,
|
|
||||||
.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
|
|
||||||
.@{fa-css-prefix}-file-movie-o:before,
|
|
||||||
.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
|
|
||||||
.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
|
|
||||||
.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
|
|
||||||
.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
|
|
||||||
.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
|
|
||||||
.@{fa-css-prefix}-life-bouy:before,
|
|
||||||
.@{fa-css-prefix}-life-buoy:before,
|
|
||||||
.@{fa-css-prefix}-life-saver:before,
|
|
||||||
.@{fa-css-prefix}-support:before,
|
|
||||||
.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
|
|
||||||
.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
|
|
||||||
.@{fa-css-prefix}-ra:before,
|
|
||||||
.@{fa-css-prefix}-resistance:before,
|
|
||||||
.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
|
|
||||||
.@{fa-css-prefix}-ge:before,
|
|
||||||
.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
|
|
||||||
.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
|
|
||||||
.@{fa-css-prefix}-git:before { content: @fa-var-git; }
|
|
||||||
.@{fa-css-prefix}-y-combinator-square:before,
|
|
||||||
.@{fa-css-prefix}-yc-square:before,
|
|
||||||
.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
|
|
||||||
.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
|
|
||||||
.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
|
|
||||||
.@{fa-css-prefix}-wechat:before,
|
|
||||||
.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
|
|
||||||
.@{fa-css-prefix}-send:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
|
|
||||||
.@{fa-css-prefix}-send-o:before,
|
|
||||||
.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
|
|
||||||
.@{fa-css-prefix}-history:before { content: @fa-var-history; }
|
|
||||||
.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
|
|
||||||
.@{fa-css-prefix}-header:before { content: @fa-var-header; }
|
|
||||||
.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
|
|
||||||
.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
|
|
||||||
.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
|
|
||||||
.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
|
|
||||||
.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
|
|
||||||
.@{fa-css-prefix}-soccer-ball-o:before,
|
|
||||||
.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
|
|
||||||
.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
|
|
||||||
.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
|
|
||||||
.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
|
|
||||||
.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
|
|
||||||
.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
|
|
||||||
.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
|
|
||||||
.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
|
|
||||||
.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
|
|
||||||
.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
|
|
||||||
.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
|
|
||||||
.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
|
|
||||||
.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
|
|
||||||
.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
|
|
||||||
.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
|
|
||||||
.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
|
|
||||||
.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
|
|
||||||
.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
|
|
||||||
.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
|
|
||||||
.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
|
|
||||||
.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
|
|
||||||
.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
|
|
||||||
.@{fa-css-prefix}-at:before { content: @fa-var-at; }
|
|
||||||
.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
|
|
||||||
.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
|
|
||||||
.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
|
|
||||||
.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
|
|
||||||
.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
|
|
||||||
.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
|
|
||||||
.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
|
|
||||||
.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
|
|
||||||
.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
|
|
||||||
.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
|
|
||||||
.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
|
|
||||||
.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
|
|
||||||
.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
|
|
||||||
.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
|
|
||||||
.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
|
|
||||||
.@{fa-css-prefix}-shekel:before,
|
|
||||||
.@{fa-css-prefix}-sheqel:before,
|
|
||||||
.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
|
|
||||||
.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
|
|
||||||
.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
|
|
||||||
.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
|
|
||||||
.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
|
|
||||||
.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
|
|
||||||
.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
|
|
||||||
.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
|
|
||||||
.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
|
|
||||||
.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
|
|
||||||
.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
|
|
||||||
.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
|
|
||||||
.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
|
|
||||||
.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
|
|
||||||
.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
|
|
||||||
.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
|
|
||||||
.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
|
|
||||||
.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
|
|
||||||
.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
|
|
||||||
.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
|
|
||||||
.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
|
|
||||||
.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
|
|
||||||
.@{fa-css-prefix}-intersex:before,
|
|
||||||
.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
|
|
||||||
.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
|
|
||||||
.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
|
|
||||||
.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
|
|
||||||
.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
|
|
||||||
.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
|
|
||||||
.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
|
|
||||||
.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
|
|
||||||
.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
|
|
||||||
.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
|
|
||||||
.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
|
|
||||||
.@{fa-css-prefix}-server:before { content: @fa-var-server; }
|
|
||||||
.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
|
|
||||||
.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
|
|
||||||
.@{fa-css-prefix}-hotel:before,
|
|
||||||
.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
|
|
||||||
.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
|
|
||||||
.@{fa-css-prefix}-train:before { content: @fa-var-train; }
|
|
||||||
.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
|
|
||||||
.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
|
|
||||||
.@{fa-css-prefix}-yc:before,
|
|
||||||
.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
|
|
||||||
.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
|
|
||||||
.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
|
|
||||||
.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
|
|
||||||
.@{fa-css-prefix}-battery-4:before,
|
|
||||||
.@{fa-css-prefix}-battery:before,
|
|
||||||
.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
|
|
||||||
.@{fa-css-prefix}-battery-3:before,
|
|
||||||
.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-battery-2:before,
|
|
||||||
.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
|
|
||||||
.@{fa-css-prefix}-battery-1:before,
|
|
||||||
.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
|
|
||||||
.@{fa-css-prefix}-battery-0:before,
|
|
||||||
.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
|
|
||||||
.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
|
|
||||||
.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
|
|
||||||
.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
|
|
||||||
.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
|
|
||||||
.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
|
|
||||||
.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
|
|
||||||
.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
|
|
||||||
.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
|
|
||||||
.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
|
|
||||||
.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
|
|
||||||
.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
|
|
||||||
.@{fa-css-prefix}-hourglass-1:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
|
|
||||||
.@{fa-css-prefix}-hourglass-2:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
|
|
||||||
.@{fa-css-prefix}-hourglass-3:before,
|
|
||||||
.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
|
|
||||||
.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
|
|
||||||
.@{fa-css-prefix}-hand-grab-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-stop-o:before,
|
|
||||||
.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
|
|
||||||
.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
|
|
||||||
.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
|
|
||||||
.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
|
|
||||||
.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
|
|
||||||
.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
|
|
||||||
.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
|
|
||||||
.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
|
|
||||||
.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
|
|
||||||
.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
|
|
||||||
.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
|
|
||||||
.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
|
|
||||||
.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
|
|
||||||
.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
|
|
||||||
.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
|
|
||||||
.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
|
|
||||||
.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
|
|
||||||
.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
|
|
||||||
.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
|
|
||||||
.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
|
|
||||||
.@{fa-css-prefix}-tv:before,
|
|
||||||
.@{fa-css-prefix}-television:before { content: @fa-var-television; }
|
|
||||||
.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
|
|
||||||
.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
|
|
||||||
.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
|
|
||||||
.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
|
|
||||||
.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
|
|
||||||
.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
|
|
||||||
.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
|
|
||||||
.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
|
|
||||||
.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
|
|
||||||
.@{fa-css-prefix}-map:before { content: @fa-var-map; }
|
|
||||||
.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
|
|
||||||
.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
|
|
||||||
.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
|
|
||||||
.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
|
|
||||||
.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
|
|
||||||
.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
|
|
||||||
.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
|
|
||||||
.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
|
|
||||||
.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
|
|
||||||
.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
|
|
||||||
.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
|
|
||||||
.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
|
|
||||||
.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
|
|
||||||
.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
|
|
||||||
.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
|
|
||||||
.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
|
|
||||||
.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
|
|
||||||
.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
|
|
||||||
.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
|
|
||||||
.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
|
|
||||||
.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
|
|
||||||
.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
|
|
||||||
.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
|
|
||||||
.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
|
|
||||||
.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
|
|
||||||
.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
|
|
||||||
.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
|
|
||||||
.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
|
|
||||||
.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
|
|
||||||
.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
|
|
||||||
.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
|
|
||||||
.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
|
|
||||||
.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
|
|
||||||
.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
|
|
||||||
.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
|
|
||||||
.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
|
|
||||||
.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
|
|
||||||
.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
|
|
||||||
.@{fa-css-prefix}-asl-interpreting:before,
|
|
||||||
.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
|
|
||||||
.@{fa-css-prefix}-deafness:before,
|
|
||||||
.@{fa-css-prefix}-hard-of-hearing:before,
|
|
||||||
.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
|
|
||||||
.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
|
|
||||||
.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
|
|
||||||
.@{fa-css-prefix}-signing:before,
|
|
||||||
.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
|
|
||||||
.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
|
|
||||||
.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
|
|
||||||
.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
|
|
||||||
.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
|
|
||||||
.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
|
|
||||||
.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
|
|
||||||
.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
|
|
||||||
.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
|
|
||||||
.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
|
|
||||||
.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
|
|
||||||
.@{fa-css-prefix}-google-plus-circle:before,
|
|
||||||
.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
|
|
||||||
.@{fa-css-prefix}-fa:before,
|
|
||||||
.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
|
|
||||||
.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
|
|
||||||
.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
|
|
||||||
.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
|
|
||||||
.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
|
|
||||||
.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
|
|
||||||
.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
|
|
||||||
.@{fa-css-prefix}-vcard:before,
|
|
||||||
.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
|
|
||||||
.@{fa-css-prefix}-vcard-o:before,
|
|
||||||
.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
|
|
||||||
.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
|
|
||||||
.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
|
|
||||||
.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
|
|
||||||
.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
|
|
||||||
.@{fa-css-prefix}-drivers-license:before,
|
|
||||||
.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
|
|
||||||
.@{fa-css-prefix}-drivers-license-o:before,
|
|
||||||
.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
|
|
||||||
.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
|
|
||||||
.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
|
|
||||||
.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
|
|
||||||
.@{fa-css-prefix}-thermometer-4:before,
|
|
||||||
.@{fa-css-prefix}-thermometer:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
|
|
||||||
.@{fa-css-prefix}-thermometer-3:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
|
|
||||||
.@{fa-css-prefix}-thermometer-2:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
|
|
||||||
.@{fa-css-prefix}-thermometer-1:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
|
|
||||||
.@{fa-css-prefix}-thermometer-0:before,
|
|
||||||
.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
|
|
||||||
.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
|
|
||||||
.@{fa-css-prefix}-bathtub:before,
|
|
||||||
.@{fa-css-prefix}-s15:before,
|
|
||||||
.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
|
|
||||||
.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
|
|
||||||
.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
|
|
||||||
.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
|
|
||||||
.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle:before,
|
|
||||||
.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
|
|
||||||
.@{fa-css-prefix}-times-rectangle-o:before,
|
|
||||||
.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
|
|
||||||
.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
|
|
||||||
.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
|
|
||||||
.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
|
|
||||||
.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
|
|
||||||
.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
|
|
||||||
.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
|
|
||||||
.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
|
|
||||||
.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
|
|
||||||
.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
|
|
||||||
.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
|
|
||||||
.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
|
|
13
docs/vendor/font-awesome/less/larger.less
vendored
@ -1,13 +0,0 @@
|
|||||||
// Icon Sizes
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
/* makes the font 33% larger relative to the icon container */
|
|
||||||
.@{fa-css-prefix}-lg {
|
|
||||||
font-size: (4em / 3);
|
|
||||||
line-height: (3em / 4);
|
|
||||||
vertical-align: -15%;
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-2x { font-size: 2em; }
|
|
||||||
.@{fa-css-prefix}-3x { font-size: 3em; }
|
|
||||||
.@{fa-css-prefix}-4x { font-size: 4em; }
|
|
||||||
.@{fa-css-prefix}-5x { font-size: 5em; }
|
|
19
docs/vendor/font-awesome/less/list.less
vendored
@ -1,19 +0,0 @@
|
|||||||
// List Icons
|
|
||||||
// -------------------------
|
|
||||||
|
|
||||||
.@{fa-css-prefix}-ul {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: @fa-li-width;
|
|
||||||
list-style-type: none;
|
|
||||||
> li { position: relative; }
|
|
||||||
}
|
|
||||||
.@{fa-css-prefix}-li {
|
|
||||||
position: absolute;
|
|
||||||
left: -@fa-li-width;
|
|
||||||
width: @fa-li-width;
|
|
||||||
top: (2em / 14);
|
|
||||||
text-align: center;
|
|
||||||
&.@{fa-css-prefix}-lg {
|
|
||||||
left: (-@fa-li-width + (4em / 14));
|
|
||||||
}
|
|
||||||
}
|
|
60
docs/vendor/font-awesome/less/mixins.less
vendored
@ -1,60 +0,0 @@
|
|||||||
// Mixins
|
|
||||||
// --------------------------
|
|
||||||
|
|
||||||
.fa-icon() {
|
|
||||||
display: inline-block;
|
|
||||||
font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
|
|
||||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
|
||||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-icon-rotate(@degrees, @rotation) {
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
|
|
||||||
-webkit-transform: rotate(@degrees);
|
|
||||||
-ms-transform: rotate(@degrees);
|
|
||||||
transform: rotate(@degrees);
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-icon-flip(@horiz, @vert, @rotation) {
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
|
|
||||||
-webkit-transform: scale(@horiz, @vert);
|
|
||||||
-ms-transform: scale(@horiz, @vert);
|
|
||||||
transform: scale(@horiz, @vert);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Only display content to screen readers. A la Bootstrap 4.
|
|
||||||
//
|
|
||||||
// See: http://a11yproject.com/posts/how-to-hide-content/
|
|
||||||
|
|
||||||
.sr-only() {
|
|
||||||
position: absolute;
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
padding: 0;
|
|
||||||
margin: -1px;
|
|
||||||
overflow: hidden;
|
|
||||||
clip: rect(0,0,0,0);
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use in conjunction with .sr-only to only display content when it's focused.
|
|
||||||
//
|
|
||||||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
|
|
||||||
//
|
|
||||||
// Credit: HTML5 Boilerplate
|
|
||||||
|
|
||||||
.sr-only-focusable() {
|
|
||||||
&:active,
|
|
||||||
&:focus {
|
|
||||||
position: static;
|
|
||||||
width: auto;
|
|
||||||
height: auto;
|
|
||||||
margin: 0;
|
|
||||||
overflow: visible;
|
|
||||||
clip: auto;
|
|
||||||
}
|
|
||||||
}
|
|