Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
af3b5c7
feat(app): initial configuration with eyedp auth
syrosh Apr 23, 2024
71bd5e7
feat(auth): add gitlab auth and remove eyedp auth
syrosh Apr 23, 2024
1fa6923
feat(state): add state management library
syrosh Apr 23, 2024
e653666
feat(test): add testing library
syrosh Apr 23, 2024
14a0775
refactor: use typescript path aliases
syrosh Apr 23, 2024
804ac4b
chore(lint): add linting tools
syrosh Apr 23, 2024
c40cc8a
refactor(env): use string specific utility
syrosh Apr 23, 2024
8f675fc
refactor: clean up
syrosh Apr 24, 2024
42839e6
feat(css): add shoelace style library
syrosh Apr 24, 2024
a4ce8ad
feat(layout): implement basic layout
syrosh Apr 24, 2024
fe0aa36
chore(lint): add stylelint
syrosh Apr 24, 2024
cb831f5
feat(projects): get projects from gitlab
syrosh Apr 24, 2024
81855b7
refactor: style changes
syrosh Apr 24, 2024
9fdc183
refactor: clean up
syrosh Apr 24, 2024
cf55467
feat(sidebar): first version
syrosh Apr 25, 2024
aa42dbc
feat(top-bar): add brand
syrosh Apr 25, 2024
ba1f4da
feat(home): implement
syrosh Apr 25, 2024
a18c44e
fix(projects): prevent duplicates
syrosh Apr 25, 2024
903e178
feat(project-detail): implement basic layout
syrosh Apr 26, 2024
d8d66cd
refactor: a lot
syrosh Apr 26, 2024
a7c485b
refactor(top-bar): move to features
syrosh Apr 26, 2024
3e498da
refactor: rename components to elements
syrosh Apr 26, 2024
72d900b
feat(project-details): implement more cards
syrosh Apr 27, 2024
0c93366
feat(details): implement all cards
syrosh Apr 29, 2024
4607e94
feat(app): implement dark mode toggle
syrosh Apr 29, 2024
2ccfb72
feat(detail): secure iframe
syrosh May 27, 2024
fcb6a86
feat(detail): archive
syrosh May 27, 2024
0d83997
feat(details): password
syrosh May 27, 2024
d10af76
refactor(logging): all logs are now debug
syrosh May 27, 2024
d5805a2
feat(top-bar): finish
syrosh May 28, 2024
7fc8be0
feat(sidebar): finish
syrosh May 28, 2024
34b0320
feat(project): new untested
syrosh May 28, 2024
8930c75
feat(new-project): implement
syrosh May 29, 2024
178c0f9
fix(top-bar): menu label styling
syrosh May 29, 2024
e8fbf14
fix(build): prod build
syrosh May 29, 2024
3c2a06d
fix(app): add urlpattern polyfill
syrosh May 29, 2024
b5fb3d9
feat(projects): remove app token for pdf
syrosh May 30, 2024
54e86df
refactor(finding): make smaller
syrosh May 30, 2024
6ad41fb
refactor(api): remove gitlab service
syrosh May 30, 2024
6a45360
feat(iframe): stylesheet plus dark and light mode
syrosh May 30, 2024
fb0a6b6
feat(meta): page title
syrosh May 30, 2024
1ed40c8
chore: update packages
syrosh May 30, 2024
61048c2
chore(app): meta tags
syrosh May 30, 2024
a92a4be
chore(ci): add github workflows
syrosh May 30, 2024
e6e2e08
refactor(app): new eslint rules
syrosh May 30, 2024
7995a89
feat(markdown): styling
syrosh May 31, 2024
d8abce7
feat(mock): implement mock oidc and gitlab server
syrosh Jun 3, 2024
ccad131
fix(findings): make sure findings collapse when changing project id
syrosh Jun 3, 2024
d48e4bd
fix(projects): get correct projects from namespaces to show
syrosh Jun 3, 2024
4ad9224
fix(auth): showing error when we are just loading
syrosh Jun 3, 2024
ccad1b2
refactor(auth): use signals instead of mobx
syrosh Jun 3, 2024
5f7147b
refactor(signals): app auth and user
syrosh Jun 3, 2024
a541374
refactor(state): replace mobx with signals
syrosh Jun 4, 2024
067a525
refactor(projects): rename files
syrosh Jun 4, 2024
59a9bda
fix(project): loading indicators
syrosh Jun 4, 2024
fdf744d
fix(mock): update project
syrosh Jun 4, 2024
bbeb986
docs: update readme
syrosh Jun 4, 2024
bb9c7dd
fix(env): add rocket chat and codimd url explicitely
syrosh Jun 4, 2024
2f9bfd7
feat(sidebar): show message unread count
syrosh Jun 4, 2024
46df068
chore(dev): use hostname from env
syrosh Jun 5, 2024
b990d78
feat(pdf): pdf preview and builds list
syrosh Jun 5, 2024
0320e06
docs: update readme
syrosh Jun 5, 2024
060f3fd
chore: add lit analyze and fix workflow
syrosh Jun 7, 2024
2fe8180
refactor(prettier): fix
syrosh Jun 7, 2024
4a4a04a
chore(test): fix env vars
syrosh Jun 7, 2024
9e04d5d
chore(ci): build with custom mode
syrosh Jun 7, 2024
de3f0e9
chore(lint): add litelement eslint plugins
syrosh Jun 7, 2024
7576af6
refactor(map): use directive map
syrosh Jun 7, 2024
7e7c06b
chore(commit): add commitizen
syrosh Jun 7, 2024
4768e5f
chore(commit): fix the commit hook
syrosh Jun 7, 2024
04fcc02
chore(commit): fix
syrosh Jun 7, 2024
4f53a94
chore(ci): no shallow clone
syrosh Jun 7, 2024
3f82c05
feat(sidebar): filter and sort
syrosh Jun 14, 2024
b9b381a
feat(project): edit start and end date
syrosh Jun 14, 2024
bc77ce6
fix(modal): overlay
syrosh Jun 14, 2024
7daf976
feat(project): add project status
syrosh Jun 14, 2024
b5f1fc0
feat(project): edit status
syrosh Jun 14, 2024
08cffc1
feat(home): basic table
syrosh Jun 14, 2024
2dc343f
feat(chat): double channel
syrosh Jun 14, 2024
c53722d
feat(sidebar): status badge
syrosh Jun 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .env.mock
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
##### Dev Server ##########################

# optional
DEV_VITE_SERVER_CRT_PATH=

# optional
DEV_VITE_SERVER_KEY_PATH=

##### Application #########################

# required
VITE_APP_URL=https://localhost:3443

# required
VITE_ROCKETCHAT_URL=https://chat.staging.radical.sexy

# required
VITE_CODIMD_URL=https://md.staging.radical.sexy

# optional
VITE_LOG_LEVEL=debug

# optional
VITE_REPOSITORY_URL=https://github.com/radicallyopensecurity/dashboard

# optional
VITE_PUBLIC_ISSUE_TRACKER=https://github.com/radicallyopensecurity/dashboard/issues/new

# optional
VITE_INTERNAL_ISSUE_TRACKER=https://github.com/radicallyopensecurity/dashboard/issues/new

# optional
VITE_SECRET_GITLAB_TOKEN=notactuallyused

##### OIDC Authentication #################

# required
VITE_GITLAB_CLIENT_ID=notactuallyused

# required
VITE_GITLAB_AUTHORITY=http://localhost:3000
38 changes: 38 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
##### Dev Server ##########################

# optional
DEV_VITE_SERVER_CRT_PATH=

# optional
DEV_VITE_SERVER_KEY_PATH=

##### Application #########################

# required
VITE_APP_URL=

# required
VITE_ROCKETCHAT_URL=

# required
VITE_CODIMD_URL=

# optional
VITE_LOG_LEVEL=warn

# optional
VITE_REPOSITORY_URL=

# optional
VITE_PUBLIC_ISSUE_TRACKER=

# optional
VITE_INTERNAL_ISSUE_TRACKER=

##### OIDC Authentication #################

# required
VITE_GITLAB_CLIENT_ID=

# required
VITE_GITLAB_AUTHORITY=
41 changes: 41 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
##### Dev Server ##########################

# optional
DEV_VITE_SERVER_CRT_PATH=

# optional
DEV_VITE_SERVER_KEY_PATH=

##### Application #########################

# required
VITE_APP_URL=https://localhost

# required
VITE_ROCKETCHAT_URL=https://localhost

# required
VITE_CODIMD_URL=https://localhost

# optional
VITE_LOG_LEVEL=debug

# optional
VITE_REPOSITORY_URL=https://localhost

# optional
VITE_PUBLIC_ISSUE_TRACKER=https://localhost

# optional
VITE_INTERNAL_ISSUE_TRACKER=https://localhost

# optional
VITE_SECRET_GITLAB_TOKEN=notactuallyused

##### OIDC Authentication #################

# required
VITE_GITLAB_CLIENT_ID=notactuallyused

# required
VITE_GITLAB_AUTHORITY=http://localhost
145 changes: 145 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
// @ts-check
const { defineConfig } = require('eslint-define-config')

module.exports = defineConfig({
extends: [
'eslint:recommended',
'plugin:lit/recommended',
'plugin:wc/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
'plugin:@typescript-eslint/recommended-type-checked',
'plugin:@typescript-eslint/stylistic-type-checked',
],
parserOptions: {
project: true,
__tsconfigRootDir: __dirname,
},
settings: {
'import/resolver': {
typescript: true,
node: true,
},
},
ignorePatterns: [
'.eslintrc.cjs',
'dist/*',
'coverage/*',
'public/*',
'stylelint.config.js',
'src/**/*.css',
],
rules: {
// enable when refactoring to identify unused exports
// will falsely report litelement classes, not useful
// during development
// 'import/no-unused-modules': ['warn', { unusedExports: true }],
'@typescript-eslint/unbound-method': ['off'],
'@typescript-eslint/consistent-type-definitions': ['off'],
'import/no-duplicates': ['error'],
'import/no-self-import': ['error'],
'import/no-import-module-exports': ['error'],
'import/no-mutable-exports': ['error'],
'import/no-extraneous-dependencies': ['error'],
'import/no-empty-named-blocks': ['error'],
'import/consistent-type-specifier-style': ['error', 'prefer-inline'],
'import/no-default-export': [2],
'import/order': [
'warn',
{
'newlines-between': 'always',
alphabetize: {
order: 'asc',
caseInsensitive: true,
},
pathGroups: [
{
pattern: '@/config',
group: 'external',
position: 'after',
},
{
pattern: '@/theme/**',
group: 'external',
position: 'after',
},
{
pattern: '@/pages/**',
group: 'external',
position: 'after',
},
{
pattern: '@/constants/**',
group: 'external',
position: 'after',
},
{
pattern: '@/routes',
group: 'external',
position: 'after',
},
{
pattern: '@/api/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/auth/types/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/auth/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/app/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/projects/types/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/projects/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/user/types/**',
group: 'external',
position: 'after',
},
{
pattern: '@/modules/user/**',
group: 'external',
position: 'after',
},
{
pattern: '@/elements/**',
group: 'external',
position: 'after',
},
{
pattern: '@/features/**',
group: 'external',
position: 'after',
},
{
pattern: '@/utils/**',
group: 'external',
position: 'after',
},
{
pattern: '@/*',
group: 'external',
position: 'after',
},
],
},
],
},
})
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'weekly'
62 changes: 62 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Pull Request

on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened]

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Setup cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node_modules-

- name: Install dependencies
run: npm ci

- name: Lint commits
env:
PR_HEAD: ${{ github.event.pull_request.head.sha }}
PR_COMMITS: ${{ github.event.pull_request.commits }}
run: |
npm run lint:commit -- \
--from ${{ env.PR_HEAD }}~${{ env.PR_COMMITS }} \
--to ${{ env.PR_HEAD }} --verbose

- name: Lint files
run: npm run lint

- name: Test
run: npm test

- name: Build
env:
VITE_APP_URL: 'https://localhost'
VITE_ROCKETCHAT_URL: 'https://localhost'
VITE_CODIMD_URL: 'https://localhost'
VITE_GITLAB_CLIENT_ID: 'https://localhost'
VITE_GITLAB_AUTHORITY: 'https://localhost'
run: npm run build:ci
Loading