Skip to content

Commit

Permalink
chore: updated Dockerfile, added compose.yaml
Browse files Browse the repository at this point in the history
  • Loading branch information
nronzel committed Feb 27, 2024
1 parent 4db6c4c commit a3125bd
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 50 deletions.
61 changes: 57 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,60 @@
FROM debian:latest
# syntax=docker/dockerfile:1

ENV PORT 8080
# Create a stage for building the application.
ARG GO_VERSION=1.22
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION} AS build
WORKDIR /src

COPY xoracle usr/bin/xoracle
# Download dependencies as a separate step to take advantage of Docker's caching.
# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds.
# Leverage bind mounts to go.sum and go.mod to avoid having to copy them into
# the container.
RUN --mount=type=cache,target=/go/pkg/mod/ \
--mount=type=bind,source=go.sum,target=go.sum \
--mount=type=bind,source=go.mod,target=go.mod \
go mod download -x

CMD ["/bin/xoracle"]
# This is the architecture you’re building for, which is passed in by the builder.
# Placing it here allows the previous steps to be cached across architectures.
ARG TARGETARCH

# Build the application.
# Leverage a cache mount to /go/pkg/mod/ to speed up subsequent builds.
# Leverage a bind mount to the current directory to avoid having to copy the
# source code into the container.
RUN --mount=type=cache,target=/go/pkg/mod/ \
--mount=type=bind,target=. \
CGO_ENABLED=0 GOARCH=$TARGETARCH go build -o /bin/server .

FROM alpine:latest AS final

# Install any runtime dependencies that are needed to run your application.
# Leverage a cache mount to /var/cache/apk/ to speed up subsequent builds.
RUN --mount=type=cache,target=/var/cache/apk \
apk --update add \
ca-certificates \
tzdata \
&& \
update-ca-certificates

# Create a non-privileged user that the app will run under.
# See https://docs.docker.com/go/dockerfile-user-best-practices/
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser
USER appuser

# Copy the executable from the "build" stage.
COPY --from=build /bin/server /bin/

# Expose the port that the application listens on.
EXPOSE 8080

# What the container should run when it is started.
ENTRYPOINT [ "/bin/server" ]
74 changes: 30 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,18 @@ key itself, and attempts to decrypt the data with the derived key(s).
- **User-Friendly Interface**: Front-end written with HTMX to provide a basic
interface.

### Table of Contents

- [Endpoints](#endpoints)
- [Installation](#installation)
- [Docker](#docker)
- [Docker - Build Yourself](#alternatively-build-image-yourself-from-dockerfile)
- [Usage](#usage)
- [About](#about)
- [How it Works](#how-it-works)
- [Testing](#testing)
- [Contributing](#contributing)

## Endpoints

### Homepage
Expand Down Expand Up @@ -69,17 +81,6 @@ key itself, and attempts to decrypt the data with the derived key(s).

## Installation

### Table of Contents

- [Prerequisites](#prerequisites)
- [Install Steps](#steps)
- [Docker](#docker)
- [Docker - Build Yourself](#alternatively-build-image-yourself-from-dockerfile)
- [How it Works](#how-it-works)
- [Usage](#usage)
- [About](#about)
- [Contributing](#contributing)

### Prerequisites

Go 1.22
Expand All @@ -88,13 +89,13 @@ Go 1.22

**1. Clone the repository:**

```sh
```bash
git clone https://github.com/nronzel/xoracle.git
```

**2. Navigate to the project directory:**

```sh
```bash
cd xoracle
```

Expand All @@ -104,57 +105,42 @@ cd xoracle

Install dependencies with the command:

```sh
```bash
go mod tidy
```

**4. Build and run the project:**

Linux & MacOS:

```sh
```bash
go build -o xoracle && ./xoracle
```

Windows:

```sh
```bash
go build -o xoracle.exe && .\xoracle.exe
```

> The script `scripts/buildprod.sh` is included and used to build the binary
> that gets deployed to Cloud Run. You can use this script if you're planning
> on running the binary on a Linux amd64 machine.
>
> The flags used in `buildprod.sh` are:
>
> ```sh
> CGO_ENABLED=0 GOOS=linux GOARCH=amd64
> ```
**5. Open your browser and navigate to:**

```text
```bash
localhost:8080/
```

### Docker

If you'd like to run this in a Docker container:

**Pull the image:**

```sh
docker pull sutats/xoracle:latest
```

**Run the image:**
**Using docker compose:**

```sh
docker run -p 8080:8080 xoracle
```bash
# Builds the image and runs the container in the background
docker compose up --build -d
```

### Alternatively (Build Image Yourself From Dockerfile)
#### Alternatively (Build Image Yourself From Dockerfile)

You can build a docker image with the included Dockerfile yourself, and run
the image in a container.
Expand All @@ -163,13 +149,13 @@ While in the root of the project directory:

**Build the image:**

```sh
docker build . -t xoracle:latest
```bash
docker build . -t xoracle
```

**Run the image in a container:**

```sh
```bash
docker run -p 8080:8080 xoracle
```

Expand All @@ -184,15 +170,15 @@ processed data will show in the output box, or an error will display on the scre
Feel free to use the small example below, or the text from the included [example.txt](./example.txt)
file in the repository to test it out.

```sh
// Base64 encoded
```bash
# Base64 encoded
MiciMCQ2YTYkOjViJTclJyQ=
```

or

```sh
// Hex encoded
```bash
# Hex encoded
3227223024366136243a35622537252724
```

Expand Down
50 changes: 50 additions & 0 deletions compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Comments are provided throughout this file to help you get started.
# If you need more help, visit the Docker compose reference guide at
# https://docs.docker.com/go/compose-spec-reference/

# Here the instructions define your application as a service called "server".
# This service is built from the Dockerfile in the current directory.
# You can add other services your application may depend on here, such as a
# database or a cache. For examples, see the Awesome Compose repository:
# https://github.com/docker/awesome-compose
services:
server:
build:
context: .
target: final
ports:
- 8080:8080

# The commented out section below is an example of how to define a PostgreSQL
# database that your application can use. `depends_on` tells Docker Compose to
# start the database before your application. The `db-data` volume persists the
# database data between container restarts. The `db-password` secret is used
# to set the database password. You must create `db/password.txt` and add
# a password of your choosing to it before running `docker compose up`.
# depends_on:
# db:
# condition: service_healthy
# db:
# image: postgres
# restart: always
# user: postgres
# secrets:
# - db-password
# volumes:
# - db-data:/var/lib/postgresql/data
# environment:
# - POSTGRES_DB=example
# - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
# expose:
# - 5432
# healthcheck:
# test: [ "CMD", "pg_isready" ]
# interval: 10s
# timeout: 5s
# retries: 5
# volumes:
# db-data:
# secrets:
# db-password:
# file: db/password.txt

2 changes: 1 addition & 1 deletion pkg/decryption/score.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
// key and keySize. Higher score means it is more likely English text and it will
// return that result, removing the false positives.
//
// If the scoring results in a tie; the first result will be returned as the best.
// If the scoring results in a tie the first result will be returned as the best.
func ScoreResults(results []DecryptionResult) DecryptionResult {
var highScore float64
var best DecryptionResult
Expand Down
2 changes: 1 addition & 1 deletion templates/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ const IndexTemplate = `
and frequency analysis techniques, it aims to deduce both the key size
and the key itself. Once the key has been identified, the tool proceeds
to decrypt the encoded information with the discovered key.</p>
<p style="font-style: italic; color: grey; margin-top: -25px;">Author: <a href="http://www.github.com/nronzel/xoracle" style="color: cyan;">nronz</a></p>
<p style="font-style: italic; color: grey; margin-top: -25px;">By: <a href="http://www.github.com/nronzel/xoracle" style="color: cyan;">nronz</a></p>
<div id="error-message" style="color: red; z-index: 100;"></div>
<form hx-post="/decrypt" hx-target="#output" hx-target-error="#error-message" hx-swap="innerHTML" id="inputForm">
<div class="text-container">
Expand Down

0 comments on commit a3125bd

Please sign in to comment.