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 RUN cargo build --release
FROM gcr.io/distroless/cc-debian10 FROM frolvlad/alpine-glibc:latest
EXPOSE 2000 EXPOSE 2000
RUN apk add sqlite-libs
WORKDIR /opt WORKDIR /opt

1
actix/Cargo.lock generated
View File

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

View File

@ -10,7 +10,3 @@ actix-web = "4"
actix-files = "0.6.2" actix-files = "0.6.2"
sqlite = "0.30.4" sqlite = "0.30.4"
regex = "1.7.3" 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) 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::{ use actix_web::{
get, get,
web::{self, Redirect}, web::{self, Redirect},
App, HttpServer, Responder, App, HttpResponse, HttpServer, Responder,
}; };
mod database; mod database;
mod utils; mod utils;
@ -13,6 +13,11 @@ mod utils;
// Return all active links // Return all active links
#[get("/api/all")]
async fn getall() -> HttpResponse {
HttpResponse::Ok().body(utils::getall())
}
// 404 error page // 404 error page
#[get("/err/404")] #[get("/err/404")]
async fn error404() -> impl Responder { async fn error404() -> impl Responder {
@ -36,6 +41,7 @@ async fn main() -> std::io::Result<()> {
App::new() App::new()
.service(link_handler) .service(link_handler)
.service(error404) .service(error404)
.service(getall)
.service(Files::new("/", "./resources/").index_file("index.html")) .service(Files::new("/", "./resources/").index_file("index.html"))
}) })
.bind(("0.0.0.0", 2000))? .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(); let re = Regex::new("[a-z0-9-_]+").unwrap();
re.is_match(link) re.is_match(link)
} }
pub fn getall() -> String {
let links = database::getall();
links.join("\n")
}