Display list of links

This commit is contained in:
SinTan1729 2023-04-03 11:55:27 -05:00
parent b9d76b6734
commit a1f73c8a9d
6 changed files with 36 additions and 7 deletions

View File

@ -14,9 +14,10 @@ COPY ./actix/resources ./resources
RUN cargo build --release
FROM gcr.io/distroless/cc-debian10
FROM frolvlad/alpine-glibc:latest
EXPOSE 2000
RUN apk add sqlite-libs
WORKDIR /opt

1
actix/Cargo.lock generated
View File

@ -919,7 +919,6 @@ dependencies = [
"actix-web",
"regex",
"sqlite",
"sqlite3-src",
]
[[package]]

View File

@ -10,7 +10,3 @@ actix-web = "4"
actix-files = "0.6.2"
sqlite = "0.30.4"
regex = "1.7.3"
[dependencies.sqlite3-src]
version="0.4.0"
features=["bundled"]

View File

@ -21,3 +21,25 @@ pub fn find_url(shortlink: &str) -> String {
String::from(longlink)
}
pub fn getall() -> Vec<String> {
let db = open("./urls.sqlite").expect("Unable to open database!");
let query = "SELECT * FROM urls";
let statement: Vec<Row> = db
.prepare(query)
.unwrap()
.into_iter()
.map(|row| row.unwrap())
.collect();
let mut links: Vec<String> = Vec::new();
for row in statement {
let short_url = row.read::<&str, _>("short_url");
let long_url = row.read::<&str, _>("long_url");
let hits = row.read::<i64, _>("hits");
links.push(format!("{short_url},{long_url},{hits}"));
}
links
}

View File

@ -2,7 +2,7 @@ use actix_files::{Files, NamedFile};
use actix_web::{
get,
web::{self, Redirect},
App, HttpServer, Responder,
App, HttpResponse, HttpServer, Responder,
};
mod database;
mod utils;
@ -13,6 +13,11 @@ mod utils;
// Return all active links
#[get("/api/all")]
async fn getall() -> HttpResponse {
HttpResponse::Ok().body(utils::getall())
}
// 404 error page
#[get("/err/404")]
async fn error404() -> impl Responder {
@ -36,6 +41,7 @@ async fn main() -> std::io::Result<()> {
App::new()
.service(link_handler)
.service(error404)
.service(getall)
.service(Files::new("/", "./resources/").index_file("index.html"))
})
.bind(("0.0.0.0", 2000))?

View File

@ -14,3 +14,8 @@ fn validate_link(link: &str) -> bool {
let re = Regex::new("[a-z0-9-_]+").unwrap();
re.is_match(link)
}
pub fn getall() -> String {
let links = database::getall();
links.join("\n")
}