Compare commits

..

1 commit

Author SHA1 Message Date
Hugo Müller-Downing
ae5ad41f10 Adds frames for Etienne 2025-03-08 16:05:31 +01:00
12 changed files with 140 additions and 701 deletions

View file

@ -1,49 +0,0 @@
name: ci
on: push
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Repository meta
id: repository
run: |
registry=${{ github.server_url }}
registry=${registry##http*://}
echo "registry=${registry}" >> "$GITHUB_OUTPUT"
echo "registry=${registry}"
repository="$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')"
echo "repository=${repository}" >> "$GITHUB_OUTPUT"
echo "repository=${repository}"
- name: Docker meta
uses: docker/metadata-action@v5
id: docker
with:
images: ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}
- name: Login to registry
uses: docker/login-action@v3
with:
registry: ${{ steps.repository.outputs.registry }}
username: ${{ secrets.PACKAGES_USER }}
password: ${{ secrets.PACKAGES_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: '--allow-insecure-entitlement network.host'
driver-opts: network=host
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
allow: network.host
network: host
platforms: linux/amd64
tags: ${{ steps.docker.outputs.tags }}

22
.github/workflows/main.yml vendored Normal file
View file

@ -0,0 +1,22 @@
name: Docker Image CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Build the Docker image
run: docker build . --file Dockerfile --tag hugomd/ascii-live:${GITHUB_SHA:0:8} --tag hugomd/ascii-live:latest
- name: Push docker image
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
docker push hugomd/ascii-live:${GITHUB_SHA:0:8}
docker push hugomd/ascii-live:latest

View file

@ -1,13 +1,13 @@
FROM golang:1.24.1-alpine AS build-env
FROM golang:1.17-alpine AS build-env
ENV GO111MODULE=on
WORKDIR /go/src/github.com/hugomd/ascii-live/
# RUN apk add ca-certificates
RUN apk add ca-certificates
COPY . /go/src/github.com/hugomd/ascii-live/
RUN cd /go/src/github.com/hugomd/ascii-live && \
go mod download && \
CGO_ENABLED=0 GOOS=linux go build -installsuffix cgo -o main .
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
FROM scratch
COPY --from=build-env /go/src/github.com/hugomd/ascii-live/main /
# COPY --from=build-env /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=build-env /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
CMD ["/main"]

View file

@ -13,7 +13,7 @@ spec:
app: ascii-live
spec:
containers:
- image: forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/franz.germann/ascii-live:development
- image: hugomd/ascii-live:407342dc
name: ascii-live
ports:
- containerPort: 8080
@ -44,10 +44,10 @@ metadata:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: factory.c-one-infra.de
- host: ascii.live
http:
paths:
- path: /ascii-live
- path: /
pathType: Prefix
backend:
service:
@ -57,4 +57,4 @@ spec:
tls:
- secretName: ascii-live-tls-prod-cert
hosts:
- factory.c-one-infra.de
- ascii.live

View file

@ -1,78 +1,8 @@
package frames
var Brittany = DefaultFrameType(brittanyFrame)
var brittanyFrame = []string{
`hhhoohhooooooooooo//////////////////////////////////////////////////////////////
hhhhoooooooooooooooo////////oNo/////////////////////////////////////////////////
oooooooooooooooooooooooooooooNNooo////////////////////////////////////////oooooo
oooooooooooooooooooooooooooohddhNooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohsdNoNhooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohsdshhhdhooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohsdsNoooNhoooooooooooooooooooooooooooooooooooooooooo
hhhhhhhhoooooooooooooooooooohsNsdohhhodNoooooooooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNdhooooohhhhoooooooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNN///..../hshhhhhhhhhhoooooooooooooooooooooooooohh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNNNhhhoo///hdNhhoooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNNNNNdNhhhho/hdhoooooooooooooooooooooooooooooooooo
o/oo/////////////////////////dN/.........././ho/////////////////////////////////
/////////////////////////////ddooooooo//..o/.///////////////////////////////////
/////////////////////////////ddddddddddhhhhNo./..///////////////////////////////
/////////////////////////////No//////ooo////..//..//////////////////////////////
/////////////////////////////ho////////......../h///////////////////////////////
//////////////////////ooooooohdooooooo/////////NNd//////////////////////.///////
//oohhhNNNdddddssssssssssdddddsdNNNNhNNhhhhhhhNdNddNsssdddddddNNNNhhhhooo///////
sssddNNNhhhhooooo////////////osdo////////////////./N/////oooooohhhhhNNNdddsssddN
//////////////////oooohhhhhhhNsshhhhhoooooooooooo/.ooo/////////////////////////o
//oohhhNNdddsss--------------s---------sssdNNNNNdN/Ns-----sssdddNNNNhhooo/////oo
ds-----------ssssssddddsssssss--ssssssssdddddddddN/dddddddddsssss--------sssdNhh`,
`hhhooooooooooooooo////////////oo////////////////////////////////////////////////
ooooooooooooooooooooooooooooooNdo///////////////////////////////////////////ooo/
ooooooooooooooooooooooooooooooNdNhoooooooooooooo//////////o/o/oooooooooooooooooo
ooooooooooooooooooooooooooooooddsNNhoooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNsdNNhhoooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooddddNNhNNhoooooooooooooooooooooooooooooooooooooooo
hhhoooooooooooooooooooooooooooddNdhddNNoNNoooooooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhdhNdshohNNooooooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhh////ooo/NhNNhhhhohooooooooooooooooooooooooooho
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhh//////./ohNhhNhhhhooooooooooooooooooohhoohhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhddddddddN/...../ooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooNsoooooohhNNNho//.../ooooooooooooooooooooooooooooo
//////////////////////////////Ns/..........////hhoo/.///////////////////////////
//////////////////////////////NdNNNNNNNhhhhoo/..//ohho//////////////////////////
//////////////////////////////hNhhhhhNNdddssssdho/...oNo////////////////////////
//////////////////////////////ho/........///ooooooho/..ho///////////////////////
//////////////////////////////oNo/////////......../ohho/No///////./.....///////.
///////////ooohhhhNNNNNddddddddsdNNNNNhhhhhhhhNNNh//.oohho//////////////////////
NNddddssssssddddNNNNhhhhhhhoooosdhoooooooooooohhhhh//...hN/ddsssssdddddNNNhhhoo/
Nhhhoooo//////////////////////odso/////////////////////..oh////////ooooohhhNNddd
//////////ooohhhNNNNddddsssssss--ssssssdddddddddddNNhhooo///oo//////////////////
hhNdddss------------ssssssssssssssssssssssssssssssssssddNNood-----sssddNNhhhooo/
------ssssddddddsssssss----- -----------sssssddddddNddddddssss--------ss
`, `ooooooooooooooo/////////////////////////////////////////////////////////////////
oooooooooooooooo//////////////oo////////////////////////////////////////////////
ooooooooooooooooooooooooooooooddooo/////////////////////////////////////oooooooo
ooooooooooooooooooooooooooooooNdNooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooddshoNNNhooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNsdhhohhdNhoooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNddNN/hhhhdddhooooooooooooooooooooooooooooooooooo
hhhhhhooooooooooooooooooooooooddNdNNhhooohhNdhNhoooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhNhNdN/hhhooNooNNooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddho//////////oo/o////ooooooooooooooooooooooohoooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhNshhoooo///....../oo/.//hooooooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhNshdddddddNhhooooo//oo../NNooooooooooooooooooooooo
oooooooooooooooo//o//o/o//o/ooNso////ooo///oooooohhhho/.Ndo//o//////////////////
//////////////////////////////hso/////............/ohhhhoNd/////////////////////
//////////////////////////////hdddddddddddNhhhoo///./ohhNdd/////////////////////
//////////////////////////////oNooooohhohhhoooooooho.../ohdh///////.////////////
///////////////////////////////o//................./o...../hN///////////////////
///////////////////////////////Nh//////////////...../hoo/.../o/////.....////////
///////oohhhNNNNNdddddsssssssssssdNNNNNNNNNNNNNNNhhh/ohhhhoNNNNhhhhoooo/////////
dddssssdddNNNhhhhhoooooo///////Nso///////////////////..//ohoohhhhNNNddddsddddddN
ooo/////////////////////oooooooNshoooooo//////////////....///////////////////ooo
//////ooohhNNNdddssss------------------------sssddNNNhhhhNddddNNNhhhoooo////////
ohNds-------------ssssssddddddss-ssssssdddddddddddddddddddssss---------sssddNhho
`, `oooooooooooo////////////////////////////////////////////////////////////////////
`oooooooooooo////////////////////////////////////////////////////////////////////
ooooooooooooo////////////////oNo////////////////////////////////////////////////
ooooooooooooooooooooooooooooohdNooooo/////////////////////////////oooooooooooooo
ooooooooooooooooooooooooooooohdddhhNhooooooooooooooooooooooooooooooooooooooooooo
@ -94,192 +24,8 @@ hhhhhhhhhhhhhhhhohooooooooooooNdhhhhhhhNNNdNoo//..//oNooooooooooo////o//////////
ddssssddNNNhhooo///////////////hsh///////////////////o////////////////////////o/
ooo///////////////ooohhhNNNNdddd-sdddddddddddNNhhho/hdddddNNNNNhhhhoooo/////////
/////oohhNNdddss----------ssssss-ssssssssssssddddNhhdddddssssssssssssssssssssddo
/hNds----------sssddddssssss----- ----------sdddNhdsssssssddddddssdddddddddssh
`, `ooooooo//////////////////////oh/////////////////////////////////////////////////
oooooooooo///////////////////hdh////////////////////////////////////////////////
ooooooooooooooooooooooooooooohddhoooo////////////////////////////o/ooooooooooooo
ooooooooooooooooooooooooooooohdsNhddNhhhoooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooohdNdhhhdhNNNhNNhhhooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooohshdNNoNdsNNhhhhohdo//ooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooohshdNhhNhdhNddhohhhhhhhho//oooooooooooooooooooooooo
ooooooooooooooooooooooooooooohshNhNNN/NdsdNsdNhh/.../oo/./oooooooooooooooooooooo
hhhhhhhhhhhhhhhhhhhooooooohhhhsNh///oohhNhhdsdoNhoo///....//oooooooooooooooooooo
oohhhhhhhhhhhhhhhhhooooohhhhhhdNho/.......///oohhhhhhhhoooo/./oooooooooooooooooo
hhhhooooooooooooooooooooooooohdNhdddhhhhooo/o//////...//////../ooooooooooooooooo
ooooooooooooooooooooooooooooooddoohhhhhNNhhhNNdddNNNNho////....hho//////////////
//////////////////////////////Nd/...../......//ohNNNdddNNhhhh//oo///////////////
//////////////////////////////NdNNhNNhhhhhoooo///...............////////////////
//////////////////////////////hhhhhhddNNNddssssdNhhoooooooooooooho//////////////
//////////////////////////////o/....../...../////o/////ooohhhNhhhNN/////////////
//////////////////////////////oNo/////./////.......///............//////////////
//////////////ooohhhNNNNNNddddNdNNNNNNNhNNNNNhhhhhhNNNNNNNNNNhhhhhooooo/////////
/oohNNNdddsssssdddNNNhhhhhooooodso///////////////oooooooohhhhhhhNNNNdddddddddddN
sddNNhhooo/////////////////////Nso///////////////////////////////////////////ooo
/////////////ooohhhNNNddddssssss-ssssddssssssssssssssddddddNNNNhhhhoooo/////////
//ohhNNddsss--------ssssssssssss-sssssssddddddddddddddddddsssssssss-ssssssssddNN
s---------sssdddddddsssss---- - -------------sssssddddddddsdddddddssss-
`, `ooo///////////////////////////ho////////////////////////////////////////////////
ooo//////////////////////////odNo///////////////////////////////////////////////
oooooooooooo/////////////////oNdNhhho/////////////////////////////////////////oo
oooooooooooooooooooooooooooooodNdNohNhhooooooo///////////o/o/ooooooooooooooooooo
oooooooooooooooooooooooooooooodNdNhNhh/NNhhhoooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNdNNhohhhohNNNhohoooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNNNhdNdNhoooohoNhNNNhoooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooodNNhoNdNhodNh/hhhoN//ohhhooooooooooooooooooooooooo
ooooooooooooooooooooooooooooohddh/....///////oo/hNho/////ooooooooooooooooooooooo
ooooooohhhhoooooooooooooooooohddhoo///////......../ooohoo//ooooooooooooooooooooo
ooooooooooooooooooooooooooooooNdhddNddddNNNNhhooo///...//ohh//oooooooooooooooooo
ooooooooooooooooooooooooooooooNdo/ooooooooooohoooooooohho../o////oo/////////////
//////////////////////////////hd......................//ohho/.ohh///////////////
//////////////////////////////hddNNNNNNNNNNhhhooo///......./ohooohNo////////////
///////////////../////////////oNhhhhhhhhhhhhNNNdddhhhhoooooo/../hhNd////////////
//////////////////////////////o/................///////////oho/../h/////////////
///////////////////////////////Nh/////////...................ooo..//////////////
/////////////ooohhhNNNNNNddddddddNNNNNNNNNNNhhNNNNNNhhhoooo/..hhooooo///////////
ohhNNddddssssddddNNNhhhhhoooooodso//////////////oooooooooooo//hhNNNddddddddddNNN
ddNNhhooo//////////////////////Nso//////////////////////////////////////////oooo
////////////ooohhhNNNNddddssssss-sssssssssssssssssddddNNhhhhhhhhhoooo///////////
/ohhNNddsss--------ssssssssssssssssssdddddddddddddddddddddddsssssss-ssssssdddNNN
--------ssssdddddddddssss---- -- -------------sssssddddddddddsddddddsssssd
`, `/////////////////////////////hh/////////////////////////////////////////////////
o////////////////////////////NNo////////////////////////////////////////////////
oooooooooooo////////////////oNdNho//////////////////////////////////////////oooo
oooooooooooooooooooooooooooooddNhhNhoooooo////////////////oooooooooooooooooooooo
oooooooooooooooooooooooooooooddNhoohNhoooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooddshooohhNhhooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooddddoohoooddNhhoooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooodddNoohoohhhoNNo//ooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooNdN/.....//hNNNho/.//oooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooNshhooo///./h/hddNNo////ooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooNsNddddNhhhoo/oNddssNhoo//ooooooooooooooooooooooooo
ooooooooooooooooooooooooo//o/hs//////////oh.../hNdsdNo/oo///////////////////////
/////////////////////////////hd//////....../....../ohdN/..//.///////////////////
/////////////////////////////odddddddddhhooo/oNo//...//hho/.////////////////////
///////////...../////////////ohoooooohhhoooohhNdNhhhho/.oNdh/////////....///////
//////////////////////////////o/............../hh//oNddNh/////////...../////////
//////////////////////////////Nh////////........//.../ohNdo/////////////////////
/////////ooohhhNNNNdddddddddddddNNhhhhhhhhhhhhho/.//oooooho/..ohhhoooo//////////
NNdddssssdddNNhhhhoooooo//////Nso///////...//////////////..//ohhhNNNNddddddddNNN
hhooo///////////////////////oohsh///////////////////.////////////////////////ooo
////////ooohhhNNNdddssss------s--ssssssssddNNNNNNNNhhhNNNdddNNNhhhhoooo/////////
hNNddss------sssssssssssddsssss-ssssssssdddddddddddddddddddddddssssssssssssdddNN
----ssssdddddddddsss---- -- -sssssdds--sssssdddddddsdddddddddsss-
`, `////////////////////////////hN//////////////////////////////////////////////////
////////////////////////////hdho////////////////////////////////////////////////
oooooooo////////////////////hdsNhhhoo///////////////////////////////////oooooooo
ooooooooooooooooooooooooooooNNddoohhhNNhoooooooo/oo/oooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdNddNhooohhhhNNN/hhoooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohdhNNNN/hoo/hhNohhhhhNNhhooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohsoNNhddNohohoooohhN/..//ooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohshhhoNNNohhh/ohho/hhhho/..../oooooooooooooooooooooo
oooooooooooooooooooooooooooohsh/.........////////ooohhhoo/./hhhooooooooooooooooo
oooooooooooooooooooooooooooohshhhhooooo///.............//oooo/hNNhoooooooooooooo
oooooooooooooooooooooooooooohdNNdddddddddNNhhhhhhooooooo//.../..oNNhoooooooooooo
ooooooooooooooooooooo///////odh.////////ooo/////oooooooohNNho/...///////////////
/////////////////////////////Nh///////....................//ohNh/o//////////////
/////////////////////////////NNdddddddddddddNNNNNhoooo/////.../oNh//////////////
/////////./....//////////////hoooooooooohhhhhhhhhhNhooooooooho/..///////./...///
/////////////////////////////o//............................./hho../////////..//
/////////////////////////////oNo////////////////.............../h//////...//....
//////////oohhhNNNNdddddddddddddNNNNNNNNNNNNNNNNNNNNhhhhhhhhho/hNNNhhhhhooo////.
hNNdddssssddNNNhhhoooo////////dd///////.............../////////ooooohhhhNNNddddN
Nhhooo/////////////////////oooNsoooo//////////////////////////////////.....././/
/////////ooohhhNNdddssss-----ss----------s------sssdNNNNNNNddddNNNNNhhhoooo////.
ohNNddss-----ssssssssssdddsssss-ssssssssssssssddddddddddddddddddddsssssssssssssN
-----ssssddddddddsss---- - -dddds-sssssddddsddddddddddddd
`, `////////////////////////////dh//////////////////////////////////////////////////
////////////////////////////NNo/////////////////////////////////////////////////
ooooo//////////////////////oNdNNho///////////////////////////////////////////ooo
oooooooooooooooooooooooooooodNdhNdhooo//////////////////////////oooooooooooooooo
oooooooooooooooooooooooooooodNdNNdhdNooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooodNdNhNhNddhhoooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooodNNNoNddhNNddNhooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooddhhohhhhhNhdddh/ooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdh/......//hNsdo/./oooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdhhhhoooooohhNN//..../ohooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNshNNNNNNNNdddNNdNo/..../NNooooooooooooooooooooooooo
ooooooooooooooooooo/////////hd/.......////oooNdsNo....oNN///////////////////////
////////////////////////////odo////////........ohNNoo/.///No////////////////////
////////////////////////////oNNNNNNNdddddNNNNNo.../////ohNdNN/././..////////////
/////////////////////////////h//////oooohhhhNNNhooo//.........////////////./.../
/////////////////////////////o/................../oNddNdNNhhN//../....///.......
/////////////////////////////Nh///////////////......./ooooo//.////////////////..
////////ooohhhNNNNddddddddddddsNNNhhhhhhhhhhhhNNdddddddddNNNNNNNNNhhhhoooo/////.
NNdddsssdddNNNhhooooo////////hso/////////.............////////ooooohhhhNNNddddd/
hhoo/////////////////////oooohsNooo//////////////////////..///////////..////////
/////////oohhNNNdddsss------ss--ssssssssssssss-ssssssssssssddddNNNNhhhooooo/////
hhNddss-----ssssssssssddddssssssssssssssssssdddddddddddddddddddddsssssssssssssdo
----sssdddddddddsss---- - -------ssssdddddsdddddddNdddddo
`, `////////////////////////////ho//////////////////////////////////////////////////
///////////////////////////oNNo///////////////////////////////////////////////o/
oooooo/////////////////////oNdhho////////////////////////////////////////ooooooo
ooooooooooooooooooooooooooooddNohNoooo/////////////////////////ooooooooooooooooo
oooooooooooooooooooooooooooodNNhhohNNooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooodNdhhh/hNNhhoooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdNdNoNdooohNdhoooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdNNhoNNNohhooNhNhooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdNN....//////hNNNhoooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooddhooo/////.......//oooooooooooooooooooooooooooooooh
ooooooooooooooooooooooooooooddNdddNNNNNdNoo//....///oooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNd///////oooohoooohhoohhooo/////////////////////////
////////////////////////////hd/................//ohNdNddNNh/////////////////////
////////////////////////////hdNNdddNNNNhhhhoo/////../o/ohNddN///////////////////
////////////////////////////ohoohhhhhhhhhNNNNhhhhhhoo/......////////////////////
////////////////////////////o/....................//ohhoohhhhoo//////.//..../...
/////////////////////////////No///////................/ohNdNNNdh///////..///////
//////////ooohhhNNNNNdddddddddNNNhhhhhhhhhhhhhhhhhhho/../oooooohhoooo///////////
hNNdddssssddNNNhhhhoooooo////Nd///////........////////..../ooohhhNNNNdddddddNNNo
Nhhooo///////////////////////hso///////////////..................////....////oo/
/////////ooohhhNNNdddsssssssss-ssssssssssssssssdddNNNhhhhhhNNhhhhoooooo/////////
hhNNddss------ssssssssssddddsdssssssddddddddddddddddddddddddddssssssssssssdddNNo
-----sssdddddddddssss----- -- ----------ssssssdddddddddsdddddddddsssso
`, `////////////////////////////oh//////////////////////////////////////////////oooo
////////////////////////////hdo///////////////////////////////////////////oooooo
oooooooooooo//////////////oohdNhohoo///////////////////////////ooooooooooooooooo
ooooooooooooooooooooooooooooNdNhhhNhhhoooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdNhhNNo/hNhohhooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdNNhhdNhooo/hhNohhooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNdNhhohNd/ohhhohohNNNNhooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooNsNNhhhoddNooo/oohh//oNNNhoooooooooooooooooooooooooo
ooooooooooooooooooooooooooohNsN/.oo/hNdoNNhooho......ooooooooooooooooooohhhhhhhh
hhhhhhhhhooooooooooooooooohhNsNo///.../ohhh/ohhhhoo//...//ooooooooooooohhhhhhhhh
ooooooooooooooooooooooooooooNsNdNNNNNo/////...//oohhhhhooooooooooooooooooooooooo
oooooooooooooooooooooooooooohdo/o/hhhNNNhoohoo/......//oohhNdNNh////////////////
////////////////////////////od/......../oooohddNhoo//....../oohdNo//////////////
////////////////////////////oNddNNdhhhhooooo//oooooohhhooo//.....///////////////
/////////////////////////////hhhhohhooooohNdsdo.......//oohhhhoo/.//////////////
/////////////////////////////o/............/ohNNhooo//......///oo///////........
/////////////////////////////Nh/////////........oohNhhhhooo//....///////////////
/////////ooohhhNNNNNdddddddddddNNNNNNNNNNNhhhhooo///hNNNNNNNNNNo////////../.....
NddddssssdddNNNhhhhooooooooooNso////////////////oooooohhhhhNNNNdddddddddNNNNhhoo
hhooo////////////////////////hsh///////////......////.............//////oooohhho
////////ooohhhNNNddddsssssssss--ssssssssddddNNdddddddNNNNhhhhooooo//////////////
hNdddss-------ssssssssssssddddsssssdddddddddddddddddddddssssssssssssssdddNNhhhho
----sssddddddddddssss----- -- ---------ssssssdddddddddddddsdddddsss---ssh
`, `ooooo//oo///////////////////////////////////////////////////////oo/ooooooooooooo
oooooooooooooooooo/////o/o/ooNho//////////////////////oooooooooooooooooooooooooo
oooooooooooooooooooooooooooooddhoooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohdsdhNhhoooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohdddhhdNNNhooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohdNdNdNhdddNhNhhoooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooohshdNhNhdNdhddNhhhhooooooooooooooooooooooooooooooooo
hhhhhhhhhhhhhhhoooooooohhhhhhshNhodddhdssddNhNhoooooooooooooooooooooohhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhshhohhhhoNNdNNssNhhoohNNhoo/oohhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNo/////.//////ohhhho/.//hNNho///ohhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhshNNNhhhhhoooooo//////ooo/..ohNho./hhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhNNdddddddddddsssddNh//ohhho/.oNho/ooooooooooooooo
/////////////////////////////do...../////oooohhNNddsh/../oNh..oh////////////////
/////////////////////////////dhoo//////............/oho/...oNh//////////////////
/////////////////////////////NNNNNNNNNNNNNNNNhhhhhoo../oho/..///////////////////
/////////////////////////////h///////oohhhNNNNNdddssd.../oo/////////////////////
/////////////////////////////ho//...............////ooo/...////.///////...//////
//////////////////oooooohhhhhNNoooooo////////////..../ooo///////////////////////
oohhNNNddddssssssssdddddddNNNdsNhhhhhhhhhhhhhhhhhhNhNdddddddddNNNNhhhhoo////////
dddNNhhhhoooo////////////////osN///////////////////////////ooooohhhhNNNdddddddN.
///////////////ooohhhhhNNNNNNN-dhhhooooooooooooooooo///////////////////////////.
oohhNNNddsss--------------ssss-sssssssssssssssssss---ssssssssdddNNNhhhooooo/////
-----------sssssdddddsssssssss--sssssssssddddddddddddddddddddssss------ssddddNN/
`, `ooooooooooooo//////////////////////////////////////////////ooooooooooooooooooooo
/hNds----------sssddddssssss----- ----------sdddNhdsssssssddddddssdddddddddssh`,
`ooooooooooooo//////////////////////////////////////////////ooooooooooooooooooooo
oooooooooooooooooooooooooooooNNoooooo///////oooo/ooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooNdNhooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooddNhhNhoooooooooooooooooooooooooooooooooooooooooooo
@ -301,121 +47,5 @@ ohhNNddddssssssssdddddNNNNNNNNsdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooo////ohhhooo/////
ddNNNhhooooo//////////////////sd///////////////////////////////oo///hhNNNddddddN
/////////////ooohhhhNNNNNNNdNNs-dNNNNhhhhhhoooooooooooo/////////////////////////
oohNNNddsss--------------sssss-ssssssssssssssssddddddddddddssssddddNNhhhhoooo/..
----------sssssddsssssssssss-------ssssssssssdddddddddddddddddddsss-----sssddh..
`, `ooooooooooo////////////////////////////////////////////////ooooooooooooooooooooo
oooooooooooooooooooooooooooodhooooooo///oo/ooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooddNhoooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdddhNNhohooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdNdhhNhohNNhhooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohshdNNNhddhhooNNNhhoooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohshNdhNhNhdNNhohhoNhoooooooooooooooooooooooooooooohhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhshNNoNdN/dssNoohhNoooo//oooooooooohhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhsNooooooohhhhhNNoh//.....//ohhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhsNo///../..../////ohhhhoo//./ohNhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhsNNddNhhhhhhhoohoo..///ohNNNh/../hhhhhhhhhhhhhhhhhhh
hhhhhhhhhhooooooooooooooooohdhhhNNNNNNNNNdddssdNho/..../ohho../Nhooooooooooooooo
////////////////////////////do............///ohhohhhoo//.../ooooh///////////////
////////////////////////////dhhhhoooooo///..........///ohoo/.../o///////////////
////////////////////////////NNNNNddddddddddddNNNNho/...../oooo//////////////////
////////////////////////////o/.....////ooohhhNNNddsNho//..../o//////////////////
////////////////////////////hh//////..............////ooho/..///////////////////
////////////oooohhhhhhNNNNNNNdhhooooooooooooooo///////...oho////////////////////
hNNdddsssssssddddNNNNNNhhhhhNsNoooooooooooooohhhhhNNNNNhoNddsdddddNNNNNhhooo////
NNhhoooo////////////////////osN/////////////////////////////////oooohhhNNNdddddd
//////////ooohhhhNNNNdddddddd-sdNNNhhhhhhhhhhhhhhhhooooooooo////////////////////
hNNdddss-------------ssssssss-ssssssssssssssssssssssddsssssssssssdddNNhhhoooo///
-------sssssdddssssssssss------------ssssssssdddddddddddddddddddssss-----ssddddh
`, `oooooooooo////////////////////////////////////////////////oooooooooooooooooooooo
ooooooooooooooo/oo//ooooooohNooo/o/////////////ooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdhoooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooNsdNNhooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooodNsN/Ndhooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooodNNdNhooNhhoooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooodNNdNh/hhhddhoooooooooooooooooooooooooooooooooooohhhh
hhhhhhhhoooooooooooooooohhhddhdoNNhohNhdhNhoooooooooooooooohhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhddhhoNNh/oNoNNddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhddo////...//hNNossNhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhNdhhhhhoo//../ooNsssNhooohhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhNdNddddddhhhhho/./ohNdssNh//ooooooooooooooooooooooooo
ooooooooooooooooooo//////ooNN////////////oho/.////ohdsdho///////////////////////
///////////////////////////hN//////......../ohhho/////ohddo/////////////////////
///////////////////////////oNddddddddNhooooo//NddddNho/../h/////////////////////
///////////////////////////ooooooooohhoooooohh/ohNNdddddNo./////////////////////
////////////////////////////o//............../h/..../ohhNNo/////////////////////
//////////////////////////ooNh/////////////....hho//..../o//////////////////////
///oohhhNNNdddddsssssssssssdddNNNNNNNNNNNNhhhhoodddddNNNddddNNNNNNhhhooo//////..
ssssdddNNNhhhooooooo//o/////Ns///////////./////.///oohho//oooohhhhNNNNNdddddd...
////////////////////oooohhhhN-Nooooooo////////////////////////////////////////..
///oohhhNNdddsss------------s---------ssddNNNNNNNNNNNNdssssddddNNNhhhhooooo/////
dss-------------ssssssdddssss-sssssssddddddddddddddddddddddsssss------sssdddddoo
`, `ooooooooooooooooooo////ooooooooo////////////oooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooohdoooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooohsdhoooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooNdshhNNhhooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooNNdd/hhhhdNhoooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooNNNddhohhhhhhNhhooooooooooooooooooooooooooooooooooohhh
ooooooooooooooooooooooooohNdNdhNohoh/hhNoNdNhooooooooooooooooooohhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhNdhNoddhoNhhohhhhhdooohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhNdhoooNhohhh/hhNh/Nhohhoohhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhNdh//.///...////ooohNNdsdNhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhNdhdNNhhhoo//......../oohdssNhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhNNhNNdddsssdNhhhhoooo//..../hNNooooooooooooooo///ooooo
oooo//////////////////////hN/...///ooohhooohhhhNNhho/.///oo/////////////////////
//////////////////////////oNhooo///............//ohNNNhhhho/////////////////////
//////////////////////////oNNhNdNdsdNNNNhho///....../ohNNdssNho/////////////////
///////////////////////////o/..//ohhhNNddddNhhhhhho//.../ohNdssdo///////////////
///////////////////////////ho////........./////ooohNNhho...../ohNh//////////////
//////////////oooohhhhhhhNhNNhooooooooo/////......../ohNNho/.....///////////////
hhNNddddssssssssdddddNNNNNNdshhhhhhoooooooohhooooo//.../ohNddNhhoNNNNNhhhooo////
dNNhhhhooo/////////////////hsh///////////////////////...../hNNNNooohhhhNNNddddd.
////////////oooohhhhNNNNNNNN-dNhhhhoohoooooooooooooooo///...///////////////////.
ohhNNddsss--------------ssss-ssssssssssssdddddddddddddNdssddssssdddNNhhhhoooo///
----------sssssddsssssssssss----ssssssssssdddddddddddddddddddddssss-----sssddsN/
`, `oooooooooooooooooooooooooooooooo/////////ooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooodNooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooddNoooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooNshdNhooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooohNdNNdhhhooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooohNNdhhohNNhooooooooooooooooooooooooooooooooooooooohhhh
ooooooooooooooooooooooooohhNNdhoNNhohhhhoooooooooooooooooooooohhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhdhhdNoodhohNhhhohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhdhooh/hhNhohooh//ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhNho////oNNhohhohhooohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhNhNddNNohNhohh.../ohhhohhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhoooooooooooooNhohNddN./ohNNho//../hNo/oooooooooooooooooooo/ooooooo
///////////////////////////No.....//..../oohhhoo/.oo////////////////////////////
///////////////////////////hhhooo/../o/.....//ohNNo/oo//////////////////////////
///////////////////////////hhhNddNNNNohhho/......ohdhhh/////////////////////////
///////////////////////////o/.//ooohdh./hNNhho/.....oNNN////////////////////////
///////////////////////////oh///...../...//ohhhhho//..odd///////////////////////
///////////oooohhhhNNNNNNNNNdhhooooo/.oho/....//ohhhNhoNNhoo////////////////////
NNNdddsssssssdddNNNNNhhhhhhhdNooooooo/.hhNNho/...../ohNhhddddssdddddddNNNNhhhoo/
NNhhhooo//////////////////ooNN//////////.//ohNhho//....o///////////ooooohhhNNNN.
///////////ooohhhNNNddddddddddNdNNNNNNNho/.../oohNhhhooohoooooo////////////////.
hhNNddss-------------ssssssssssssssssssssdNho/////ooNdssssssssssssssddNNNhhhhho/
-------ssssssddsssssssss----s -------sssssdddNhoooohNNddddddddddsddsss-----ssdh/
`, `ooooooooooooooooooooooooooooNooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdhoooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdNoooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohsNhooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohdsdooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooohNddNooooooooooooooooooooooooooooooooooooohhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhNNshhhhhhhooooooohohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhsNhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhh//sshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhoodNNhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhNshNdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ooooooooooooooooooooooooooooh/o//hhoooooooooooooo////oo//oo/ooo/o////////ooooooo
////////////////////////////h....od/////////////////////////////////////////////
////////////////////////////Nhhh.hs/////////////////////////////////////////////
////////////////////////////hohd/Nso////////////////////////////////////////////
////////////////////////////o..//dso////////////////////////////////////////////
////////////////////////////oo/.oddo////////////////////////////////////////////
/////////oohhhhNNNdddddddddNho/.odd//sddddddddddddddddNNNNNNNhhhhoooo///////////
NdddssssssddNNNhhhhoooooooo/o/..hdd..N////////////oooooooohhhhhNNNNdddsddddddNN.
Nhhooo//////////////////////////hNh//do///////////////////////////////////ooooo.
////////oohhhNNddddssss---sdNho/NN///ss--------ssssssssddddNNNNhhhhhooo/////////
hNddss----------ssssssssssssddNoNo//hdNNdddddddddddddddddddsssss-ssssssssssddNNh
------ssssdssssssss------ ssdhh///NdhN----------sssssdddddddddsddddddddssss--s
`,
----------sssssddsssssssssss-------ssssssssssdddddddddddddddddddsss-----sssddh..`,
}

View file

@ -63,5 +63,5 @@ var FrameMap = map[string]FrameType{
"earth": Earth,
"kitty": Kitty,
"india": India,
"brittany": Brittany,
"brittany": Brittany,
}

15
go.mod
View file

@ -1,15 +1,8 @@
module ascii-live
module github.com/hugomd/ascii-live
go 1.24.1
go 1.17
require (
github.com/golang/glog v1.2.4
github.com/gorilla/mux v1.8.1
github.com/stretchr/testify v1.10.0
)
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
github.com/gorilla/mux v1.7.3
)

20
go.sum
View file

@ -1,16 +1,4 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=

View file

@ -1,103 +0,0 @@
package handlers
import (
"encoding/json"
"fmt"
"net/http"
"strings"
"time"
"ascii-live/frames"
"github.com/golang/glog"
"github.com/gorilla/mux"
)
var NotFoundMessage = map[string]string{
"error": "Frames not found. Navigate to /ascii/list for list of frames. Navigate to https://github.com/hugomd/ascii-live to submit new frames.",
}
var NotCurledMessage = map[string]string{
"error": "You almost ruined a good surprise. Come on, curl it in terminal.",
}
var availableFrames []string
func init() {
for k := range frames.FrameMap {
availableFrames = append(availableFrames, k)
}
}
func writeJson(w http.ResponseWriter, r *http.Request, res interface{}, status int) {
w.Header().Set("Content-Type", "application/json")
data, err := json.Marshal(res)
if err != nil {
return
}
w.WriteHeader(status)
fmt.Fprint(w, string(data))
}
func ListHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, map[string][]string{"frames": availableFrames}, http.StatusOK)
}
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, NotFoundMessage, http.StatusNotFound)
}
func NotCurledHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, NotCurledMessage, http.StatusExpectationFailed)
}
func Handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
flusher := w.(http.Flusher)
vars := mux.Vars(r)
frameSource := vars["frameSource"]
glog.Infof("Frame source %s", frameSource)
frames, ok := frames.FrameMap[frameSource]
if !ok {
NotFoundHandler(w, r)
return
}
userAgent := r.Header.Get("User-Agent")
if !strings.Contains(userAgent, "curl") {
NotCurledHandler(w, r)
return
}
w.Header().Set("Transfer-Encoding", "chunked")
w.WriteHeader(http.StatusOK)
i := 0
for {
select {
// Handle client disconnects
case <-ctx.Done():
glog.Infof("Client stopped listening")
return
default:
if i >= frames.GetLength() {
i = 0
}
// Artificially wait between reponses.
time.Sleep(frames.GetSleep())
// Clear screen
clearScreen := "\033[2J\033[H"
newLine := "\n"
// Write frames
fmt.Fprint(w, clearScreen+frames.GetFrame(i)+newLine)
i++
// Send some data.
flusher.Flush()
}
}
}

101
main.go
View file

@ -1,15 +1,108 @@
package main
import (
"encoding/json"
"flag"
"fmt"
"net/http"
"strings"
"time"
"ascii-live/handlers"
"github.com/hugomd/ascii-live/frames"
"github.com/golang/glog"
"github.com/gorilla/mux"
)
var NotFoundMessage = map[string]string{
"error": "Frames not found. Navigate to /list for list of frames. Navigate to https://github.com/hugomd/ascii-live to submit new frames.",
}
var NotCurledMessage = map[string]string{
"error": "You almost ruined a good surprise. Come on, curl it in terminal.",
}
var availableFrames []string
func init() {
for k := range frames.FrameMap {
availableFrames = append(availableFrames, k)
}
}
func writeJson(w http.ResponseWriter, r *http.Request, res interface{}, status int) {
w.Header().Set("Content-Type", "application/json")
data, err := json.Marshal(res)
if err != nil {
return
}
w.WriteHeader(status)
fmt.Fprint(w, string(data))
}
func listHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, map[string][]string{"frames": availableFrames}, http.StatusOK)
}
func notFoundHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, NotFoundMessage, http.StatusNotFound)
}
func notCurledHandler(w http.ResponseWriter, r *http.Request) {
writeJson(w, r, NotCurledMessage, http.StatusExpectationFailed)
}
func handler(w http.ResponseWriter, r *http.Request) {
cn := w.(http.CloseNotifier)
flusher := w.(http.Flusher)
vars := mux.Vars(r)
frameSource := vars["frameSource"]
glog.Infof("Frame source %s", frameSource)
frames, ok := frames.FrameMap[frameSource]
if !ok {
notFoundHandler(w, r)
return
}
userAgent := r.Header.Get("User-Agent")
if !strings.Contains(userAgent, "curl") {
notCurledHandler(w, r)
return
}
w.Header().Set("Transfer-Encoding", "chunked")
w.WriteHeader(http.StatusOK)
i := 0
for {
select {
// Handle client disconnects
case <-cn.CloseNotify():
glog.Infof("Client stopped listening")
return
default:
if i >= frames.GetLength() {
i = 0
}
// Artificially wait between reponses.
time.Sleep(frames.GetSleep())
// Clear screen
clearScreen := "\033[2J\033[H"
newLine := "\n"
// Write frames
fmt.Fprint(w, clearScreen+frames.GetFrame(i)+newLine)
i++
// Send some data.
flusher.Flush()
}
}
}
// Server.
func main() {
flag.Parse()
@ -17,9 +110,9 @@ func main() {
flag.Set("logtostderr", "true")
r := mux.NewRouter()
r.HandleFunc("/ascii-live/list", handlers.ListHandler).Methods("GET")
r.HandleFunc("/ascii-live/{frameSource}", handlers.Handler).Methods("GET")
r.NotFoundHandler = http.HandlerFunc(handlers.NotFoundHandler)
r.HandleFunc("/list", listHandler).Methods("GET")
r.HandleFunc("/{frameSource}", handler).Methods("GET")
r.NotFoundHandler = http.HandlerFunc(notFoundHandler)
srv := &http.Server{
Handler: r,

View file

@ -1,69 +0,0 @@
package test
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"ascii-live/handlers"
"github.com/gorilla/mux"
)
func TestListHandler(t *testing.T) {
r := mux.NewRouter()
r.HandleFunc("/ascii-live/list", handlers.ListHandler)
req, err := http.NewRequest("GET", "/ascii-live/list", nil)
if err != nil {
t.Fatal(err)
}
recorder := httptest.NewRecorder()
r.ServeHTTP(recorder, req)
if status := recorder.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
}
var response map[string][]string
if err := json.Unmarshal(recorder.Body.Bytes(), &response); err != nil {
t.Errorf("error decoding response: %v", err)
}
}
func TestNotFoundHandler(t *testing.T) {
r := mux.NewRouter()
r.NotFoundHandler = http.HandlerFunc(handlers.NotFoundHandler)
req, err := http.NewRequest("GET", "/not-existing", nil)
if err != nil {
t.Fatal(err)
}
recorder := httptest.NewRecorder()
r.ServeHTTP(recorder, req) // Router verarbeitet die Anfrage
if status := recorder.Code; status != http.StatusNotFound {
t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusNotFound)
}
}
func TestNotCurledHandler(t *testing.T) {
r := mux.NewRouter()
r.HandleFunc("/ascii-live/donut", handlers.NotCurledHandler)
req, err := http.NewRequest("GET", "/ascii-live/donut", nil)
if err != nil {
t.Fatal(err)
}
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36")
recorder := httptest.NewRecorder()
r.ServeHTTP(recorder, req)
if status := recorder.Code; status != http.StatusExpectationFailed {
t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusExpectationFailed)
}
}

View file

@ -1,66 +0,0 @@
package test
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"ascii-live/handlers"
)
func TestListHandler2(t *testing.T) {
req, err := http.NewRequest("GET", "/ascii/list", nil)
require.NoError(t, err, "Failed to create request")
recorder := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.ListHandler)
handler.ServeHTTP(recorder, req)
assert.Equal(t, http.StatusOK, recorder.Code, "Status code should be OK")
assert.Equal(t, "application/json", recorder.Header().Get("Content-Type"), "Content-Type should be application/json")
var responseBody map[string][]string
err = json.Unmarshal(recorder.Body.Bytes(), &responseBody)
require.NoError(t, err, "Failed to unmarshal response JSON")
}
func TestNotFoundHandler2(t *testing.T) {
req, err := http.NewRequest("GET", "/some/unknown/path", nil)
require.NoError(t, err, "Failed to create request")
recorder := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.NotFoundHandler) // Test directly
expectedBodyBytes, err := json.Marshal(handlers.NotFoundMessage)
require.NoError(t, err, "Failed to marshal expected NotFoundMessage")
handler.ServeHTTP(recorder, req)
assert.Equal(t, http.StatusNotFound, recorder.Code, "Status code should be Not Found")
assert.Equal(t, "application/json", recorder.Header().Get("Content-Type"), "Content-Type should be application/json")
assert.JSONEq(t, string(expectedBodyBytes), recorder.Body.String(), "Response body does not match expected NotFoundMessage")
}
func TestNotCurledHandler2(t *testing.T) {
req, err := http.NewRequest("GET", "/ascii/someframe", nil)
require.NoError(t, err, "Failed to create request")
// crucially, DO NOT set User-Agent to 'curl'
recorder := httptest.NewRecorder()
handler := http.HandlerFunc(handlers.NotCurledHandler) // Test directly
expectedBodyBytes, err := json.Marshal(handlers.NotCurledMessage)
require.NoError(t, err, "Failed to marshal expected NotCurledMessage")
handler.ServeHTTP(recorder, req)
assert.Equal(t, http.StatusExpectationFailed, recorder.Code, "Status code should be Expectation Failed")
assert.Equal(t, "application/json", recorder.Header().Get("Content-Type"), "Content-Type should be application/json")
assert.JSONEq(t, string(expectedBodyBytes), recorder.Body.String(), "Response body does not match expected NotCurledMessage")
}