mmo-project/fortran/www/app/main.f90

112 lines
3.2 KiB
Fortran
Raw Normal View History

2023-08-26 13:58:47 -04:00
program main
use www
implicit none
character, dimension(:), allocatable :: form_data
character(len=32) :: index_path
character(len=128):: db_path
2023-08-26 13:58:47 -04:00
integer :: err, i, length
logical :: exist
inquire (file="debug.log", exist=exist)
if (exist) then
open (12, file="debug.log", status="old", position="append", action="write")
else
open (12, file="debug.log", status="new", action="write")
end if
2023-08-26 13:58:47 -04:00
call getarg(1, index_path)
call getarg(2, db_path)
call request(form_data, length)
if (length .gt. 0) then
inquire (file=db_path, exist=exist)
if (.not. exist) then
write (12, *) trim(adjustl(db_path))
call create_db(db_path)
2023-08-26 13:58:47 -04:00
end if
call add_user(db_path, form_data, length)
2023-08-26 13:58:47 -04:00
end if
call write_index(index_path)
2023-08-26 13:58:47 -04:00
if (allocated(form_data)) deallocate (form_data, stat=err)
if (err /= 0) print *, "index_html: Deallocation request denied"
close (unit=12)
2023-08-26 13:58:47 -04:00
contains
subroutine create_db(db_path)
2023-08-26 13:58:47 -04:00
character(len=128), intent(in) :: db_path
character(len=:), allocatable :: command
2023-08-26 13:58:47 -04:00
command = 'CREATE TABLE users ' &
//'(id INTEGER PRIMARY KEY ASC, ' &
//'username TEXT, password TEXT, ' &
//'apperance TEXT, x_pos INTEGER, ' &
//'y_pos INTEGER, last_login INTEGER, ' &
//' created INTEGER);'
write (12, *) command
call execute_command_line(command)
2023-08-26 13:58:47 -04:00
end subroutine create_db
2023-08-26 13:58:47 -04:00
subroutine add_user(db_path, request, length)
character(len=128), intent(in) :: db_path
character, dimension(:), allocatable, intent(in) :: request
integer, intent(in) :: length
character(len=:), allocatable :: command
character(len=24) :: username
character(len=24) :: password
character(len=32) :: encrypted_password
character(len=32) :: created
character(len=8) :: appearance
integer :: i, s_idx, e_idx
get_username: do i = 1, length
if (request(i) .eq. '=') then
s_idx = i + 1
end if
if (request(i) .eq. '&') then
e_idx = i - 1
exit get_username
end if
end do get_username
username = transfer(request(s_idx:e_idx), username)
get_password: do i = e_idx + 2, length
if (request(i) .eq. '=') then
s_idx = i + 1
end if
if (request(i) .eq. '&') then
e_idx = i - 1
exit get_password
end if
end do get_password
password = transfer(request(s_idx:e_idx), password)
get_appearance: do i = e_idx + 2, length
if (request(i) .eq. '=') then
s_idx = i + 1
end if
end do get_appearance
appearance = transfer(request(s_idx:length), appearance)
write (created, *) time()
command = 'sqlite3 '//trim(adjustl(db_path))//' "INSERT INTO users (username, password' &
//', apperance, x_pos, y_pos, last_login, created) VALUES ('''//username &
//''', '''//trim(adjustl(password))//''', '''//trim(adjustl(appearance)) &
//''',0, 0, 0,'//trim(adjustl(created))//');"'
write (12, *) command
call execute_command_line(command)
end subroutine add_user
2023-08-26 13:58:47 -04:00
end program main