feat: display whether or not the instance is up to date on error (#310)
Release Build / Rust project - latest (aarch64-unknown-linux-musl) (push) Has been cancelled
Release Build / Rust project - latest (armv7-unknown-linux-musleabihf) (push) Has been cancelled
Release Build / Rust project - latest (x86_64-unknown-linux-musl) (push) Has been cancelled
Rust Build & Publish / build (push) Has been cancelled
Pull Request / cargo test (push) Has been cancelled
Pull Request / cargo fmt --all -- --check (push) Has been cancelled
Pull Request / cargo clippy -- -D warnings (push) Has been cancelled

This commit is contained in:
Matthew Esposito
2024-11-01 18:16:25 -04:00
committed by GitHub
parent 2fd358f3ed
commit f03bdcf472
4 changed files with 73 additions and 5 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ fn info_html(req: &Request<Body>) -> Result<Response<Body>, Error> {
pub struct InstanceInfo {
package_name: String,
crate_version: String,
git_commit: String,
pub git_commit: String,
deploy_date: String,
compile_mode: String,
deploy_unix_ts: i64,
+28 -3
View File
@@ -2,15 +2,16 @@
#![forbid(unsafe_code)]
#![allow(clippy::cmp_owned)]
// Import Crates
use cached::proc_macro::cached;
use clap::{Arg, ArgAction, Command};
use std::str::FromStr;
use futures_lite::FutureExt;
use hyper::Uri;
use hyper::{header::HeaderValue, Body, Request, Response};
use log::info;
use once_cell::sync::Lazy;
use redlib::client::{canonical_path, proxy};
use redlib::client::{canonical_path, proxy, CLIENT};
use redlib::server::{self, RequestExt};
use redlib::utils::{error, redirect, ThemeAssets};
use redlib::{config, duplicates, headers, instance_info, post, search, settings, subreddit, user};
@@ -217,6 +218,11 @@ async fn main() {
app
.at("/highlighted.js")
.get(|_| resource(include_str!("../static/highlighted.js"), "text/javascript", false).boxed());
app
.at("/check_update.js")
.get(|_| resource(include_str!("../static/check_update.js"), "text/javascript", false).boxed());
app.at("/commits.atom").get(|_| async move { proxy_commit_info().await }.boxed());
// Proxy media through Redlib
app.at("/vid/:id/:size").get(|r| proxy(r, "https://v.redd.it/{id}/DASH_{size}").boxed());
@@ -374,3 +380,22 @@ async fn main() {
eprintln!("Server error: {e}");
}
}
pub async fn proxy_commit_info() -> Result<Response<Body>, String> {
Ok(
Response::builder()
.status(200)
.header("content-type", "application/atom+xml")
.body(Body::from(fetch_commit_info().await))
.unwrap_or_default(),
)
}
#[cached(time = 600)]
async fn fetch_commit_info() -> String {
let uri = Uri::from_str("https://github.com/redlib-org/redlib/commits/main.atom").expect("Invalid URI");
let resp: Body = CLIENT.get(uri).await.expect("Failed to request GitHub").into_body();
hyper::body::to_bytes(resp).await.expect("Failed to read body").iter().copied().map(|x| x as char).collect()
}