Skip to content

Commit

Permalink
Merge pull request #4 from fisirc/stiller-backend
Browse files Browse the repository at this point in the history
Stiller backend
  • Loading branch information
pandadiestro authored Nov 10, 2024
2 parents 38a1983 + 02d9713 commit 72ea5b6
Show file tree
Hide file tree
Showing 22 changed files with 1,207 additions and 0 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Deploy Action
on: [ push ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: system deps
run: |
sudo apt install --upgrade -y openssh-client openssh-known-hosts openssh-server
- name: ssh setup
run: |
mkdir -p ~/.ssh/
chmod 700 ~/.ssh/
eval "$(ssh-agent -s)"
echo "${{ secrets.SSH_PRIVKEY }}" | tr -d '\r' > ~/.ssh/id_rsa
echo "${{ secrets.SSH_PUBKEY }}" | tr -d '\r' > ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub
ssh-add -vvv
ls ~/.ssh/
ssh-keyscan -H "${{ secrets.SSH_IP }}" >> ~/.ssh/known_hosts
- name: deploy
run: ssh -vT "bauer@${{ secrets.SSH_IP }}" "cd ~/clones/metagallery/stiller-backend && git pull"
35 changes: 35 additions & 0 deletions stiller-backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# database
*.db
*.db-shm
*.db-wal

# Dependency directories (remove the comment below to include it)
# vendor/

# Go workspace file
go.work
go.work.sum

# config file
.env

static/
tmp/
build/

12 changes: 12 additions & 0 deletions stiller-backend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<div align="center" style="text-align: center;">

<img src="./docs/media/ben_stiller.png" width="350px"></img>

# Stiller

*metagallery's static server and content distribution layer*

</div>



21 changes: 21 additions & 0 deletions stiller-backend/cmd/serve/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package main

import (
"log"
"net/http"
"stiller"
"stiller/internal/router"
)

func main() {
new_router := router.NewStillerRouter()
if new_router == nil {
log.Fatalln("[ ❌ ] invalid router, exiting...")
}

log.Println("[ ✅ ] server started at port", stiller.StillerConfig.Port)

log.Fatalln(http.ListenAndServe(stiller.StillerConfig.Port, new_router))
}


27 changes: 27 additions & 0 deletions stiller-backend/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package stiller

import "github.com/profclems/go-dotenv"

type ConfigType struct {
// local directory where to retrieve/store data from/to
Port string
FilesPath string
DBPath string
Secret []byte
BCryptCost int
}

func newConfig() *ConfigType {
dotenv.Load()

return &ConfigType{
Port: dotenv.GetString("Port"),
FilesPath: dotenv.GetString("FilesPath"),
DBPath: dotenv.GetString("DBPath"),
Secret: []byte(dotenv.GetString("Secret")),
BCryptCost: dotenv.GetInt("BCryptCost"),
}
}

var StillerConfig = newConfig()

76 changes: 76 additions & 0 deletions stiller-backend/db/create.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
create table tier (
id integer unique primary key not null,
name text unique not null
);

create table user (
id integer unique primary key autoincrement not null,
avatar integer references file (id),
tier integer not null references tier (id),
displayname text not null,
username text unique not null,
mail text not null,
bpasswd text not null
);

create table filetype (
code integer unique primary key not null,
name text unique not null
);

create table file (
id integer unique primary key autoincrement not null,
owner integer not null references user (id),
type integer not null references filetype (code),
path text unique not null,
filename text not null,
title text,
description text,
ext text not null,
hashed integer not null,
size real not null,
deleted integer not null
);

create table gallery (
id integer unique primary key autoincrement not null,
owner integer not null references user (id),
title text not null,
description text,
deploy_stage integer not null,
url text unique not null
);

create table template (
id integer unique primary key autoincrement not null,
tier integer not null references tier (id),
title text not null,
description text
);

create table templateblock (
id integer unique primary key autoincrement not null,
template integer references template (id),
gallery integer references gallery (id),
res integer references file (id),
title text not null,
description text not null,
type text not null,
posx real not null,
posy real not null,
scale real not null,
direction integer not null
);

insert INTO filetype VALUES
(0, 'image'),
(1, 'video'),
(2, 'object3d');

insert into tier values
(0, 'free'),
(1, 'van gogh'),
(2, 'picasso');

insert into user VALUES (0, null, 0, 'admin', 'admin', '', '');

Binary file added stiller-backend/docs/media/ben_stiller.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 28 additions & 0 deletions stiller-backend/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
module stiller

go 1.23.2

require (
github.com/cespare/xxhash v1.1.0
github.com/go-json-experiment/json v0.0.0-20240815175050-ebd3a8989ca1
github.com/julienschmidt/httprouter v1.3.0
github.com/profclems/go-dotenv v1.1.1
golang.org/x/crypto v0.28.0
zombiezen.com/go/sqlite v1.4.0
)

require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/google/renameio v1.0.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/kataras/jwt v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/spf13/cast v1.7.0 // indirect
golang.org/x/sys v0.26.0 // indirect
modernc.org/libc v1.55.3 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.8.0 // indirect
modernc.org/sqlite v1.33.1 // indirect
)
85 changes: 85 additions & 0 deletions stiller-backend/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/go-json-experiment/json v0.0.0-20240815175050-ebd3a8989ca1 h1:xcuWappghOVI8iNWoF2OKahVejd1LSVi/v4JED44Amo=
github.com/go-json-experiment/json v0.0.0-20240815175050-ebd3a8989ca1/go.mod h1:BWmvoE1Xia34f3l/ibJweyhrT+aROb/FQ6d+37F0e2s=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/renameio v1.0.1 h1:Lh/jXZmvZxb0BBeSY5VKEfidcbcbenKjZFzM/q0fSeU=
github.com/google/renameio v1.0.1/go.mod h1:t/HQoYBZSsWSNK35C6CO/TpPLDVWvxOHboWUAweKUpk=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kataras/jwt v0.1.12 h1:FHPgTTj5UqjlBye4PA4/oxknCY+kQ9K34XAi8d37glA=
github.com/kataras/jwt v0.1.12/go.mod h1:xkimAtDhU/aGlQqjwvgtg+VyuPwMiyZHaY8LJRh0mYo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
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/profclems/go-dotenv v1.1.1 h1:ljDC1/Szkaycg0hrVZzVRewhaa7Oz0Y+wExoIwvhxSc=
github.com/profclems/go-dotenv v1.1.1/go.mod h1:FrHcDM5jgatF8Zi60aTUrAdj9oDYAl4EvbVJLwRbeOo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ=
modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
modernc.org/ccgo/v4 v4.19.2 h1:lwQZgvboKD0jBwdaeVCTouxhxAyN6iawF3STraAal8Y=
modernc.org/ccgo/v4 v4.19.2/go.mod h1:ysS3mxiMV38XGRTTcgo0DQTeTmAO4oCmJl1nX9VFI3s=
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w=
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU=
modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM=
modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k=
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
zombiezen.com/go/sqlite v1.4.0 h1:N1s3RIljwtp4541Y8rM880qgGIgq3fTD2yks1xftnKU=
zombiezen.com/go/sqlite v1.4.0/go.mod h1:0w9F1DN9IZj9AcLS9YDKMboubCACkwYCGkzoy3eG5ik=
34 changes: 34 additions & 0 deletions stiller-backend/internal/dbutils/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package dbutils

type StillerFileType uint8
const (
Image StillerFileType = iota
Video
Object3D
Unreachable
)

type StillerFile struct {
Id int `json:"id"`
OwnerId int `json:"ownerid"`
Typeof StillerFileType `json:"typeof"`
Path string `json:"path"`
Filename string `json:"filename"`
Title string `json:"title"`
Description string `json:"description"`
Ext string `json:"ext"`
Hashed bool `json:"hashed"`
Size int `json:"size"`
Deleted bool `json:"deleted"`
}

type StillerUser struct {
Id int `json:"id"`
AvatarId int `json:"avatarid"`
TierId int `json:"tierid"`
Displayname string `json:"displayname"`
Username string `json:"username"`
Mail string `json:"mail"`
Bpasswd string `json:"bpasswd"`
}

30 changes: 30 additions & 0 deletions stiller-backend/internal/dbutils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package dbutils

import (
"context"
"log"
"stiller"

"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)

func newPool() *sqlitex.Pool {
pool, err := sqlitex.NewPool(stiller.StillerConfig.DBPath, sqlitex.PoolOptions{})
if err != nil {
log.Panicln(err)
}

return pool
}

var db_pool = newPool()

func NewConn() (*sqlite.Conn, error) {
return db_pool.Take(context.Background())
}

func CloseConn(conn *sqlite.Conn) {
db_pool.Put(conn)
}

Loading

0 comments on commit 72ea5b6

Please sign in to comment.