diff --git a/common/html/index.html b/common/html/index.html index 609620c..2d19955 100644 --- a/common/html/index.html +++ b/common/html/index.html @@ -1,4 +1,4 @@ - + @@ -6,12 +6,34 @@ MMO Testing Game diff --git a/common/sql/test.db3 b/common/sql/test.db3 deleted file mode 100644 index d3e3473..0000000 Binary files a/common/sql/test.db3 and /dev/null differ diff --git a/fortran/www/app/main.f90 b/fortran/www/app/main.f90 index f456984..884d6bf 100644 --- a/fortran/www/app/main.f90 +++ b/fortran/www/app/main.f90 @@ -1,110 +1,111 @@ program main use www - use sqliteff - use SM3_module, only: SM3 - use iso_varying_string - use, intrinsic :: iso_c_binding, only: c_signed_char, c_size_t implicit none character, dimension(:), allocatable :: form_data character(len=32) :: index_path - character(len=128) :: db_path + character(len=128):: db_path 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 + call getarg(1, index_path) - index_path = trim(index_path) - call getarg(2, db_path) - db_path = trim(db_path) call request(form_data, length) if (length .gt. 0) then - call createDB(db_path) - inquire(file="debug.log", exist=exist) - if (exist) then - open(12, file="debug.log", status="old", position="rewind", action="write") - else - open(12, file="debug.log", status="new", action="write") + inquire (file=db_path, exist=exist) + if (.not. exist) then + write (12, *) trim(adjustl(db_path)) + call create_db(db_path) end if - do i=1,length - write(12, '(A)', advance="NO") form_data(i) - end do - write(12, '(A)') - close(unit=12) - call write_index(index_path) - else - call write_index(index_path) + + call add_user(db_path, form_data, length) end if + call write_index(index_path) + if (allocated(form_data)) deallocate (form_data, stat=err) if (err /= 0) print *, "index_html: Deallocation request denied" + close (unit=12) contains - subroutine createDB(db_path) + subroutine create_db(db_path) character(len=128), intent(in) :: db_path - type(SqliteDatabase_t) :: connection - type(SqliteStatement_t) :: statement - type(VARYING_STRING) :: remaining - integer :: status + character(len=:), allocatable :: command - status = sqliteff_open(db_path, connection) + 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) - status = sqliteff_prepare( & - connection, & - var_str("CREATE TABLE users (identifier INTEGER PRIMARY KEY ASC, " & - // "username TEXT, password TEXT, apperance TEXT, x_pos INTEGER, " & - // "y_pos INTEGER, last_login INTEGER, created INTEGER);"), & - statement, & - remaining) + end subroutine create_db - if (status .eq. SQLITE_OK) then - status = sqliteff_step(statement) - status = sqliteff_finalize(statement) - status = sqliteff_close(connection) - end if + subroutine add_user(db_path, request, length) + character(len=128), intent(in) :: db_path + character, dimension(:), allocatable, intent(in) :: request + integer, intent(in) :: length - end subroutine createDB + 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 - subroutine addUser(db_path, username, password, appearance) - character(len=128), intent(in) :: db_path - character(len=24), intent(in) :: username - character(len=24), intent(in) :: password - character(len=8), intent(in) :: appearance - character(len=32) :: encrypted_password + get_username: do i = 1, length + if (request(i) .eq. '=') then + s_idx = i + 1 + end if - type(SqliteDatabase_t) :: connection - type(VARYING_STRING) :: errmsg - integer :: status - integer(8) :: created - character(len=32) :: created_str + 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) - integer(c_signed_char) :: dgst(32) - integer(c_signed_char) :: msg(25) + get_password: do i = e_idx + 2, length + if (request(i) .eq. '=') then + s_idx = i + 1 + end if - msg = transfer(password, msg) - call SM3(msg, 25_c_size_t, dgst) + 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) - write (encrypted_password, *) dgst - encrypted_password = adjustl(encrypted_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) - created = time() - write (created_str, *) created - created_str = adjustl(created_str) + write (created, *) time() - status = sqliteff_open(db_path, connection) + 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) - status = sqliteff_exec( & - connection, & - 'INSERT INTO users (username, password, apperance, x_pos, y_pos, last_login, created) & - VALUES ("'//username//'", "'//encrypted_password//'", "#'//appearance//'", & - 0, 0, 0, '//created_str//'");', & - errmsg) - - status = sqliteff_close(connection) - - end subroutine addUser + end subroutine add_user end program main diff --git a/fortran/www/fpm.toml b/fortran/www/fpm.toml index f1ad55f..619d2ce 100644 --- a/fortran/www/fpm.toml +++ b/fortran/www/fpm.toml @@ -16,6 +16,3 @@ implicit-external = false implicit-typing = false source-form = "free" [dependencies] -iso_varying_string.git = "https://gitlab.com/everythingfunctional/iso_varying_string" -sqliteff.git = "https://gitlab.com/everythingfunctional/sqliteff" -sm3-fortran.git = "https://github.com/zoziha/SM3-Fortran" diff --git a/fortran/www/test.sh b/fortran/www/test.sh index 298f003..2cfcf9f 100755 --- a/fortran/www/test.sh +++ b/fortran/www/test.sh @@ -1,2 +1,2 @@ #!/bin/sh -listen1 'tcp!*!1234' ./build/gfortran_D153B38149EACCAC/app/fortran-micro-httpd ../../common/html/index.html ../../common/sql/test.db3 +listen1 'tcp!*!1234' ~/.local/bin/fortran-micro-httpd ../../common/html/index.html ../../common/sql/test.db3