new: Got public mode working, testing needed

This commit is contained in:
SinTan1729 2024-05-28 18:16:58 -05:00
parent 168cff94a2
commit 0fce881654
No known key found for this signature in database
GPG Key ID: EB3E68BFBA25C85F
4 changed files with 58 additions and 22 deletions

View File

@ -30,7 +30,7 @@ const VERSION: &str = env!("CARGO_PKG_VERSION");
// Add new links // Add new links
#[post("/api/new")] #[post("/api/new")]
async fn add_link(req: String, data: web::Data<AppState>, session: Session) -> HttpResponse { async fn add_link(req: String, data: web::Data<AppState>, session: Session) -> HttpResponse {
if auth::validate(session) { if env::var("public_mode") == Ok(String::from("Enable")) || auth::validate(session) {
let out = utils::add_link(req, &data.db); let out = utils::add_link(req, &data.db);
if out.0 { if out.0 {
HttpResponse::Created().body(out.1) HttpResponse::Created().body(out.1)
@ -48,19 +48,20 @@ async fn getall(data: web::Data<AppState>, session: Session) -> HttpResponse {
if auth::validate(session) { if auth::validate(session) {
HttpResponse::Ok().body(utils::getall(&data.db)) HttpResponse::Ok().body(utils::getall(&data.db))
} else { } else {
HttpResponse::Unauthorized().body("Not logged in!") let body = if env::var("public_mode") == Ok(String::from("Enable")) {
"Using public mode."
} else {
"Not logged in!"
};
HttpResponse::Unauthorized().body(body)
} }
} }
// Get the site URL // Get the site URL
#[get("/api/siteurl")] #[get("/api/siteurl")]
async fn siteurl(session: Session) -> HttpResponse { async fn siteurl() -> HttpResponse {
if auth::validate(session) { let site_url = env::var("site_url").unwrap_or(String::from("unset"));
let site_url = env::var("site_url").unwrap_or(String::from("unset")); HttpResponse::Ok().body(site_url)
HttpResponse::Ok().body(site_url)
} else {
HttpResponse::Unauthorized().body("Not logged in!")
}
} }
// Get the version number // Get the version number
@ -116,6 +117,16 @@ async fn login(req: String, session: Session) -> HttpResponse {
HttpResponse::Ok().body("Correct password!") HttpResponse::Ok().body("Correct password!")
} }
// Handle logout
#[delete("/api/logout")]
async fn logout(session: Session) -> HttpResponse {
if session.remove("chhoto-url-auth").is_some() {
HttpResponse::Ok().body("Logged out!")
} else {
HttpResponse::Unauthorized().body("You don't seem to be logged in.")
}
}
// Delete a given shortlink // Delete a given shortlink
#[delete("/api/del/{shortlink}")] #[delete("/api/del/{shortlink}")]
async fn delete_link( async fn delete_link(
@ -168,6 +179,7 @@ async fn main() -> Result<()> {
.service(add_link) .service(add_link)
.service(delete_link) .service(delete_link)
.service(login) .service(login)
.service(logout)
.service(Files::new("/", "./resources/").index_file("index.html")) .service(Files::new("/", "./resources/").index_file("index.html"))
.default_service(web::get().to(error404)) .default_service(web::get().to(error404))
}) })

View File

@ -47,7 +47,7 @@
</fieldset> </fieldset>
</form> </form>
<p name="loading-text">Loading links table...</p> <p id="loading-text">Loading links table...</p>
<table class="pure-table"> <table class="pure-table">
<caption>Active links</caption> <caption>Active links</caption>
<br /> <br />
@ -65,7 +65,9 @@
</table> </table>
</div> </div>
<div name="github-link"> <div name="links-div">
<a id="admin-button" href="javascript:getLogin()">login</a>
&nbsp;
<a id="version-number" href="https://github.com/SinTan1729/chhoto-url" target="_blank" rel="noopener noreferrer" <a id="version-number" href="https://github.com/SinTan1729/chhoto-url" target="_blank" rel="noopener noreferrer"
hidden>Source Code</a> hidden>Source Code</a>
<!-- The version number would be inserted here --> <!-- The version number would be inserted here -->

View File

@ -26,14 +26,32 @@ const getVersion = async () => {
return ver; return ver;
} }
const showVersion = async () => {
let version = await getVersion();
link = document.getElementById("version-number");
link.innerText = "v" + version;
link.href = "https://github.com/SinTan1729/chhoto-url/releases/tag/" + version;
link.hidden = false;
}
const getLogin = async () => {
document.getElementById("container").style.filter = "blur(2px)";
document.getElementById("login-dialog").showModal();
document.getElementById("password").focus();
}
const refreshData = async () => { const refreshData = async () => {
let res = await fetch(prepSubdir("/api/all")); let res = await fetch(prepSubdir("/api/all"));
if (!res.ok) { if (!res.ok) {
let errorMsg = await res.text(); let errorMsg = await res.text();
console.log(errorMsg); console.log(errorMsg);
document.getElementById("container").style.filter = "blur(2px)"; if (errorMsg == "Using public mode.") {
document.getElementById("login-dialog").showModal(); loading_text = document.getElementById("loading-text");
document.getElementById("password").focus(); loading_text.style.display = "none";
showVersion();
} else {
getLogin();
}
} else { } else {
let data = await res.json(); let data = await res.json();
displayData(data); displayData(data);
@ -41,16 +59,14 @@ const refreshData = async () => {
} }
const displayData = async (data) => { const displayData = async (data) => {
let version = await getVersion(); showVersion();
link = document.getElementById("version-number")
link.innerText = "v" + version;
link.href = "https://github.com/SinTan1729/chhoto-url/releases/tag/" + version;
link.hidden = false;
let site = await getSiteUrl(); let site = await getSiteUrl();
admin_button = document.getElementById("admin-button");
admin_button.innerText = "logout";
admin_button.href = "javascript:logOut()";
table_box = document.querySelector(".pure-table"); table_box = document.querySelector(".pure-table");
loading_text = document.getElementsByName("loading-text")[0]; loading_text = document.getElementById("loading-text");
if (data.length == 0) { if (data.length == 0) {
table_box.style.visibility = "hidden"; table_box.style.visibility = "hidden";
@ -221,6 +237,12 @@ const submitLogin = () => {
}) })
} }
const logOut = async () => {
let reply = await fetch(prepSubdir("/api/logout"), {method: "DELETE"}).then(res => res.text());
console.log(reply);
location.reload();
}
(async () => { (async () => {
await refreshData(); await refreshData();

View File

@ -65,7 +65,7 @@ form input[name="shortUrl"]::placeholder {
text-transform: none; text-transform: none;
} }
div[name="github-link"] { div[name="links-div"] {
position: absolute; position: absolute;
right: 0.5%; right: 0.5%;
top: 0.5%; top: 0.5%;