CommonLispTings/webserver.lisp

240 lines
6.1 KiB
Common Lisp
Raw Normal View History

2023-02-23 21:23:38 +01:00
(defparameter *server* (make-instance 'tbnl:easy-acceptor
:port 33333
:address "0.0.0.0"))
(defun start ()
(tbnl:start *server*))
(defun stop()
(tbnl:stop *server*))
(defparameter *css*
"
body {
background: #f0f2f5;
font-family: monospace;
}
.nav-wrapper {
background-color: blue;
padding: 15px;
}
.form-wrapper {
position: relative;
top: 55px;
padding: 15px 10px;
background-color: #fff;
width: 400px;
border-radius: 5px;
box-shadow: 8px 8px 8px lightgrey;
}
.username {
position: relative;
display: flex;
margin-left: auto;
margin-right: auto;
border: 1px solid lightgrey;
border-radius: 5px;
padding: 15px;
font-size: 1.2rem;
width: 95%;
}
.password {
position: relative;
display: flex;
margin-left: auto;
margin-right: auto;
border: 1px solid lightgrey;
border-radius: 5px;
padding: 15px;
font-size: 1.25rem;
width: 95%;
}
.nav-wrapper a {
margin-left: 15px;
margin-right: 15px;
text-decoration: none;
font-size: 1rem;
color: #fff;
}
.nav-wrapper a:hover {
cursor: pointer;
text-decoration: underline;
}
.title-wrapper {
display: flex;
justify-content: center;
}
.content {
font-size: 1.1rem;
}
.contact-content-subtitle {
font-size: 1.1rem;
}
.contact-content-irc {
font-size: 1.1rem;
}
.contact-content-xmpp {
font-size: 1.1rem;
}
.login-button {
position: relative;
display: flex;
margin-left: auto;
margin-right: auto;
width: 90%;
padding: 12px;
background-color: blue;
color: #fff;
border: 1px solid lightgrey;
border-radius: 5px;
font-size: 1.0rem;
font-weight: bold;
}
.login-button:hover {
cursor: pointer;
box-shadow: 8px 8px 8px lightgrey;
}
.signup-button {
position: relative;
display: flex;
margin-left: auto;
margin-right: auto;
background-color: #4af626;
width: 90%;
}
.signup-link {
position: relative;
display: flex;
justify-content: center;
padding: 12px;
width: 100%;
font-size: 1rem;
font-weight: bold;
color: black;
text-decoration: none;
}
.signup-button:hover {
cursor: pointer;
box-shadow: 8px 8px 8px lightgrey;
2023-02-23 22:29:43 +01:00
}")
2023-02-23 21:23:38 +01:00
(tbnl:define-easy-handler (main :uri "/")
()
(spinneret:with-html-string
(:html
(:head
(:style
*css*))
(:body
(:div :class "whole-wrapper"
(:div :class "nav-wrapper"
(:a :class "home-link" :href "/"
"Home")
(:a :class "about-link" :href "/about"
2023-02-23 22:29:43 +01:00
"About")
(:a :class "contact-link" :href "/contact"
"Contact"))
2023-02-23 21:23:38 +01:00
(:div :class "title-wrapper"
(:h1 :class "title"
"Welcome to my CL server!"))
(:div :class "form-wrapper"
(:form :class "login" :action "/members" :method "POST"
(:input :type "text" :class "username" :name "username" :placeholder "Username")
(:br)(:br)
(:input :type "password" :class "password" :name "password" :placeholder "Password")
(:br) (:br)
(:input :type "submit" :class "login-button" :value "login")
(:br) (:br)
(:button :class "signup-button"
(:a :class "signup-link" :href "/signup"
"Sign up")))))))))
2023-02-23 21:23:38 +01:00
(tbnl:define-easy-handler (about :uri "/about")
()
(spinneret:with-html-string
(:html
(:head
(:style
*css*))
(:body
(:div :class "whole-wrapper"
(:div :class "nav-wrapper"
(:a :class "home-link" :href "/"
"Home")
(:a :class "about-link" :href "/about"
2023-02-23 22:29:43 +01:00
"About")
(:a :class "contact-link" :href "/contact"
"Contact"))
2023-02-23 21:23:38 +01:00
(:div :class "content-wrapper"
(:div :clsas "about-title-wrapper"
(:h1 "About this site"))
(:div :class "content-wrapper"
(:p :class "content"
"I am an intermediate programmer who is new-ish to common lisp
2023-02-23 21:23:38 +01:00
and am loving it so far! So much so that I have decided to practice
making a webserver; though i usually do this with node js, handling
request with response, i decided to do the same with common lisp!
I will be using hunchentoot, spinneret and lass(maybe?) to create
this site; I hope you enjoy :)"))))))))
2023-02-23 22:29:43 +01:00
(tbnl:define-easy-handler (contact :uri "/contact")
()
(spinneret:with-html-string
(:head
(:style
*css*))
(:body
(:div :class "whole-wrapper"
(:div :class "nav-wrapper"
(:a :class "home-link" :href "/"
"Home")
(:a :class "about-link" :href "/about"
"About")
(:a :class "contact-link" :href "/contact"
"Contact"))
(:div :class "content-wrapper"
(:h1 :class "contact-content-title"
"Contact")
(:h3 :class "contact-content-subtitle"
"IRC")
(:p :class "contact-content-irc"
"sweatshirt, samsepi0l")
(:h3 :class "contact-content-subtitle"
"XMPP")
(:p :class "contact-content-xmpp"
"sweatshirt@xmpp.jp"))))))
(tbnl:define-easy-handler (signup :uri "/signup")
()
(spinneret:with-html-string
(:head
(:style
*css*))
(:body
(:div :class "whole-wrapper"
(:div :class "nav-wrapper"
(:a :class "home-link" :href "/"
"Home")
(:a :class "about-link" :href "/about"
"About")
(:a :class "contact-link" :href "/contact"
"Contact"))
(:div :class "signup-content-wrapper"
(:h1 :class "signup-content-title"
"Sign Up"))))))