aboutsummaryrefslogtreecommitdiff
path: root/captain/requtils.f90
diff options
context:
space:
mode:
Diffstat (limited to 'captain/requtils.f90')
-rw-r--r--captain/requtils.f9073
1 files changed, 51 insertions, 22 deletions
diff --git a/captain/requtils.f90 b/captain/requtils.f90
index 620170a..03fe869 100644
--- a/captain/requtils.f90
+++ b/captain/requtils.f90
@@ -41,8 +41,9 @@ implicit none
contains
pure function success_code(req)
- use http, only: HTTP_SUCCESS => HTTP_CODE_SUCCESS
- use server_response, only: request, GEMINI_SUCCESS => GEMINI_CODE_SUCCESS
+ use http_codes, only: HTTP_SUCCESS => HTTP_CODE_SUCCESS
+ use gemini_codes, only: GEMINI_SUCCESS => GEMINI_CODE_SUCCESS
+ use server_response, only: request
implicit none
class(request), intent(in)::req
@@ -57,8 +58,9 @@ contains
end function success_code
pure function notfound_code(req)
- use http, only: HTTP_FAIL => HTTP_CODE_NOTFOUND
- use server_response, only: request, GEMINI_FAIL => GEMINI_CODE_PERMFAIL
+ use http_codes, only: HTTP_FAIL => HTTP_CODE_NOTFOUND
+ use gemini_codes, only: GEMINI_FAIL => GEMINI_CODE_PERMFAIL
+ use server_response, only: request
implicit none
class(request), intent(in)::req
@@ -73,8 +75,9 @@ contains
end function notfound_code
pure function notpermitted_code(req)
- use http, only: HTTP_UNAUTHORIZED => HTTP_CODE_UNAUTHORIZED
- use server_response, only: request, GEMINI_UNAUTHORIZED => GEMINI_CODE_BAD_REQUEST
+ use http_codes, only: HTTP_UNAUTHORIZED => HTTP_CODE_UNAUTHORIZED
+ use gemini_codes, only: GEMINI_UNAUTHORIZED => GEMINI_CODE_BAD_REQUEST
+ use server_response, only: request
implicit none
class(request), intent(in)::req
@@ -285,19 +288,31 @@ contains
end function request_static
- function build_link(link, label, gemini_mode) result(res)
+ function build_link(link, label, gemini_mode, session_token) result(res)
+ use server_response, only: gemini_session_link_url
implicit none
character(*), intent(in)::link, label
logical, intent(in)::gemini_mode
+
+ ! Passed in to prepend a session identifier in gemini
+ character(len=:), pointer, intent(in), optional::session_token
character(len=:), pointer::res
+ character(len=:), pointer::gemlink
integer::nl
if(gemini_mode) then
- nl = len_trim(link) + len_trim(label) + len('=> ')
+ if(present(session_token)) then
+ gemlink => gemini_session_link_url(link, session_token)
+ else
+ gemlink => gemini_session_link_url(link, null())
+ end if
+
+ nl = len_trim(gemlink) + len_trim(label) + len('=> ')
+
allocate(character(len=nl)::res)
- res = '=> '//trim(link)//' '//trim(label)
+ res = '=> '//trim(gemlink)//' '//trim(label)
else
@@ -530,7 +545,7 @@ contains
end function generate_simple_pager
- function render_jobs_links(jobs, startindex, stopindex, gemini_mode, link_prefix) result(res)
+ function render_jobs_links(jobs, startindex, stopindex, gemini_mode, link_prefix, session_token) result(res)
use captain_db
implicit none
@@ -538,11 +553,16 @@ contains
integer, intent(in), optional::startindex, stopindex
logical, intent(in)::gemini_mode
character(*), intent(in), optional::link_prefix
+ character(len=:), intent(in), pointer, optional::session_token
character(len=:), pointer::res
integer::nsize, i, first, last
character(len=16)::int_text
character(len=(2*PLAYER_NAME_LENGTH + 64))::link
+
+ character(len=:), pointer::link_pointer
+ character(len=:), pointer::internal_session_token
+
character(PLAYER_NAME_LENGTH)::player, instruction
character(1)::nl = new_line(' ')
character(64)::int_link_prefix
@@ -553,6 +573,12 @@ contains
int_link_prefix = " "
end if
+ if(present(session_token)) then
+ internal_session_token => session_token
+ else
+ internal_session_token => null()
+ end if
+
if(.not. associated(jobs)) then
allocate(character(len=32)::res)
res = "None Yet"
@@ -585,13 +611,17 @@ contains
write(int_text, '(I8)') jobs(i)%id
if(gemini_mode) then
- link = "=> "//trim(int_link_prefix)//"jobs/"// &
- trim(adjustl(int_text))//".gmi "// &
- trim(get_status_utf8(jobs(i)%status))//" Job "// &
- trim(adjustl(int_text))//" - "//trim(instruction)
+
+ link_pointer => build_link(trim(int_link_prefix)//"jobs/"//trim(adjustl(int_text))//".gmi", &
+ trim(get_status_utf8(jobs(i)%status))//" Job "// &
+ trim(adjustl(int_text))//" - "//trim(instruction), &
+ .true., internal_session_token)
- res = trim(res)//nl//nl//trim(link)
+ res = trim(res)//nl//nl//link_pointer
+ deallocate(link_pointer)
+
else
+
res = trim(res)//nl//' <li><div class="job_result_listitem'
select case(jobs(i)%status)
@@ -607,14 +637,13 @@ contains
res = trim(res)//'">'
end select
-
- link = ' <p><strong><a href="'//trim(int_link_prefix)//'jobs/'// &
- trim(adjustl(int_text))//'.html" >'// &
- trim(get_status_utf8(jobs(i)%status))//" Job "// &
- trim(adjustl(int_text))//" - "//trim(instruction)// &
- '</a></strong></p>'
+ link_pointer => build_link(trim(int_link_prefix)//'jobs/'//trim(adjustl(int_text))//'.html', &
+ trim(get_status_utf8(jobs(i)%status))//" Job "// &
+ trim(adjustl(int_text))//" - "//trim(instruction), &
+ .false., internal_session_token)
- res = trim(res)//nl//trim(link)//nl//" <p><em>"
+ res = trim(res)//nl//"<p><strong>"//link_pointer//'</strong></p>'//nl//"<p><em>"
+ deallocate(link_pointer)
endif
select case(jobs(i)%status)