parent
0297aafbff
commit
d451a4f05c
10
src/main.rs
10
src/main.rs
@ -118,8 +118,8 @@ async fn main() -> std::io::Result<()> {
|
|||||||
// logout
|
// logout
|
||||||
.route("/logout/", web::to(views::logout))
|
.route("/logout/", web::to(views::logout))
|
||||||
// submit a new url for shortening
|
// submit a new url for shortening
|
||||||
.route("/submit/", web::get().to(views::submission))
|
.route("/submit/", web::get().to(views::create_link))
|
||||||
.route("/submit/", web::post().to(views::process_submission))
|
.route("/submit/", web::post().to(views::process_link_creation))
|
||||||
// view an existing url
|
// view an existing url
|
||||||
.service(
|
.service(
|
||||||
web::scope("/view")
|
web::scope("/view")
|
||||||
@ -136,7 +136,11 @@ async fn main() -> std::io::Result<()> {
|
|||||||
web::scope("/edit")
|
web::scope("/edit")
|
||||||
.service(
|
.service(
|
||||||
web::scope("/link")
|
web::scope("/link")
|
||||||
.route("/{redirect_id}", web::get().to(views::view_link)),
|
.route("/{redirect_id}", web::get().to(views::edit_link))
|
||||||
|
.route(
|
||||||
|
"/{redirect_id}",
|
||||||
|
web::post().to(views::process_link_edit),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.service(
|
.service(
|
||||||
web::scope("/profile")
|
web::scope("/profile")
|
||||||
|
51
src/views.rs
51
src/views.rs
@ -356,7 +356,7 @@ pub(crate) async fn redirect_fhs() -> Result<HttpResponse, ServerError> {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn submission(
|
pub(crate) async fn create_link(
|
||||||
tera: web::Data<Tera>,
|
tera: web::Data<Tera>,
|
||||||
id: Identity,
|
id: Identity,
|
||||||
) -> Result<HttpResponse, ServerError> {
|
) -> Result<HttpResponse, ServerError> {
|
||||||
@ -371,7 +371,7 @@ pub(crate) async fn submission(
|
|||||||
Ok(redirect_builder("/admin/login/"))
|
Ok(redirect_builder("/admin/login/"))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn process_submission(
|
pub(crate) async fn process_link_creation(
|
||||||
data: web::Form<LinkForm>,
|
data: web::Form<LinkForm>,
|
||||||
id: Identity,
|
id: Identity,
|
||||||
) -> Result<HttpResponse, ServerError> {
|
) -> Result<HttpResponse, ServerError> {
|
||||||
@ -399,3 +399,50 @@ pub(crate) async fn process_submission(
|
|||||||
Ok(redirect_builder("/admin/login/"))
|
Ok(redirect_builder("/admin/login/"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) async fn edit_link(
|
||||||
|
tera: web::Data<Tera>,
|
||||||
|
id: Identity,
|
||||||
|
link_id: web::Path<String>,
|
||||||
|
) -> Result<HttpResponse, ServerError> {
|
||||||
|
if let Some(id) = id.identity() {
|
||||||
|
use super::schema::links::dsl::{code, links};
|
||||||
|
let connection = establish_connection()?;
|
||||||
|
let link: Link = links
|
||||||
|
.filter(code.eq(&link_id.0))
|
||||||
|
.first::<Link>(&connection)?;
|
||||||
|
let mut data = Context::new();
|
||||||
|
data.insert("title", "Submit a Post");
|
||||||
|
data.insert("link", &link);
|
||||||
|
|
||||||
|
data.insert("name", &id);
|
||||||
|
let rendered = tera.render("edit_link.html", &data)?;
|
||||||
|
return Ok(HttpResponse::Ok().body(rendered));
|
||||||
|
}
|
||||||
|
Ok(redirect_builder("/admin/login/"))
|
||||||
|
}
|
||||||
|
pub(crate) async fn process_link_edit(
|
||||||
|
data: web::Form<LinkForm>,
|
||||||
|
id: Identity,
|
||||||
|
link_id: web::Path<String>,
|
||||||
|
) -> Result<HttpResponse, ServerError> {
|
||||||
|
if let Some(_id) = id.identity() {
|
||||||
|
use super::schema::links::dsl::{code, links, target, title};
|
||||||
|
|
||||||
|
let connection = establish_connection()?;
|
||||||
|
|
||||||
|
diesel::update(links.filter(code.eq(&link_id.0)))
|
||||||
|
.set((
|
||||||
|
code.eq(&data.code),
|
||||||
|
target.eq(&data.target),
|
||||||
|
title.eq(&data.title),
|
||||||
|
))
|
||||||
|
.execute(&connection)?;
|
||||||
|
|
||||||
|
return Ok(redirect_builder(&format!(
|
||||||
|
"/admin/view/link/{}",
|
||||||
|
&data.code
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
Ok(redirect_builder("/admin/login/"))
|
||||||
|
}
|
||||||
|
@ -62,6 +62,7 @@ nav li:last-child {
|
|||||||
}
|
}
|
||||||
svg {
|
svg {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.actions {
|
div.actions {
|
||||||
|
20
templates/edit_link.html
Normal file
20
templates/edit_link.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{% extends "admin.html" %}
|
||||||
|
|
||||||
|
{% block admin %}
|
||||||
|
<h1>Link Editieren: {{ link.title }}</h1>
|
||||||
|
<form action="" method="POST">
|
||||||
|
<div>
|
||||||
|
<label for="title">Beschreibung:</label>
|
||||||
|
<input type="text" name="title" value="{{ link.title }}">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="target">Ziel:</label>
|
||||||
|
<input type="text" name="target" value="{{link.target}}">
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="code">Code:</label>
|
||||||
|
<input type="text" name="code" value="{{link.code}}">
|
||||||
|
</div>
|
||||||
|
<input type="submit" value="Speichern">
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
@ -29,4 +29,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
<div class="actions">
|
||||||
|
<a class="button" href="/admin/edit/link/{{ link.code }}">Editieren</a>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user