Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revised challenge #1

Merged
merged 1 commit into from
Dec 7, 2021
Merged
Changes from all commits
Commits
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: 25 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -6,41 +6,50 @@

## Description

Create the project in a dedicated repository with meaningful commit messages. Use Golang and any 3rd party libraries that you want to use.
Build a simple code scanning application that detects sensitive keywords in public git repos.
The application must fulfil the following requirements:
- A user can CRUD repositories. A repository contains a name and a link to the repo.
- A user can trigger a scan against a repository.
- A user can view the Security Scan Result ("Result") List

1. Implement a **RESTful API** to **CRUD** a Security Scan Result (“Result”). The Result entity should have the following properties and be stored in a database of your choice:
How to do a scan:
- Just keep it simple by iterating the words on the codebase to detect SECRET_KEY findings.
- SECRET_KEY start with prefix public_key || private_key.

The Result entity should have the following properties and be stored in a database of your choice:
- Id: any type of unique id
- Status: "Queued" | "In Progress" | "Success" | "Failure"
- RepositoryName: string
- RepositoryUrl: string
- Findings: JSONB, see [example](example-findings.json)
- QueuedAt: timestamp
- ScanningAt: timestamp
- FinishedAt: timestamp


2. Implement another endpoint that lists all Results and uses pagination.
3. Create unit tests and provide documentation.

Wherever you’d have to add something that requires product subscriptions or significant extra time, just mention it in your documentation.
Wherever you'd have to add something that requires product subscriptions or significant extra time, just mention it in your documentation.

**What we want to see:**

- Project Structure: Clear organization and structure of folders, code and functionality.
- Clean Code: Code Consistency, use of linters, formatting, error handling, simple and performant solution to the challenge.
- Stack Knowledge: Proper use of Golang.
- Clean Code: Code Consistency, use of linters, formatting, error handling, and anything else that shows your skills. Simple is better than complex.
- Stack Knowledge: Proper use of Golang and selected frameworks/libraries.
- Implementation: The implementation has to work according to the specs.
- Unit Tests: Covering the core functionality with unit tests.
- Proper Documentation: Describe what the project is doing, what has been used, how to configure it, how to start it, test it etc.
- Unit Tests: Covering the core functionality with unit tests (positive and negative test-cases).
- Proper Documentation:
- A High-Level Design for the components/infrastructure if any.
- Describe how you came up with the solution and what makes it a good one for the use-case.
- Describe what the project is doing, what has been used, how to configure it, how to start it, test it etc.

**Bonus points for:**

- SQL schema: Using a relational database that has a proper schema and indexes
- API documentation: Using e.g OpenApi specs
- SQL schema
- API documentation
- Containerized app
- Use of appropriate design patterns
- Microservice Architecture
- Any extra feature (just write it in your documentation)

**Things you dont have to worry about:**
**Things you don't have to worry about:**

- Authentication/Authorization
- CI configuration / Deployment
- APM
- Authentication / Authorization / Auditing