Initial stub

This commit is contained in:
femsci 2023-01-05 00:09:51 +01:00
commit ce342afe2e
Signed by: femsci
GPG key ID: 08F7911F0E650C67
9 changed files with 1674 additions and 0 deletions

4
.dockerignore Normal file
View file

@ -0,0 +1,4 @@
*
!src
!Cargo.lock
!Cargo.toml

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target
/out

3
.nyoki Normal file
View file

@ -0,0 +1,3 @@
{
"instanceId": "08f6038d-7e5b-48be-96bb-a7ad30d1bb0e"
}

1534
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

11
Cargo.toml Normal file
View file

@ -0,0 +1,11 @@
[package]
name = "nyans"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rocket = { version = "0.5.0-rc.2", features = ["json"]}
serde = "1.0.143"

29
Dockerfile Normal file
View file

@ -0,0 +1,29 @@
FROM rust:alpine AS build
# Fix missing crti.o by adding muslc devlibs
RUN apk add --no-cache musl-dev
WORKDIR /usr/src
COPY . .
ENV CARGO_HOME=/tmp/cargo
RUN --mount=type=cache,target=/usr/src/target --mount=type=cache,target=/tmp/cargo cargo build --release
RUN --mount=type=cache,target=/usr/src/target cp /usr/src/target/release/nyans /tmp/nyans
FROM alpine:latest AS runtime
RUN apk add --no-cache bind bind-tools
COPY --from=build /tmp/nyans /usr/bin/nyans
EXPOSE 53/tcp
EXPOSE 53/udp
EXPOSE 2137/tcp
ENV ROCKET_ADDRESS=0.0.0.0
ENV ROCKET_PORT=2137
ENTRYPOINT [ "/usr/bin/nyans" ]

40
build.sh Executable file
View file

@ -0,0 +1,40 @@
#!/usr/bin/bash
NAME="nyans"
TRIPLE="x86_64-unknown-linux-musl"
if [ -z "$DEBUG" ]; then
_RELEASE=" --release"
MODE="/release"
else
MODE="/debug"
fi
if [ ! -z $TRIPLE ]; then
_TARGET=" --target $TRIPLE"
fi
#cargo build$_RELEASE$_TARGET
cargo test
if [ $? -ne 0 ]; then
echo "Tests failed..."
exit 1
fi
[ ! -d out ] && mkdir out
cp target$TRIPLE$MODE/$NAME out/$NAME
chmod +x out/$NAME
[ -z "$DEBUG" ] && strip out/$NAME
docker build -t nyanet/nyans .
if [ $? -ne 0 ]; then
echo "Docker build failed..."
exit 1
fi
echo "Build done..."

30
src/main.rs Normal file
View file

@ -0,0 +1,30 @@
mod rndc;
use rocket::{catch, catchers, get, launch, post, routes, serde::json::Json};
#[get("/all")]
fn get_all_zones() -> Json<Vec<rndc::Zone>> {
Json(rndc::zone_list(None))
}
#[get("/get/<name>")]
fn get_zone(name: String) -> Json<rndc::Zone> {
Json(rndc::zone_get(name))
}
#[post("/add")]
fn add_zone() -> &'static str {
todo!()
}
#[catch(404)]
fn not_found() -> &'static str {
"nop"
}
#[launch]
fn rocket() -> _ {
rocket::build()
.register("/", catchers![not_found])
.mount("/zone", routes![get_all_zones, add_zone, get_zone])
}

21
src/rndc.rs Normal file
View file

@ -0,0 +1,21 @@
use serde::Deserialize;
use serde::Serialize;
#[derive(Serialize, Deserialize)]
pub struct Zone {
class: String,
r#type: String,
}
pub fn zone_add() {
todo!()
}
pub fn zone_get(name: String) -> Zone {
todo!()
}
pub fn zone_list(filter: Option<String>) -> Vec<Zone> {
let zones: Vec<Zone> = Vec::new();
todo!()
}