diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json new file mode 100644 index 0000000..7254d71 --- /dev/null +++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/meta.json @@ -0,0 +1 @@ +{"creation_dt": "2025-02-18T14:08:30Z", "creation_host": "d9ae498e3528"} \ No newline at end of file diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json new file mode 100644 index 0000000..fa0f91d --- /dev/null +++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/private_key.json @@ -0,0 +1 @@ +{"n": "uQiCR4LsrI4pn5LDm-WaCTHk49WaklEl_VDuYyLwlexMHPhOYwRuOy-aOXiC1LWtbs9QEl8dxricHe_uKH0YXYqfa971sI9NSmmshCJbdlJ7C_5M2maCYlaA_Wt7g-98lvrGVVOCBPfThpT8_-wKdxG6kQamrbrhPCdOn7zHrDoHWWHltLG62flSb2Y-j8xQIvd8LDFa3hsZR9xh98VWoaCb5XpVowbWnUKLpNWYicPAmSUYo3Do5-nJN5Iis6P0knWDh_H2Hh88NEiRqj3zt2TwQ0PSE5zo98n3fIg8hRdvF3lZR82023T6wm-XARDJreol9WDp0cmlkbTOm7m1JQ", "e": "AQAB", "d": "RNgloPXVmV5LnlO89AQ5i7JEt4CCQm5u9BFooPofCakhqKW6hJzhZqQPfdKY2wu9u7zmze8V5RpK-9iJhAcHScaKCliqkUbAOy-WQJOH9D48CfpUHe6GFJCa7a9QBYbVlFc59AVeGvsaeLh2acIpIqQ2Bj-zRHCD3R3C4ywaHrnVYq9iCQeOEIJ9VMpydNntvpVMpeT341_EGimp4ZTEMME9XZ35ipFC9arVEGUD_pWjJWZMWUB2Zm52fBEvFk1_7cWLIOErzFQUltWI8I7RaZgKe7MshTA0nl3XIBok3m0lpRfu4Jo8JkIMA2LDFYZf0G0PmeTcLcNkfMQ5ubXJ", "p": "9V9VnnY4JDHAGpvSDLM69-soXUdkIB8XKHMlyACMrixd2F9JT4EqQMjrPQGpLzolJ53CcBVheVZat5EgUansrigSYPlvflmUm9M5t55JUzvQMSxS1Mmo2Jp1SeBD3rD0BblZpVwFUhGB34uXFax0VLhRbDTc_qxDlJ8cRFZR4w0", "q": "wQwjvuy8iaNYpx7AdxOI6xw6gmNF3JcfvyxA-UJ9eAWqbTHqOsm6LPAUrMF4y7V7TceMd4KA00aW1A8u2AO0Wp9pQbu8HpjeRThNAaAzGCnYEC8nqg0t6emRQswgs-lzU6zDcM7LcZDbD7wQ4NLVAn6IQ2v5m6o7SrsSQbnR9Hk", "dp": "xVzbV0wruCE0LbLr7z8yzTsfCnhj9tpLHEQSPZ8DiQ0yptlt9D8mp1l0rWtqlAwm2oiwXsszzg9BhKl833LYZvTgY5P-tBiFyhjKMgFlZUeVHBhUv8c8wozqjnOO485dWUVO8AzmUq62UgLLkalXINXo2CplH4ucCC065VSxJPk", "dq": "BGCQFu4rQDux8OgjmQ-aVSposTgrB1tt3tnUB1LYoXYPbTZqhza3v_kZnuksIgJVb2gM6VDONvwsw1Ysy70Zw8xFiLYHB_KTZ6JlLJpDTlL0kTlgftyZo-ol3wvd2fZ7JPSP4ejud_6-2NZ803w0VEAmOtEh8cOkYIdpXJAoEJE", "qi": "1U3jgUeGrL7QS-R3SjEZty64_YCBmJXaDHDBny1uUcAl7giGmVqFdtfMoYgHGUcq7fYyRFv3BfUL3Uch8MH3XklLBrU_nXjYGqTxi0dLrA3WlSkbvgBWHcF3oegEdDR31mPt7-VIyNtzg3CagOnAL0Hvk3h9HWg8YO326L8i3FU", "kty": "RSA"} \ No newline at end of file diff --git a/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json new file mode 100644 index 0000000..ddb9775 --- /dev/null +++ b/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/68f57fbb84e7058b7509edef0d5b09bf/regr.json @@ -0,0 +1 @@ +{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/2236033565"} \ No newline at end of file diff --git a/compose.yaml b/compose.yaml index 5c071b8..cd6af6b 100644 --- a/compose.yaml +++ b/compose.yaml @@ -24,9 +24,6 @@ services: website_net: ipv4_address: "88.88.5.2" - expose: - - "8006" - # volumes: # - /home/victor/git/website/minishell/linux-minishell/alpine-custom.iso:/boot.iso @@ -41,19 +38,36 @@ services: # networks: # - website_net - nginx: - container_name: "nginx" + nginx-site: + container_name: "nginx-site" restart: always build: context: ./nginx dockerfile: Dockerfile + volumes: + - ./nginx/nginx.conf:/etc/nginx/nginx.conf + - ./certbot/conf:/etc/letsencrypt:ro + - ./certbot/www:/var/www/certbot:ro + networks: website_net: ipv4_address: "88.88.5.1" ports: - - "19001:80" + - 80:80 + - 443:443 + + certbot: + image: certbot/certbot + container_name: "certbot-site" + + volumes: + - ./certbot/conf:/etc/letsencrypt:rw + - ./certbot/www/:/var/www/certbot/:rw + + + command: certonly --webroot --webroot-path /var/www/certbot --force-renewal --email victorvobis@protonmail.com -d remoteserver.vps.webdock.cloud --agree-tos website: container_name: "site" @@ -66,9 +80,6 @@ services: website_net: ipv4_address: "88.88.5.3" - expose: - - "3000" - networks: website_net: # external: false diff --git a/index.html b/index.html deleted file mode 100644 index 3268b35..0000000 --- a/index.html +++ /dev/null @@ -1,4 +0,0 @@ - - - -> diff --git a/misc/deploy.sh b/misc/deploy.sh new file mode 100755 index 0000000..28976e0 --- /dev/null +++ b/misc/deploy.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +cd .. + + +# reset server_website directory +rm -rf server_website +ssh server rm -rf website +mkdir -p server_website/{minishell,vvsite/{target,debug}} + +# Build server binary +cd vvsite && cargo leptos build +cp -r target/site ../server_website/vvsite/target +cp -r target/debug Dockerfile Cargo.toml ../server_website/vvsite/target/ + + +# Build minishell files +cd ../minishell +make -C minishell_src +cp -r ./minishell_src/bin ./Dockerfile ./entrypoint.sh ../server_website/minishell + +# Copy to server +cd .. +cp -r ./nginx ./compose.yaml server_website + +scp -r server_website server:/home/victor/website + diff --git a/run.sh b/misc/run.sh similarity index 100% rename from run.sh rename to misc/run.sh diff --git a/sources.txt b/misc/sources.txt similarity index 100% rename from sources.txt rename to misc/sources.txt diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 9ae6e72..75ae806 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -15,51 +15,67 @@ events { http { - include mime.types; - default_type application/octet-stream; + limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; + server { + listen 80; + listen [::]:80; - #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - # '$status $body_bytes_sent "$http_referer" ' - # '"$http_user_agent" "$http_x_forwarded_for"'; + charset utf-8; - #access_log logs/access.log main; + server_name victorvobis www.victorvobis.mooo.com; + server_tokens off; - sendfile on; - #tcp_nopush on; + location /.well-known/acme-challenge/ { + limit_req zone=one burst=10 nodelay; + root /var/www/certbot; + } + return 301 https://$host$request_uri; - #keepalive_timeout 0; - keepalive_timeout 65; + } - #gzip on; + server { + listen 80; + listen [::]:80; - server { - listen 80; - server_name localhost; + charset utf-8; - #charset koi8-r; + server_name remoteserver www.remoteserver.vps.webdock.cloud; + server_tokens off; - #access_log logs/host.access.log main; + location /.well-known/acme-challenge/ { + limit_req zone=one burst=10 nodelay; + root /var/www/certbot; + } + return 301 https://$host$request_uri; - root /server; + } + server { - location /minishell/vnc { - proxy_pass http://minishell:8006/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - location / { - proxy_pass http://website:3000/; - proxy_http_version 1.1; - # proxy_set_header Upgrade $http_upgrade; - # proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } + listen 443 ssl; + + ssl_certificate /etc/letsencrypt/live/remoteserver.vps.webdock.cloud/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/remoteserver.vps.webdock.cloud/privkey.pem; + + location /minishell/vnc { + proxy_pass http://88.88.5.2:8006/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location / { + proxy_pass http://88.88.5.3:3000/; + proxy_http_version 1.1; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } #error_page 404 /404.html; @@ -86,8 +102,8 @@ http { #location ~ /\.ht { # deny all; #} - } + #access_log logs/host.access.log main; # another virtual host using mix of IP-, name-, and port-based configuration # diff --git a/server_website/compose.yaml b/server_website/compose.yaml new file mode 100644 index 0000000..1a8f818 --- /dev/null +++ b/server_website/compose.yaml @@ -0,0 +1,92 @@ +services: + minishell: + container_name: "minishell" + # image: qemux/qemu-docker + restart: always + build: + context: ./minishell + dockerfile: Dockerfile + + cap_drop: + - ALL + cap_add: + - SETGID + - FSETID + - SETUID + + # Prevents gaining new privileges + devices: + - /dev/kvm + security_opt: + - no-new-privileges + + networks: + website_net: + ipv4_address: "88.88.5.2" + + # volumes: + # - /home/victor/git/website/minishell/linux-minishell/alpine-custom.iso:/boot.iso + + # environment: + # DISK_SIZE: "1GB" + # RAM_SIZE: "500MB" + # ARGUMENTS: "-boot d" + # DEBUG: "1" + # BOOT_MODE: "legacy" + # BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-virt-3.21.3-x86_64.iso" + + # networks: + # - website_net + + certbot: + image: certbot/certbot + container_name: "certbot-site" + restart: always + + volumes: + - ./certbot/conf:/etc/letsencrypt + - ./certbot/www:/var/www/certbot + + command: certonly --webroot -w /var/www/certbot --force-renewal --email victorvobis@protonmail.com -d victorvobis.mooo.com --agree-tos + + nginx-site: + container_name: "nginx-site" + restart: always + build: + context: ./nginx + dockerfile: Dockerfile + + volumes: + - ./nginx/nginx.conf:/etc/nginc/nginx.conf + - ./certbot/conf:/etc/letsencrypt + - ./certbot/www:/var/www/certbot + + depends_on: + - "minishell" + - "website" + networks: + website_net: + ipv4_address: "88.88.5.1" + + ports: + - 8080:80 + + website: + container_name: "site" + restart: always + build: + context: ./vvsite + dockerfile: Dockerfile + + networks: + website_net: + ipv4_address: "88.88.5.3" + +networks: + website_net: + # external: false + # internal: true + driver: bridge + ipam: + config: + - subnet: "88.88.0.0/21" diff --git a/server_website/minishell/Dockerfile b/server_website/minishell/Dockerfile new file mode 100644 index 0000000..f869763 --- /dev/null +++ b/server_website/minishell/Dockerfile @@ -0,0 +1,19 @@ +FROM alpine:edge +ENV USERNAME="shelluser" \ + PASSWORD="" \ + SUDO_OK="false" \ + AUTOLOGIN="true" \ + TZ="Etc/UTC" + +COPY ./entrypoint.sh / +COPY --chmod=011 minishell_src/bin/minishell /bin/minishell + +RUN apk update && \ + apk add --no-cache tini ttyd tzdata vim nano && \ + chmod 700 /entrypoint.sh && \ + touch /etc/.firstrun && \ + ln -s "/usr/share/zoneinfo/$TZ" /etc/localtime && \ + echo $TZ > /etc/timezone + +ENTRYPOINT ["/sbin/tini", "--"] +CMD ["/entrypoint.sh"] diff --git a/server_website/minishell/bin/minishell b/server_website/minishell/bin/minishell new file mode 100755 index 0000000..f832fbd Binary files /dev/null and b/server_website/minishell/bin/minishell differ diff --git a/server_website/minishell/entrypoint.sh b/server_website/minishell/entrypoint.sh new file mode 100644 index 0000000..20955f3 --- /dev/null +++ b/server_website/minishell/entrypoint.sh @@ -0,0 +1,54 @@ +#!/bin/sh +set -e +#set -x + +TTYD_ARGS="login" + +# Check if this is the container's first run +if [ -f /etc/.firstrun ]; then + # Create user account + echo >> /etc/shells /bin/minishell + adduser -D --shell=/bin/sh $USERNAME + echo "#!/bin/sh + trap '' SIGINT + while : + do + echo "*** Starting Minishell ***" + minishell + done" >> /home/$USERNAME/.runshell.sh + chmod +x /home/$USERNAME/.runshell.sh + echo >> /home/$USERNAME/.profile "./.runshell.sh" + + # Add a password to the user + echo "$USERNAME:$PASSWORD" | chpasswd + + # Allow access to sudo if permitted + if [ $SUDO_OK == "true" ]; then + addgroup $USERNAME wheel + sed -i '/%wheel ALL=(ALL) ALL/s/^# //g' /etc/sudoers + fi + + # Prevent this from running again + rm /etc/.firstrun +fi + +# Optionally set a timezone +CURRENT_TZ=$(cat /etc/timezone) +if [ "$TZ" != "$CURRENT_TZ" ]; then + echo "Setting timezone to $TZ" + + # delete symlink if it exists + [ -f /etc/localtime ] && rm /etc/localtime + + # set timezone + ln -s "/usr/share/zoneinfo/$TZ" /etc/localtime + echo $TZ > /etc/timezone +fi + +# Auto login the user, if allowed +[ $AUTOLOGIN == "true" ] && TTYD_ARGS="$TTYD_ARGS -f $USERNAME" + +passwd -l root + +# Start ttyd +exec ttyd -W -m 5 -p 8006 $TTYD_ARGS diff --git a/nginx/Dockerfile b/server_website/nginx/Dockerfile similarity index 73% rename from nginx/Dockerfile rename to server_website/nginx/Dockerfile index 21d08ba..16f6d69 100644 --- a/nginx/Dockerfile +++ b/server_website/nginx/Dockerfile @@ -2,7 +2,7 @@ FROM nginx WORKDIR /server -COPY ./nginx.conf /etc/nginx/nginx.conf +# COPY ./nginx.conf /etc/nginx/nginx.conf COPY ./html /server/html COPY ./index.html /server diff --git a/server_website/nginx/html/css/output.css b/server_website/nginx/html/css/output.css new file mode 100644 index 0000000..891da29 --- /dev/null +++ b/server_website/nginx/html/css/output.css @@ -0,0 +1,758 @@ +/*! tailwindcss v4.0.6 | MIT License | https://tailwindcss.com */ +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-red-50: oklch(0.971 0.013 17.38); + --color-red-100: oklch(0.936 0.032 17.717); + --color-red-200: oklch(0.885 0.062 18.334); + --color-red-300: oklch(0.808 0.114 19.571); + --color-red-400: oklch(0.704 0.191 22.216); + --color-red-500: oklch(0.637 0.237 25.331); + --color-red-600: oklch(0.577 0.245 27.325); + --color-red-700: oklch(0.505 0.213 27.518); + --color-red-800: oklch(0.444 0.177 26.899); + --color-red-900: oklch(0.396 0.141 25.723); + --color-red-950: oklch(0.258 0.092 26.042); + --color-orange-50: oklch(0.98 0.016 73.684); + --color-orange-100: oklch(0.954 0.038 75.164); + --color-orange-200: oklch(0.901 0.076 70.697); + --color-orange-300: oklch(0.837 0.128 66.29); + --color-orange-400: oklch(0.75 0.183 55.934); + --color-orange-500: oklch(0.705 0.213 47.604); + --color-orange-600: oklch(0.646 0.222 41.116); + --color-orange-700: oklch(0.553 0.195 38.402); + --color-orange-800: oklch(0.47 0.157 37.304); + --color-orange-900: oklch(0.408 0.123 38.172); + --color-orange-950: oklch(0.266 0.079 36.259); + --color-amber-50: oklch(0.987 0.022 95.277); + --color-amber-100: oklch(0.962 0.059 95.617); + --color-amber-200: oklch(0.924 0.12 95.746); + --color-amber-300: oklch(0.879 0.169 91.605); + --color-amber-400: oklch(0.828 0.189 84.429); + --color-amber-500: oklch(0.769 0.188 70.08); + --color-amber-600: oklch(0.666 0.179 58.318); + --color-amber-700: oklch(0.555 0.163 48.998); + --color-amber-800: oklch(0.473 0.137 46.201); + --color-amber-900: oklch(0.414 0.112 45.904); + --color-amber-950: oklch(0.279 0.077 45.635); + --color-yellow-50: oklch(0.987 0.026 102.212); + --color-yellow-100: oklch(0.973 0.071 103.193); + --color-yellow-200: oklch(0.945 0.129 101.54); + --color-yellow-300: oklch(0.905 0.182 98.111); + --color-yellow-400: oklch(0.852 0.199 91.936); + --color-yellow-500: oklch(0.795 0.184 86.047); + --color-yellow-600: oklch(0.681 0.162 75.834); + --color-yellow-700: oklch(0.554 0.135 66.442); + --color-yellow-800: oklch(0.476 0.114 61.907); + --color-yellow-900: oklch(0.421 0.095 57.708); + --color-yellow-950: oklch(0.286 0.066 53.813); + --color-lime-50: oklch(0.986 0.031 120.757); + --color-lime-100: oklch(0.967 0.067 122.328); + --color-lime-200: oklch(0.938 0.127 124.321); + --color-lime-300: oklch(0.897 0.196 126.665); + --color-lime-400: oklch(0.841 0.238 128.85); + --color-lime-500: oklch(0.768 0.233 130.85); + --color-lime-600: oklch(0.648 0.2 131.684); + --color-lime-700: oklch(0.532 0.157 131.589); + --color-lime-800: oklch(0.453 0.124 130.933); + --color-lime-900: oklch(0.405 0.101 131.063); + --color-lime-950: oklch(0.274 0.072 132.109); + --color-green-50: oklch(0.982 0.018 155.826); + --color-green-100: oklch(0.962 0.044 156.743); + --color-green-200: oklch(0.925 0.084 155.995); + --color-green-300: oklch(0.871 0.15 154.449); + --color-green-400: oklch(0.792 0.209 151.711); + --color-green-500: oklch(0.723 0.219 149.579); + --color-green-600: oklch(0.627 0.194 149.214); + --color-green-700: oklch(0.527 0.154 150.069); + --color-green-800: oklch(0.448 0.119 151.328); + --color-green-900: oklch(0.393 0.095 152.535); + --color-green-950: oklch(0.266 0.065 152.934); + --color-emerald-50: oklch(0.979 0.021 166.113); + --color-emerald-100: oklch(0.95 0.052 163.051); + --color-emerald-200: oklch(0.905 0.093 164.15); + --color-emerald-300: oklch(0.845 0.143 164.978); + --color-emerald-400: oklch(0.765 0.177 163.223); + --color-emerald-500: oklch(0.696 0.17 162.48); + --color-emerald-600: oklch(0.596 0.145 163.225); + --color-emerald-700: oklch(0.508 0.118 165.612); + --color-emerald-800: oklch(0.432 0.095 166.913); + --color-emerald-900: oklch(0.378 0.077 168.94); + --color-emerald-950: oklch(0.262 0.051 172.552); + --color-teal-50: oklch(0.984 0.014 180.72); + --color-teal-100: oklch(0.953 0.051 180.801); + --color-teal-200: oklch(0.91 0.096 180.426); + --color-teal-300: oklch(0.855 0.138 181.071); + --color-teal-400: oklch(0.777 0.152 181.912); + --color-teal-500: oklch(0.704 0.14 182.503); + --color-teal-600: oklch(0.6 0.118 184.704); + --color-teal-700: oklch(0.511 0.096 186.391); + --color-teal-800: oklch(0.437 0.078 188.216); + --color-teal-900: oklch(0.386 0.063 188.416); + --color-teal-950: oklch(0.277 0.046 192.524); + --color-cyan-50: oklch(0.984 0.019 200.873); + --color-cyan-100: oklch(0.956 0.045 203.388); + --color-cyan-200: oklch(0.917 0.08 205.041); + --color-cyan-300: oklch(0.865 0.127 207.078); + --color-cyan-400: oklch(0.789 0.154 211.53); + --color-cyan-500: oklch(0.715 0.143 215.221); + --color-cyan-600: oklch(0.609 0.126 221.723); + --color-cyan-700: oklch(0.52 0.105 223.128); + --color-cyan-800: oklch(0.45 0.085 224.283); + --color-cyan-900: oklch(0.398 0.07 227.392); + --color-cyan-950: oklch(0.302 0.056 229.695); + --color-sky-50: oklch(0.977 0.013 236.62); + --color-sky-100: oklch(0.951 0.026 236.824); + --color-sky-200: oklch(0.901 0.058 230.902); + --color-sky-300: oklch(0.828 0.111 230.318); + --color-sky-400: oklch(0.746 0.16 232.661); + --color-sky-500: oklch(0.685 0.169 237.323); + --color-sky-600: oklch(0.588 0.158 241.966); + --color-sky-700: oklch(0.5 0.134 242.749); + --color-sky-800: oklch(0.443 0.11 240.79); + --color-sky-900: oklch(0.391 0.09 240.876); + --color-sky-950: oklch(0.293 0.066 243.157); + --color-blue-50: oklch(0.97 0.014 254.604); + --color-blue-100: oklch(0.932 0.032 255.585); + --color-blue-200: oklch(0.882 0.059 254.128); + --color-blue-300: oklch(0.809 0.105 251.813); + --color-blue-400: oklch(0.707 0.165 254.624); + --color-blue-500: oklch(0.623 0.214 259.815); + --color-blue-600: oklch(0.546 0.245 262.881); + --color-blue-700: oklch(0.488 0.243 264.376); + --color-blue-800: oklch(0.424 0.199 265.638); + --color-blue-900: oklch(0.379 0.146 265.522); + --color-blue-950: oklch(0.282 0.091 267.935); + --color-indigo-50: oklch(0.962 0.018 272.314); + --color-indigo-100: oklch(0.93 0.034 272.788); + --color-indigo-200: oklch(0.87 0.065 274.039); + --color-indigo-300: oklch(0.785 0.115 274.713); + --color-indigo-400: oklch(0.673 0.182 276.935); + --color-indigo-500: oklch(0.585 0.233 277.117); + --color-indigo-600: oklch(0.511 0.262 276.966); + --color-indigo-700: oklch(0.457 0.24 277.023); + --color-indigo-800: oklch(0.398 0.195 277.366); + --color-indigo-900: oklch(0.359 0.144 278.697); + --color-indigo-950: oklch(0.257 0.09 281.288); + --color-violet-50: oklch(0.969 0.016 293.756); + --color-violet-100: oklch(0.943 0.029 294.588); + --color-violet-200: oklch(0.894 0.057 293.283); + --color-violet-300: oklch(0.811 0.111 293.571); + --color-violet-400: oklch(0.702 0.183 293.541); + --color-violet-500: oklch(0.606 0.25 292.717); + --color-violet-600: oklch(0.541 0.281 293.009); + --color-violet-700: oklch(0.491 0.27 292.581); + --color-violet-800: oklch(0.432 0.232 292.759); + --color-violet-900: oklch(0.38 0.189 293.745); + --color-violet-950: oklch(0.283 0.141 291.089); + --color-purple-50: oklch(0.977 0.014 308.299); + --color-purple-100: oklch(0.946 0.033 307.174); + --color-purple-200: oklch(0.902 0.063 306.703); + --color-purple-300: oklch(0.827 0.119 306.383); + --color-purple-400: oklch(0.714 0.203 305.504); + --color-purple-500: oklch(0.627 0.265 303.9); + --color-purple-600: oklch(0.558 0.288 302.321); + --color-purple-700: oklch(0.496 0.265 301.924); + --color-purple-800: oklch(0.438 0.218 303.724); + --color-purple-900: oklch(0.381 0.176 304.987); + --color-purple-950: oklch(0.291 0.149 302.717); + --color-fuchsia-50: oklch(0.977 0.017 320.058); + --color-fuchsia-100: oklch(0.952 0.037 318.852); + --color-fuchsia-200: oklch(0.903 0.076 319.62); + --color-fuchsia-300: oklch(0.833 0.145 321.434); + --color-fuchsia-400: oklch(0.74 0.238 322.16); + --color-fuchsia-500: oklch(0.667 0.295 322.15); + --color-fuchsia-600: oklch(0.591 0.293 322.896); + --color-fuchsia-700: oklch(0.518 0.253 323.949); + --color-fuchsia-800: oklch(0.452 0.211 324.591); + --color-fuchsia-900: oklch(0.401 0.17 325.612); + --color-fuchsia-950: oklch(0.293 0.136 325.661); + --color-pink-50: oklch(0.971 0.014 343.198); + --color-pink-100: oklch(0.948 0.028 342.258); + --color-pink-200: oklch(0.899 0.061 343.231); + --color-pink-300: oklch(0.823 0.12 346.018); + --color-pink-400: oklch(0.718 0.202 349.761); + --color-pink-500: oklch(0.656 0.241 354.308); + --color-pink-600: oklch(0.592 0.249 0.584); + --color-pink-700: oklch(0.525 0.223 3.958); + --color-pink-800: oklch(0.459 0.187 3.815); + --color-pink-900: oklch(0.408 0.153 2.432); + --color-pink-950: oklch(0.284 0.109 3.907); + --color-rose-50: oklch(0.969 0.015 12.422); + --color-rose-100: oklch(0.941 0.03 12.58); + --color-rose-200: oklch(0.892 0.058 10.001); + --color-rose-300: oklch(0.81 0.117 11.638); + --color-rose-400: oklch(0.712 0.194 13.428); + --color-rose-500: oklch(0.645 0.246 16.439); + --color-rose-600: oklch(0.586 0.253 17.585); + --color-rose-700: oklch(0.514 0.222 16.935); + --color-rose-800: oklch(0.455 0.188 13.697); + --color-rose-900: oklch(0.41 0.159 10.272); + --color-rose-950: oklch(0.271 0.105 12.094); + --color-slate-50: oklch(0.984 0.003 247.858); + --color-slate-100: oklch(0.968 0.007 247.896); + --color-slate-200: oklch(0.929 0.013 255.508); + --color-slate-300: oklch(0.869 0.022 252.894); + --color-slate-400: oklch(0.704 0.04 256.788); + --color-slate-500: oklch(0.554 0.046 257.417); + --color-slate-600: oklch(0.446 0.043 257.281); + --color-slate-700: oklch(0.372 0.044 257.287); + --color-slate-800: oklch(0.279 0.041 260.031); + --color-slate-900: oklch(0.208 0.042 265.755); + --color-slate-950: oklch(0.129 0.042 264.695); + --color-gray-50: oklch(0.985 0.002 247.839); + --color-gray-100: oklch(0.967 0.003 264.542); + --color-gray-200: oklch(0.928 0.006 264.531); + --color-gray-300: oklch(0.872 0.01 258.338); + --color-gray-400: oklch(0.707 0.022 261.325); + --color-gray-500: oklch(0.551 0.027 264.364); + --color-gray-600: oklch(0.446 0.03 256.802); + --color-gray-700: oklch(0.373 0.034 259.733); + --color-gray-800: oklch(0.278 0.033 256.848); + --color-gray-900: oklch(0.21 0.034 264.665); + --color-gray-950: oklch(0.13 0.028 261.692); + --color-zinc-50: oklch(0.985 0 0); + --color-zinc-100: oklch(0.967 0.001 286.375); + --color-zinc-200: oklch(0.92 0.004 286.32); + --color-zinc-300: oklch(0.871 0.006 286.286); + --color-zinc-400: oklch(0.705 0.015 286.067); + --color-zinc-500: oklch(0.552 0.016 285.938); + --color-zinc-600: oklch(0.442 0.017 285.786); + --color-zinc-700: oklch(0.37 0.013 285.805); + --color-zinc-800: oklch(0.274 0.006 286.033); + --color-zinc-900: oklch(0.21 0.006 285.885); + --color-zinc-950: oklch(0.141 0.005 285.823); + --color-neutral-50: oklch(0.985 0 0); + --color-neutral-100: oklch(0.97 0 0); + --color-neutral-200: oklch(0.922 0 0); + --color-neutral-300: oklch(0.87 0 0); + --color-neutral-400: oklch(0.708 0 0); + --color-neutral-500: oklch(0.556 0 0); + --color-neutral-600: oklch(0.439 0 0); + --color-neutral-700: oklch(0.371 0 0); + --color-neutral-800: oklch(0.269 0 0); + --color-neutral-900: oklch(0.205 0 0); + --color-neutral-950: oklch(0.145 0 0); + --color-stone-50: oklch(0.985 0.001 106.423); + --color-stone-100: oklch(0.97 0.001 106.424); + --color-stone-200: oklch(0.923 0.003 48.717); + --color-stone-300: oklch(0.869 0.005 56.366); + --color-stone-400: oklch(0.709 0.01 56.259); + --color-stone-500: oklch(0.553 0.013 58.071); + --color-stone-600: oklch(0.444 0.011 73.639); + --color-stone-700: oklch(0.374 0.01 67.558); + --color-stone-800: oklch(0.268 0.007 34.298); + --color-stone-900: oklch(0.216 0.006 56.043); + --color-stone-950: oklch(0.147 0.004 49.25); + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --breakpoint-sm: 40rem; + --breakpoint-md: 48rem; + --breakpoint-lg: 64rem; + --breakpoint-xl: 80rem; + --breakpoint-2xl: 96rem; + --container-3xs: 16rem; + --container-2xs: 18rem; + --container-xs: 20rem; + --container-sm: 24rem; + --container-md: 28rem; + --container-lg: 32rem; + --container-xl: 36rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-4xl: 56rem; + --container-5xl: 64rem; + --container-6xl: 72rem; + --container-7xl: 80rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --text-6xl: 3.75rem; + --text-6xl--line-height: 1; + --text-7xl: 4.5rem; + --text-7xl--line-height: 1; + --text-8xl: 6rem; + --text-8xl--line-height: 1; + --text-9xl: 8rem; + --text-9xl--line-height: 1; + --font-weight-thin: 100; + --font-weight-extralight: 200; + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + --font-weight-black: 900; + --tracking-tighter: -0.05em; + --tracking-tight: -0.025em; + --tracking-normal: 0em; + --tracking-wide: 0.025em; + --tracking-wider: 0.05em; + --tracking-widest: 0.1em; + --leading-tight: 1.25; + --leading-snug: 1.375; + --leading-normal: 1.5; + --leading-relaxed: 1.625; + --leading-loose: 2; + --radius-xs: 0.125rem; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --radius-2xl: 1rem; + --radius-3xl: 1.5rem; + --radius-4xl: 2rem; + --shadow-2xs: 0 1px rgb(0 0 0 / 0.05); + --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05); + --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05); + --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05); + --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05); + --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15); + --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12); + --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15); + --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1); + --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15); + --ease-in: cubic-bezier(0.4, 0, 1, 1); + --ease-out: cubic-bezier(0, 0, 0.2, 1); + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-spin: spin 1s linear infinite; + --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + --animate-bounce: bounce 1s infinite; + --blur-xs: 4px; + --blur-sm: 8px; + --blur-md: 12px; + --blur-lg: 16px; + --blur-xl: 24px; + --blur-2xl: 40px; + --blur-3xl: 64px; + --perspective-dramatic: 100px; + --perspective-near: 300px; + --perspective-normal: 500px; + --perspective-midrange: 800px; + --perspective-distant: 1200px; + --aspect-video: 16 / 9; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-font-feature-settings: var(--font-sans--font-feature-settings); + --default-font-variation-settings: var( + --font-sans--font-variation-settings + ); + --default-mono-font-family: var(--font-mono); + --default-mono-font-feature-settings: var( + --font-mono--font-feature-settings + ); + --default-mono-font-variation-settings: var( + --font-mono--font-variation-settings + ); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" ); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var( --default-font-variation-settings, normal ); + -webkit-tap-highlight-color: transparent; + } + body { + line-height: inherit; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace ); + font-feature-settings: var( --default-mono-font-feature-settings, normal ); + font-variation-settings: var( --default-mono-font-variation-settings, normal ); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + color: color-mix(in oklab, currentColor 50%, transparent); + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .m-2 { + margin: calc(var(--spacing) * 2); + } + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .block { + display: block; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .h-screen { + height: 100vh; + } + .w-full { + width: 100%; + } + .w-screen { + width: 100vw; + } + .max-w-md { + max-width: var(--container-md); + } + .grow { + flex-grow: 1; + } + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + .place-items-center { + place-items: center; + } + .items-center { + align-items: center; + } + .justify-center { + justify-content: center; + } + .self-center { + align-self: center; + } + .justify-self-start { + justify-self: flex-start; + } + .rounded { + border-radius: 0.25rem; + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .bg-blue-500 { + background-color: var(--color-blue-500); + } + .bg-gray-100 { + background-color: var(--color-gray-100); + } + .bg-neutral-100 { + background-color: var(--color-neutral-100); + } + .bg-neutral-200 { + background-color: var(--color-neutral-200); + } + .bg-neutral-500 { + background-color: var(--color-neutral-500); + } + .bg-neutral-900 { + background-color: var(--color-neutral-900); + } + .bg-white { + background-color: var(--color-white); + } + .p-8 { + padding: calc(var(--spacing) * 8); + } + .p-20 { + padding: calc(var(--spacing) * 20); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .text-center { + text-align: center; + } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .text-gray-700 { + color: var(--color-gray-700); + } + .text-white { + color: var(--color-white); + } + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .hover\:bg-blue-600 { + &:hover { + @media (hover: hover) { + background-color: var(--color-blue-600); + } + } + } + .focus\:border-blue-300 { + &:focus { + border-color: var(--color-blue-300); + } + } + .focus\:ring { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:outline-none { + &:focus { + --tw-outline-style: none; + outline-style: none; + } + } +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} +@keyframes ping { + 75%, 100% { + transform: scale(2); + opacity: 0; + } +} +@keyframes pulse { + 50% { + opacity: 0.5; + } +} +@keyframes bounce { + 0%, 100% { + transform: translateY(-25%); + animation-timing-function: cubic-bezier(0.8, 0, 1, 1); + } + 50% { + transform: none; + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + } +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} diff --git a/server_website/nginx/html/css/style.css b/server_website/nginx/html/css/style.css new file mode 100644 index 0000000..f1d8c73 --- /dev/null +++ b/server_website/nginx/html/css/style.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/server_website/nginx/html/index.html b/server_website/nginx/html/index.html new file mode 100644 index 0000000..ca08fea --- /dev/null +++ b/server_website/nginx/html/index.html @@ -0,0 +1,47 @@ + + + + + + Login + + + + +
+

Login

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + diff --git a/nginx/index.html b/server_website/nginx/index.html similarity index 100% rename from nginx/index.html rename to server_website/nginx/index.html diff --git a/server_website/nginx/nginx.conf b/server_website/nginx/nginx.conf new file mode 100644 index 0000000..303b6a6 --- /dev/null +++ b/server_website/nginx/nginx.conf @@ -0,0 +1,131 @@ + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + +# +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + server { + listen 80; + server_name localhost; + + #charset koi8-r; + + #access_log logs/host.access.log main; + + root /server; + + location /minishell/vnc { + proxy_pass http://minishell:8006/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location / { + proxy_pass http://website:3000/; + proxy_http_version 1.1; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location ~ /.well-known/acme-challenge { + root /var/www/certbot; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} + } + + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + +} diff --git a/server_website/vvsite/Cargo.toml b/server_website/vvsite/Cargo.toml new file mode 100644 index 0000000..be4bb1a --- /dev/null +++ b/server_website/vvsite/Cargo.toml @@ -0,0 +1,93 @@ +[package] +name = "vvsite" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +actix-files = { version = "0.6", optional = true } +actix-web = { version = "4", optional = true, features = ["macros"] } +console_error_panic_hook = "0.1" +http = { version = "1.0.0", optional = true } +leptos = { version = "0.6", features = ["nightly"] } +leptos_meta = { version = "0.6", features = ["nightly"] } +leptos_actix = { version = "0.6", optional = true } +leptos_router = { version = "0.6", features = ["nightly"] } +wasm-bindgen = "=0.2.100" + +[features] +csr = ["leptos/csr", "leptos_meta/csr", "leptos_router/csr"] +hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"] +ssr = [ + "dep:actix-files", + "dep:actix-web", + "dep:leptos_actix", + "leptos/ssr", + "leptos_meta/ssr", + "leptos_router/ssr", +] + +# Defines a size-optimized profile for the WASM bundle in release mode +[profile.wasm-release] +inherits = "release" +opt-level = 'z' +lto = true +codegen-units = 1 +panic = "abort" + +[package.metadata.leptos] +# The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name +output-name = "vvsite" +# The site root folder is where cargo-leptos generate all output. WARNING: all content of this folder will be erased on a rebuild. Use it in your server setup. +site-root = "target/site" +# The site-root relative folder where all compiled output (JS, WASM and CSS) is written +# Defaults to pkg +site-pkg-dir = "pkg" +# [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS. The CSS is optimized by Lightning CSS before being written to //app.css +style-file = "style/main.scss" +# Assets source dir. All files found here will be copied and synchronized to site-root. +# The assets-dir cannot have a sub directory with the same name/path as site-pkg-dir. + +tailwind-input-file = "assets/tailwind/tailwind.css" +# +# Optional. Env: LEPTOS_ASSETS_DIR. +assets-dir = "assets/public" +# The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. +site-addr = "0.0.0.0:3000" +# The port to use for automatic reload monitoring +reload-port = 3001 +# [Optional] Command to use when running end2end tests. It will run in the end2end dir. +# [Windows] for non-WSL use "npx.cmd playwright test" +# This binary name can be checked in Powershell with Get-Command npx +end2end-cmd = "npx playwright test" +end2end-dir = "end2end" +# The browserlist query used for optimizing the CSS. +browserquery = "defaults" +# The environment Leptos will run in, usually either "DEV" or "PROD" +env = "DEV" +# The features to use when compiling the bin target +# +# Optional. Can be over-ridden with the command line parameter --bin-features +bin-features = ["ssr"] + +# If the --no-default-features flag should be used when compiling the bin target +# +# Optional. Defaults to false. +bin-default-features = false + +# The features to use when compiling the lib target +# +# Optional. Can be over-ridden with the command line parameter --lib-features +lib-features = ["hydrate"] + +# If the --no-default-features flag should be used when compiling the lib target +# +# Optional. Defaults to false. +lib-default-features = false + +# The profile to use for the lib target when compiling for release +# +# Optional. Defaults to "release". +lib-profile-release = "wasm-release" diff --git a/server_website/vvsite/Dockerfile b/server_website/vvsite/Dockerfile new file mode 100644 index 0000000..2035d61 --- /dev/null +++ b/server_website/vvsite/Dockerfile @@ -0,0 +1,10 @@ +FROM archlinux + +WORKDIR /website +COPY ./target/site /website/target/site +COPY ./target/debug/vvsite /website/vvsite + +COPY ./Cargo.toml /website/Cargo.toml +RUN chmod +x /website/vvsite + +CMD ["/website/vvsite"] diff --git a/server_website/vvsite/target/site/favicon.ico b/server_website/vvsite/target/site/favicon.ico new file mode 100644 index 0000000..98eb609 Binary files /dev/null and b/server_website/vvsite/target/site/favicon.ico differ diff --git a/server_website/vvsite/target/site/pkg/vvsite.css b/server_website/vvsite/target/site/pkg/vvsite.css new file mode 100644 index 0000000..858850c --- /dev/null +++ b/server_website/vvsite/target/site/pkg/vvsite.css @@ -0,0 +1,444 @@ +body { + font-family: sans-serif; + text-align: center; +} + +*, :before, :after { + box-sizing: border-box; + border-width: 0; + border-style: solid; + border-color: #e5e7eb; +} + +:before, :after { + --tw-content: ""; +} + +html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; + font-feature-settings: normal; + font-variation-settings: normal; + -webkit-tap-highlight-color: transparent; +} + +body { + margin: 0; + line-height: inherit; +} + +hr { + height: 0; + color: inherit; + border-top-width: 1px; +} + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; +} + +a { + color: inherit; + text-decoration: inherit; +} + +b, strong { + font-weight: bolder; +} + +code, kbd, samp, pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + font-feature-settings: normal; + font-variation-settings: normal; + font-size: 1em; +} + +small { + font-size: 80%; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; +} + +button, input, optgroup, select, textarea { + font-family: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + font-size: 100%; + font-weight: inherit; + line-height: inherit; + color: inherit; + margin: 0; + padding: 0; +} + +button, select { + text-transform: none; +} + +button, [type="button"], [type="reset"], [type="submit"] { + -webkit-appearance: button; + background-color: rgba(0, 0, 0, 0); + background-image: none; +} + +:-moz-focusring { + outline: auto; +} + +:-moz-ui-invalid { + box-shadow: none; +} + +progress { + vertical-align: baseline; +} + +::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +summary { + display: list-item; +} + +blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, ul, menu { + list-style: none; + margin: 0; + padding: 0; +} + +dialog { + padding: 0; +} + +textarea { + resize: vertical; +} + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + color: #9ca3af; +} + +input::placeholder, textarea::placeholder { + opacity: 1; + color: #9ca3af; +} + +button, [role="button"] { + cursor: pointer; +} + +:disabled { + cursor: default; +} + +img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; +} + +img, video { + max-width: 100%; + height: auto; +} + +[hidden] { + display: none; +} + +*, :before, :after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgba(59, 130, 246, .5); + --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0); + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgba(59, 130, 246, .5); + --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-shadow: 0 0 rgba(0, 0, 0, 0); + --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0); + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.m-auto { + margin: auto; +} + +.box-border { + box-sizing: border-box; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.h-64 { + height: 16rem; +} + +.h-\[8vh\] { + height: 8vh; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.max-h-\[70vh\] { + max-height: 70vh; +} + +.min-h-\[40vh\] { + min-height: 40vh; +} + +.w-full { + width: 100%; +} + +.w-screen { + width: 100vw; +} + +.min-w-\[50vw\] { + min-width: 50vw; +} + +.max-w-\[100vw\] { + max-width: 100vw; +} + +.max-w-\[1300px\] { + max-width: 1300px; +} + +.grow { + flex-grow: 1; +} + +.flex-col { + flex-direction: column; +} + +.place-content-center { + place-content: center; +} + +.place-content-stretch { + place-content: stretch; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.gap-4 { + gap: 1rem; +} + +.place-self-center { + place-self: center; +} + +.rounded-md { + border-radius: .375rem; +} + +.p-1 { + padding: .25rem; +} + +.p-4 { + padding: 1rem; +} + +.p-8 { + padding: 2rem; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} + +.text-center { + text-align: center; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-5xl { + font-size: 3rem; + line-height: 1; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.hover\:bg-\[\#889E73ff\]:hover { + background-color: #889e73; +} diff --git a/server_website/vvsite/target/site/pkg/vvsite.js b/server_website/vvsite/target/site/pkg/vvsite.js new file mode 100644 index 0000000..cf09c42 --- /dev/null +++ b/server_website/vvsite/target/site/pkg/vvsite.js @@ -0,0 +1,1171 @@ +let wasm; + +function getFromExternrefTable0(idx) { return wasm.__wbindgen_export_0.get(idx); } + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; + } + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); + } + +function getCachedStringFromWasm0(ptr, len) { + if (ptr === 0) { + return getFromExternrefTable0(len); + } else { + return getStringFromWasm0(ptr, len); + } + } + +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_0.set(idx, obj); + return idx; + } + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); + } + } + +function isLikeNone(x) { + return x === undefined || x === null; + } + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); + } + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; + } + +let cachedDataViewMemory0 = null; + +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; + } + +const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(state => { + wasm.__wbindgen_export_6.get(state.dtor)(state.a, state.b) + }); + +function makeMutClosure(arg0, arg1, dtor, f) { + const state = { a: arg0, b: arg1, cnt: 1, dtor }; + const real = (...args) => { + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally { + if (--state.cnt === 0) { + wasm.__wbindgen_export_6.get(state.dtor)(a, state.b); + CLOSURE_DTORS.unregister(state); + } else { + state.a = a; + } + } + }; + real.original = state; + CLOSURE_DTORS.register(real, state, state); + return real; + } + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches && builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; + } + +export function hydrate() { +wasm.hydrate(); +} + +function __wbg_adapter_44(arg0, arg1) { +wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h4de226542b3bf314(arg0, arg1); +} + +function __wbg_adapter_47(arg0, arg1, arg2) { +wasm.closure352_externref_shim(arg0, arg1, arg2); +} + +function __wbg_adapter_50(arg0, arg1) { +wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h91d18030ec7993a5(arg0, arg1); +} + +function __wbg_adapter_53(arg0, arg1, arg2) { +wasm.closure456_externref_shim(arg0, arg1, arg2); +} + +function __wbg_adapter_277(arg0, arg1, arg2, arg3) { +wasm.closure481_externref_shim(arg0, arg1, arg2, arg3); +} + +const __wbindgen_enum_ReadableStreamType = ["bytes"]; + +const IntoUnderlyingByteSourceFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingbytesource_free(ptr >>> 0, 1)); + +export class IntoUnderlyingByteSource { + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + IntoUnderlyingByteSourceFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_intounderlyingbytesource_free(ptr, 0); + } + /** + * @returns {ReadableStreamType} + */ +get type() { +const ret = wasm.intounderlyingbytesource_type(this.__wbg_ptr); +return __wbindgen_enum_ReadableStreamType[ret]; +} +/** + * @returns {number} + */ +get autoAllocateChunkSize() { +const ret = wasm.intounderlyingbytesource_autoAllocateChunkSize(this.__wbg_ptr); +return ret >>> 0; +} +/** + * @param {ReadableByteStreamController} controller + */ +start(controller) { +wasm.intounderlyingbytesource_start(this.__wbg_ptr, controller); +} +/** + * @param {ReadableByteStreamController} controller + * @returns {Promise} + */ +pull(controller) { +const ret = wasm.intounderlyingbytesource_pull(this.__wbg_ptr, controller); +return ret; +} +cancel() { +const ptr = this.__destroy_into_raw(); +wasm.intounderlyingbytesource_cancel(ptr); +} +} + +const IntoUnderlyingSinkFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsink_free(ptr >>> 0, 1)); + +export class IntoUnderlyingSink { + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + IntoUnderlyingSinkFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_intounderlyingsink_free(ptr, 0); + } + /** + * @param {any} chunk + * @returns {Promise} + */ +write(chunk) { +const ret = wasm.intounderlyingsink_write(this.__wbg_ptr, chunk); +return ret; +} +/** + * @returns {Promise} + */ +close() { +const ptr = this.__destroy_into_raw(); +const ret = wasm.intounderlyingsink_close(ptr); +return ret; +} +/** + * @param {any} reason + * @returns {Promise} + */ +abort(reason) { +const ptr = this.__destroy_into_raw(); +const ret = wasm.intounderlyingsink_abort(ptr, reason); +return ret; +} +} + +const IntoUnderlyingSourceFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsource_free(ptr >>> 0, 1)); + +export class IntoUnderlyingSource { + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + IntoUnderlyingSourceFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_intounderlyingsource_free(ptr, 0); + } + /** + * @param {ReadableStreamDefaultController} controller + * @returns {Promise} + */ +pull(controller) { +const ret = wasm.intounderlyingsource_pull(this.__wbg_ptr, controller); +return ret; +} +cancel() { +const ptr = this.__destroy_into_raw(); +wasm.intounderlyingsource_cancel(ptr); +} +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } + } + + function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; +imports.wbg.__wbg_addEventListener_ad9617755da8fbe8 = function() { return handleError(function (arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.addEventListener(v0, arg3); +}, arguments) }; +imports.wbg.__wbg_altKey_d2ad93ef54deb903 = function(arg0) { +const ret = arg0.altKey; +return ret; +}; +imports.wbg.__wbg_appendChild_daddabaedb4a1728 = function() { return handleError(function (arg0, arg1) { +const ret = arg0.appendChild(arg1); +return ret; +}, arguments) }; +imports.wbg.__wbg_append_3f7f164bc7d0afd9 = function() { return handleError(function (arg0, arg1, arg2) { +arg0.append(arg1, arg2); +}, arguments) }; +imports.wbg.__wbg_before_14893f35be58ad51 = function() { return handleError(function (arg0, arg1) { +arg0.before(arg1); +}, arguments) }; +imports.wbg.__wbg_before_a5debbbcdc74ee52 = function() { return handleError(function (arg0, arg1) { +arg0.before(arg1); +}, arguments) }; +imports.wbg.__wbg_body_39801f8e28a17e0d = function(arg0) { +const ret = arg0.body; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_buffer_4cc4466b579d16b4 = function(arg0) { +const ret = arg0.buffer; +return ret; +}; +imports.wbg.__wbg_buffer_71667b1101df19da = function(arg0) { +const ret = arg0.buffer; +return ret; +}; +imports.wbg.__wbg_button_e8c44aa42b50bef9 = function(arg0) { +const ret = arg0.button; +return ret; +}; +imports.wbg.__wbg_byobRequest_9dd6d13eb365e223 = function(arg0) { +const ret = arg0.byobRequest; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_byteLength_e84fb9e4a2940d2c = function(arg0) { +const ret = arg0.byteLength; +return ret; +}; +imports.wbg.__wbg_byteOffset_05ea0b08782f01bd = function(arg0) { +const ret = arg0.byteOffset; +return ret; +}; +imports.wbg.__wbg_call_75b89300dd530ca6 = function() { return handleError(function (arg0, arg1, arg2) { +const ret = arg0.call(arg1, arg2); +return ret; +}, arguments) }; +imports.wbg.__wbg_call_d68488931693e6ee = function() { return handleError(function (arg0, arg1) { +const ret = arg0.call(arg1); +return ret; +}, arguments) }; +imports.wbg.__wbg_childNodes_db685c63dbcd5537 = function(arg0) { +const ret = arg0.childNodes; +return ret; +}; +imports.wbg.__wbg_cloneNode_b3ad5fe78182a3e7 = function() { return handleError(function (arg0) { +const ret = arg0.cloneNode(); +return ret; +}, arguments) }; +imports.wbg.__wbg_close_2c98beee2b59af63 = function() { return handleError(function (arg0) { +arg0.close(); +}, arguments) }; +imports.wbg.__wbg_close_f825000f2241f096 = function() { return handleError(function (arg0) { +arg0.close(); +}, arguments) }; +imports.wbg.__wbg_composedPath_ee4f72591e0d0f75 = function(arg0) { +const ret = arg0.composedPath(); +return ret; +}; +imports.wbg.__wbg_createComment_e4c00ebde70478b2 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.createComment(v0); +return ret; +}; +imports.wbg.__wbg_createDocumentFragment_d041a9d2f85d2ed1 = function(arg0) { +const ret = arg0.createDocumentFragment(); +return ret; +}; +imports.wbg.__wbg_createElement_51ffea4765cb1cc5 = function() { return handleError(function (arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.createElement(v0); +return ret; +}, arguments) }; +imports.wbg.__wbg_createTextNode_86708483bc3c5132 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.createTextNode(v0); +return ret; +}; +imports.wbg.__wbg_createTreeWalker_a48515596b8beef2 = function() { return handleError(function (arg0, arg1, arg2) { +const ret = arg0.createTreeWalker(arg1, arg2 >>> 0); +return ret; +}, arguments) }; +imports.wbg.__wbg_ctrlKey_b18a47cac80f5ed7 = function(arg0) { +const ret = arg0.ctrlKey; +return ret; +}; +imports.wbg.__wbg_dataset_d2cf01c763ceb005 = function(arg0) { +const ret = arg0.dataset; +return ret; +}; +imports.wbg.__wbg_decodeURIComponent_b5e7c28797af50ab = function() { return handleError(function (arg0, arg1) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +const ret = decodeURIComponent(v0); +return ret; +}, arguments) }; +imports.wbg.__wbg_decodeURI_708ceea9a5b1301e = function() { return handleError(function (arg0, arg1) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +const ret = decodeURI(v0); +return ret; +}, arguments) }; +imports.wbg.__wbg_defaultPrevented_732aa296a00ba0f6 = function(arg0) { +const ret = arg0.defaultPrevented; +return ret; +}; +imports.wbg.__wbg_document_7689f46a8f647c96 = function(arg0) { +const ret = arg0.document; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_done_3ca5b09e8598078d = function(arg0) { +const ret = arg0.done; +return ret; +}; +imports.wbg.__wbg_enqueue_8a48484465436b3b = function() { return handleError(function (arg0, arg1) { +arg0.enqueue(arg1); +}, arguments) }; +imports.wbg.__wbg_entries_d873dde863e50b8c = function(arg0) { +const ret = Object.entries(arg0); +return ret; +}; +imports.wbg.__wbg_error_2ca63459aa969937 = function(arg0) { +console.error(arg0); +}; +imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +if (arg0 !== 0) { wasm.__wbindgen_free(arg0, arg1, 1); } +console.error(v0); +}; +imports.wbg.__wbg_exec_7230cd5c145b872e = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.exec(v0); +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_getAttribute_876366f2916a83fc = function(arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg2, arg3); +const ret = arg1.getAttribute(v0); +var ptr2 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +var len2 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len2, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr2, true); +}; +imports.wbg.__wbg_getElementById_ce95590ef98fe114 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.getElementById(v0); +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_get_726e3873086e7183 = function(arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg2, arg3); +const ret = arg1[v0]; +var ptr2 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +var len2 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len2, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr2, true); +}; +imports.wbg.__wbg_get_c122b1d576cf1fdb = function(arg0, arg1) { +const ret = arg0[arg1 >>> 0]; +return ret; +}; +imports.wbg.__wbg_get_ddd82e34e6366fb9 = function() { return handleError(function (arg0, arg1) { +const ret = Reflect.get(arg0, arg1); +return ret; +}, arguments) }; +imports.wbg.__wbg_getwithrefkey_1dc361bd10053bfe = function(arg0, arg1) { +const ret = arg0[arg1]; +return ret; +}; +imports.wbg.__wbg_globalThis_59c7794d9413986f = function() { return handleError(function () { +const ret = globalThis.globalThis; +return ret; +}, arguments) }; +imports.wbg.__wbg_global_04c81bad83a72129 = function() { return handleError(function () { +const ret = global.global; +return ret; +}, arguments) }; +imports.wbg.__wbg_hasAttribute_10d61da464139fd3 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.hasAttribute(v0); +return ret; +}; +imports.wbg.__wbg_hash_1b8b81a17fbce53f = function() { return handleError(function (arg0, arg1) { +const ret = arg1.hash; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}, arguments) }; +imports.wbg.__wbg_hash_bca72f76a3178bc8 = function(arg0, arg1) { +const ret = arg1.hash; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_head_f593be76595faa59 = function(arg0) { +const ret = arg0.head; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_history_28c9f6bada41fa0e = function() { return handleError(function (arg0) { +const ret = arg0.history; +return ret; +}, arguments) }; +imports.wbg.__wbg_href_02e76f823c19d30c = function(arg0, arg1) { +const ret = arg1.href; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_href_fe620cbb08310f18 = function(arg0, arg1) { +const ret = arg1.href; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_instanceof_ArrayBuffer_36214dbc6ea8dd3d = function(arg0) { +let result; + try { + result = arg0 instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; +return ret; +}; +imports.wbg.__wbg_instanceof_HtmlAnchorElement_93ffbf43e94800f9 = function(arg0) { +let result; + try { + result = arg0 instanceof HTMLAnchorElement; + } catch (_) { + result = false; + } + const ret = result; +return ret; +}; +imports.wbg.__wbg_instanceof_Uint8Array_0d898f7981fe0a2d = function(arg0) { +let result; + try { + result = arg0 instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; +return ret; +}; +imports.wbg.__wbg_instanceof_Window_47f723ed0409d724 = function(arg0) { +let result; + try { + result = arg0 instanceof Window; + } catch (_) { + result = false; + } + const ret = result; +return ret; +}; +imports.wbg.__wbg_isArray_435f9cb9abc7eccc = function(arg0) { +const ret = Array.isArray(arg0); +return ret; +}; +imports.wbg.__wbg_isSafeInteger_2817b2c8ebdd29d2 = function(arg0) { +const ret = Number.isSafeInteger(arg0); +return ret; +}; +imports.wbg.__wbg_is_c0f4e2085c8d91e1 = function(arg0, arg1) { +const ret = Object.is(arg0, arg1); +return ret; +}; +imports.wbg.__wbg_item_e4865fb0fce356b0 = function(arg0, arg1) { +const ret = arg0.item(arg1 >>> 0); +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_iterator_2a6b115668862130 = function() { +const ret = Symbol.iterator; +return ret; +}; +imports.wbg.__wbg_length_b52c3d528b88468e = function(arg0) { +const ret = arg0.length; +return ret; +}; +imports.wbg.__wbg_length_cc2c33deb047a05b = function(arg0) { +const ret = arg0.length; +return ret; +}; +imports.wbg.__wbg_length_e9123d1e4db12534 = function(arg0) { +const ret = arg0.length; +return ret; +}; +imports.wbg.__wbg_location_d103e836c52d0920 = function(arg0) { +const ret = arg0.location; +return ret; +}; +imports.wbg.__wbg_metaKey_139fd4bb4a7f3fdc = function(arg0) { +const ret = arg0.metaKey; +return ret; +}; +imports.wbg.__wbg_namespaceURI_84ad0fdc486ae542 = function(arg0, arg1) { +const ret = arg1.namespaceURI; +var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +var len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_new_10003836f2677621 = function(arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +var v1 = getCachedStringFromWasm0(arg2, arg3); +const ret = new RegExp(v0, v1); +return ret; +}; +imports.wbg.__wbg_new_51fd3aeaa6d3d03f = function(arg0, arg1) { +try { +var state0 = {a: arg0, b: arg1}; +var cb0 = (arg0, arg1) => { +const a = state0.a; +state0.a = 0; +try { +return __wbg_adapter_277(a, state0.b, arg0, arg1); +} finally { +state0.a = a; +} +}; +const ret = new Promise(cb0); +return ret; +} finally { +state0.a = state0.b = 0; +} +}; +imports.wbg.__wbg_new_5bd3cfec88bd010e = function(arg0, arg1) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +const ret = new Error(v0); +return ret; +}; +imports.wbg.__wbg_new_8a6f238a6ece86ea = function() { +const ret = new Error(); +return ret; +}; +imports.wbg.__wbg_new_9ed4506807911440 = function(arg0) { +const ret = new Uint8Array(arg0); +return ret; +}; +imports.wbg.__wbg_newnoargs_fe7e106c48aadd7e = function(arg0, arg1) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +const ret = new Function(v0); +return ret; +}; +imports.wbg.__wbg_newwithbase_3e89facdc4b45c72 = function() { return handleError(function (arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg0, arg1); +var v1 = getCachedStringFromWasm0(arg2, arg3); +const ret = new URL(v0, v1); +return ret; +}, arguments) }; +imports.wbg.__wbg_newwithbyteoffsetandlength_a51b517eb0e8fbf4 = function(arg0, arg1, arg2) { +const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0); +return ret; +}; +imports.wbg.__wbg_nextNode_43077ba4421d37bb = function() { return handleError(function (arg0) { +const ret = arg0.nextNode(); +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}, arguments) }; +imports.wbg.__wbg_nextSibling_5dd0879ef893f708 = function(arg0) { +const ret = arg0.nextSibling; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_next_86c8f7dfb19a94eb = function() { return handleError(function (arg0) { +const ret = arg0.next(); +return ret; +}, arguments) }; +imports.wbg.__wbg_next_b39104aeda52ac60 = function(arg0) { +const ret = arg0.next; +return ret; +}; +imports.wbg.__wbg_nodeName_31090a044fc93523 = function(arg0, arg1) { +const ret = arg1.nodeName; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_origin_33e525b3abd804cf = function() { return handleError(function (arg0, arg1) { +const ret = arg1.origin; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}, arguments) }; +imports.wbg.__wbg_origin_81f4bd192488990e = function(arg0, arg1) { +const ret = arg1.origin; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_outerHTML_e0509691cfdacf56 = function(arg0, arg1) { +const ret = arg1.outerHTML; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_pathname_12a663b40d81039a = function(arg0, arg1) { +const ret = arg1.pathname; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_pathname_f4c73464379abf9e = function() { return handleError(function (arg0, arg1) { +const ret = arg1.pathname; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}, arguments) }; +imports.wbg.__wbg_preventDefault_7cd87fa71683fc8f = function(arg0) { +arg0.preventDefault(); +}; +imports.wbg.__wbg_previousSibling_f05e5f738946758c = function(arg0) { +const ret = arg0.previousSibling; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_pushState_aa3f82bc57f19dd0 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) { +var v0 = getCachedStringFromWasm0(arg2, arg3); +var v1 = getCachedStringFromWasm0(arg4, arg5); +arg0.pushState(arg1, v0, v1); +}, arguments) }; +imports.wbg.__wbg_querySelectorAll_052eac35cdb76210 = function() { return handleError(function (arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.querySelectorAll(v0); +return ret; +}, arguments) }; +imports.wbg.__wbg_querySelector_ab5b6a4f61d535d5 = function() { return handleError(function (arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +const ret = arg0.querySelector(v0); +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}, arguments) }; +imports.wbg.__wbg_queueMicrotask_5a8a9131f3f0b37b = function(arg0) { +const ret = arg0.queueMicrotask; +return ret; +}; +imports.wbg.__wbg_queueMicrotask_6d79674585219521 = function(arg0) { +queueMicrotask(arg0); +}; +imports.wbg.__wbg_removeAttribute_2fd4894609c8ce06 = function() { return handleError(function (arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.removeAttribute(v0); +}, arguments) }; +imports.wbg.__wbg_removeChild_28f5cd5ebb18ae8e = function() { return handleError(function (arg0, arg1) { +const ret = arg0.removeChild(arg1); +return ret; +}, arguments) }; +imports.wbg.__wbg_removeEventListener_f420b4f37f515116 = function() { return handleError(function (arg0, arg1, arg2, arg3) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.removeEventListener(v0, arg3); +}, arguments) }; +imports.wbg.__wbg_remove_52bfcaff25d6cf50 = function(arg0) { +arg0.remove(); +}; +imports.wbg.__wbg_remove_844123e436d13065 = function(arg0) { +arg0.remove(); +}; +imports.wbg.__wbg_replaceState_0edd916282b64c6a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) { +var v0 = getCachedStringFromWasm0(arg2, arg3); +var v1 = getCachedStringFromWasm0(arg4, arg5); +arg0.replaceState(arg1, v0, v1); +}, arguments) }; +imports.wbg.__wbg_requestAnimationFrame_c63a6b8ad5f85d24 = function() { return handleError(function (arg0, arg1) { +const ret = arg0.requestAnimationFrame(arg1); +return ret; +}, arguments) }; +imports.wbg.__wbg_resolve_33aaa312c39e688c = function(arg0) { +const ret = Promise.resolve(arg0); +return ret; +}; +imports.wbg.__wbg_respond_442db8b929a98e76 = function() { return handleError(function (arg0, arg1) { +arg0.respond(arg1 >>> 0); +}, arguments) }; +imports.wbg.__wbg_scrollIntoView_7b81853ddfc9f282 = function(arg0) { +arg0.scrollIntoView(); +}; +imports.wbg.__wbg_scrollTo_10dc674a440a3169 = function(arg0, arg1, arg2) { +arg0.scrollTo(arg1, arg2); +}; +imports.wbg.__wbg_searchParams_b91890aed3e49590 = function(arg0) { +const ret = arg0.searchParams; +return ret; +}; +imports.wbg.__wbg_search_89e7e03373553f0b = function(arg0, arg1) { +const ret = arg1.search; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_search_9766a64e4a830960 = function() { return handleError(function (arg0, arg1) { +const ret = arg1.search; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}, arguments) }; +imports.wbg.__wbg_self_c9a63b952bd22cbd = function() { return handleError(function () { +const ret = self.self; +return ret; +}, arguments) }; +imports.wbg.__wbg_setAttribute_3d1326b2d681f50e = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +var v1 = getCachedStringFromWasm0(arg3, arg4); +arg0.setAttribute(v0, v1); +}, arguments) }; +imports.wbg.__wbg_set_e8d9380e866a1e41 = function(arg0, arg1, arg2) { +arg0.set(arg1, arg2 >>> 0); +}; +imports.wbg.__wbg_setdata_5ba64d5808cc682a = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.data = v0; +}; +imports.wbg.__wbg_sethref_b50b9cb99365bb8d = function() { return handleError(function (arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.href = v0; +}, arguments) }; +imports.wbg.__wbg_setinnerHTML_412032fa3570c106 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.innerHTML = v0; +}; +imports.wbg.__wbg_settextContent_8aa5fee2cdfef876 = function(arg0, arg1, arg2) { +var v0 = getCachedStringFromWasm0(arg1, arg2); +arg0.textContent = v0; +}; +imports.wbg.__wbg_shiftKey_15a826ae86780b66 = function(arg0) { +const ret = arg0.shiftKey; +return ret; +}; +imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) { +const ret = arg1.stack; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_state_700a50d8e8718898 = function() { return handleError(function (arg0) { +const ret = arg0.state; +return ret; +}, arguments) }; +imports.wbg.__wbg_target_07ff857af641679a = function(arg0, arg1) { +const ret = arg1.target; +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_textContent_9d6d40582d0c5e46 = function(arg0, arg1) { +const ret = arg1.textContent; +var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +var len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbg_then_acd4f2d41ed1cf58 = function(arg0, arg1) { +const ret = arg0.then(arg1); +return ret; +}; +imports.wbg.__wbg_value_f82ca5432417c8ff = function(arg0) { +const ret = arg0.value; +return ret; +}; +imports.wbg.__wbg_view_f0ef1c95fdf68f4a = function(arg0) { +const ret = arg0.view; +return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); +}; +imports.wbg.__wbg_warn_f70d9f1be6c62e43 = function(arg0) { +console.warn(arg0); +}; +imports.wbg.__wbg_window_81304a10d2638125 = function() { return handleError(function () { +const ret = window.window; +return ret; +}, arguments) }; +imports.wbg.__wbindgen_as_number = function(arg0) { +const ret = +arg0; +return ret; +}; +imports.wbg.__wbindgen_boolean_get = function(arg0) { +const v = arg0; +const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; +return ret; +}; +imports.wbg.__wbindgen_cb_drop = function(arg0) { +const obj = arg0.original; +if (obj.cnt-- == 1) { +obj.a = 0; +return true; +} +const ret = false; +return ret; +}; +imports.wbg.__wbindgen_closure_wrapper5748 = function(arg0, arg1, arg2) { +const ret = makeMutClosure(arg0, arg1, 351, __wbg_adapter_44); +return ret; +}; +imports.wbg.__wbindgen_closure_wrapper5750 = function(arg0, arg1, arg2) { +const ret = makeMutClosure(arg0, arg1, 353, __wbg_adapter_47); +return ret; +}; +imports.wbg.__wbindgen_closure_wrapper6504 = function(arg0, arg1, arg2) { +const ret = makeMutClosure(arg0, arg1, 418, __wbg_adapter_50); +return ret; +}; +imports.wbg.__wbindgen_closure_wrapper7766 = function(arg0, arg1, arg2) { +const ret = makeMutClosure(arg0, arg1, 457, __wbg_adapter_53); +return ret; +}; +imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { +const ret = debugString(arg1); +const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +const len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbindgen_error_new = function(arg0, arg1) { +const ret = new Error(getStringFromWasm0(arg0, arg1)); +return ret; +}; +imports.wbg.__wbindgen_in = function(arg0, arg1) { +const ret = arg0 in arg1; +return ret; +}; +imports.wbg.__wbindgen_init_externref_table = function() { +const table = wasm.__wbindgen_export_0; +const offset = table.grow(4); +table.set(0, undefined); +table.set(offset + 0, undefined); +table.set(offset + 1, null); +table.set(offset + 2, true); +table.set(offset + 3, false); +; +}; +imports.wbg.__wbindgen_is_function = function(arg0) { +const ret = typeof(arg0) === 'function'; +return ret; +}; +imports.wbg.__wbindgen_is_null = function(arg0) { +const ret = arg0 === null; +return ret; +}; +imports.wbg.__wbindgen_is_object = function(arg0) { +const val = arg0; +const ret = typeof(val) === 'object' && val !== null; +return ret; +}; +imports.wbg.__wbindgen_is_string = function(arg0) { +const ret = typeof(arg0) === 'string'; +return ret; +}; +imports.wbg.__wbindgen_is_undefined = function(arg0) { +const ret = arg0 === undefined; +return ret; +}; +imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { +const ret = arg0 === arg1; +return ret; +}; +imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { +const ret = arg0 == arg1; +return ret; +}; +imports.wbg.__wbindgen_memory = function() { +const ret = wasm.memory; +return ret; +}; +imports.wbg.__wbindgen_number_get = function(arg0, arg1) { +const obj = arg1; +const ret = typeof(obj) === 'number' ? obj : undefined; +getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); +}; +imports.wbg.__wbindgen_string_get = function(arg0, arg1) { +const obj = arg1; +const ret = typeof(obj) === 'string' ? obj : undefined; +var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); +var len1 = WASM_VECTOR_LEN; +getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); +getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); +}; +imports.wbg.__wbindgen_string_new = function(arg0, arg1) { +const ret = getStringFromWasm0(arg0, arg1); +return ret; +}; +imports.wbg.__wbindgen_throw = function(arg0, arg1) { +throw new Error(getStringFromWasm0(arg0, arg1)); +}; + + return imports; + } + + function __wbg_init_memory(imports, memory) { + + } + + function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedDataViewMemory0 = null; +cachedUint8ArrayMemory0 = null; + + + wasm.__wbindgen_start(); + return wasm; + } + + function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (typeof module !== 'undefined') { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module); + } + + async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (typeof module_or_path !== 'undefined') { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + __wbg_init_memory(imports); + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); + } + +export { initSync }; +export default __wbg_init; diff --git a/server_website/vvsite/target/site/pkg/vvsite.wasm b/server_website/vvsite/target/site/pkg/vvsite.wasm new file mode 100644 index 0000000..6646518 Binary files /dev/null and b/server_website/vvsite/target/site/pkg/vvsite.wasm differ diff --git a/vvsite/assets/public/emiku.css b/server_website/vvsite/target/site/website.css similarity index 99% rename from vvsite/assets/public/emiku.css rename to server_website/vvsite/target/site/website.css index 638a51e..9c87464 100644 --- a/vvsite/assets/public/emiku.css +++ b/server_website/vvsite/target/site/website.css @@ -2,6 +2,8 @@ body { margin: 0; padding: 0; font-family: Arial, sans-serif; + background-color: #F4D793; + color: #FFF6DA; } .overlay { diff --git a/vvsite/assets/public/website.css b/vvsite/assets/public/website.css new file mode 100644 index 0000000..9c87464 --- /dev/null +++ b/vvsite/assets/public/website.css @@ -0,0 +1,238 @@ +body { + margin: 0; + padding: 0; + font-family: Arial, sans-serif; + background-color: #F4D793; + color: #FFF6DA; +} + +.overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 999; +} + +/* The floating window */ +.floating-window { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + min-width: 50%; + max-width: 80%; + max-height: 90vh; + background: #fff; + border: 1px solid #ccc; + border-radius: 5px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + z-index: 1000; + box-sizing: border-box; + overflow-y: auto; + padding: 20px; +} + +.floating-window header { + font-weight: bold; + max-width: 80%; + border-bottom: 1px solid #ddd; + margin-bottom: 10px; + padding-bottom: 10px; +} + +.floating-window .close-btn { + position: absolute; + top: 5px; + right: 5px; + width: 20px; + height: 20px; + cursor: pointer; + line-height: 1; +} + +.dialog { + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + -moz-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); +} + +/* Style the dropdown container */ +.dropdown { + position: relative; + display: inline-block; +} + +/* Style the dropdown button */ +.dropbtn { + background-color: #4caf50; + color: white; + padding: 16px; + font-size: 16px; + border: none; + cursor: pointer; +} + +/* Style the dropdown content (hidden by default) */ +.dropdown-content { + display: block; + position: absolute; + border-radius: 12px; + background-color: #f9f9f9; + min-width: 160px; + box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Style the links inside the dropdown */ +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of links when hovered */ +.dropdown-content a:hover { + background-color: #f1f1f1; +} + +/* Show the dropdown menu when hovering over the dropdown button */ + +/* Change the button color when hovering */ +.dropdown:hover .dropbtn { + background-color: #3e8e41; +} +/*////////////////////////////////////////////////////////////////////////////*/ + +/* TABLE */ +/* .table { + display: table; + width: auto; + border-collapse: collapse; + max-width: 100%; + grid-gap:; + table-layout: auto; + border-radius: 12px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); +} + +.table-row { + display: table-row; +} + +.table-head, +.table-cell { + display: table-cell; + margin: 4; + padding: 1em 1.5em; + text-align: center; + border: 1px solid #e0e0e0; + border-radius: 12px; + width: auto; +} + +.table-head { + background-color: #f5f5f5; + font-weight: bold; +} + +.table-cell { + background-color: #fff; + transition: background-color 0.3s ease; +} + +.table-row:nth-child(even) .table-cell { + background-color: #fafafa; +} + +.table-row:hover .table-cell { + background-color: #f0f0f0; +} */ + +.background-div { + /* background-color: rgba(235, 67, 0, 50); */ + background: #f343048a; +} + +/* Container as a grid instead of table */ +.table { + display: grid; + /* If you know you have exactly 3 columns, specify them: */ + /* grid-template-columns: repeat(3, 1fr); */ + /* or, for a variable number of columns: */ + /* grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); */ + max-width: 100%; + margin: 20px 0; + + /* Rounded corners and shadow */ + border-radius: 12px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + + /* Optional gap between cells */ +} + +/* Each "row" is just a grouping for hover/striped logic */ +.table-row { + /* We use 'display: contents' so the child .table-head / .table-cell + items will flow into the parent grid columns. */ + display: contents; + overflow: hidden; +} + +/* Common cell styles */ +.table-head, +.table-cell { + /* You can remove margin if you prefer the cells to touch */ + display: flex; + /* margin: 4px; */ + padding: 0.25em 0.25em; + text-align: center; + font-size: 12; + text-wrap: wrap; + font-weight: 500; + /* Keep the borders for a cell-like feel */ + border: 1px solid #a0a0a0; + /* border-radius: 12px; */ + place-items: center; + + /* Smooth text wrapping in columns */ + /* width: auto; */ +} + +/* Header cell styling - Autumn accent */ +.table-head { + background-color: #f9dec9; /* light warm-orange shade */ + font-weight: bold; +} + +/* Body cell styling - Autumn base color */ +.table-cell { + overflow: hidden; + background-color: #fdf3ee; /* subtle near-white peach */ + transition: background-color 0.3s ease; +} + +/* Striped rows: every even 'table-row' uses a different shade */ +.table-row:nth-of-type(even) .table-cell { + background-color: #fce8d8; /* pale orange-brown */ +} + +/* Row hover effect - a slightly darker shade */ +.table-row:hover .table-cell { + background-color: #f8dcc2; /* warm peach on hover */ +} +/* Pointer effect for interactive cells */ +.point { + cursor: pointer; + transition: background-color 0.3s ease; +} + +.point:hover { + background-color: #e9e9e9; +} diff --git a/vvsite/src/website/client/app.rs b/vvsite/src/website/client/app.rs index ef5b3b2..ecfd389 100644 --- a/vvsite/src/website/client/app.rs +++ b/vvsite/src/website/client/app.rs @@ -11,28 +11,31 @@ pub fn App() -> impl IntoView { // injects a stylesheet into the document // id=leptos means cargo-leptos will hot-reload this stylesheet + // sets the document title // content for this welcome page <Router> - <header class="flex flex-col h-64 w-screen bg-orange-700/60"> - <h1 class="p-8 grow place-content-center text-center text-neutral-200/80 text-5xl">"My Personal Website"</h1> - <div class="w-screen flex p-1 justify-center px-30 bg-orange-700/80 gap-4"> - <a class="text-white p-4 bg-orange-700 hover:bg-orange-500" href="/">"Home"</a> - <a class="text-white p-4 bg-orange-700 hover:bg-orange-500" href="/minishell">"Minishell"</a> - <a class="text-white p-4 bg-orange-700 hover:bg-orange-500" href="/minirt">"MiniRT"</a> - <a class="text-white p-4 bg-orange-700 hover:bg-orange-500" href="/emiku">"emiku"</a> + <header class="flex flex-col h-64 w-screen" style="background-color: rgb(169, 74, 74);"> + <h1 class="p-8 grow place-content-center text-center text-5xl">"My Personal Website"</h1> + <div class="w-screen flex p-1 justify-center px-30 gap-4" style="background-color: #889E73DD"> + <a class="text-lg p-4 hover:bg-[#889E73ff] rounded-md" href="/">"Home"</a> + <a class="text-lg p-4 hover:bg-[#889E73ff] rounded-md" href="/minishell">"Minishell"</a> + <a class="text-lg p-4 hover:bg-[#889E73ff] rounded-md" href="/minirt">"MiniRT"</a> + <a class="text-lg p-4 hover:bg-[#889E73ff] rounded-md" href="/emiku">"emiku"</a> </div> </header> - <main class="flex h-screen bg-orange-200/30 w-screen max-w-[1300px] m-auto p-4"> + <main> + <div class="flex h-screen w-screen max-w-[1300px] m-auto p-4"> <Routes> <Route path="" view=crate::website::client::home::HomePage/> <Route path="/minishell" view=crate::website::client::minishell::MinishellPage/> <Route path="/emiku" view=crate::website::client::emiku::EmikuPage/> <Route path="/*any" view=NotFound/> </Routes> + </div> </main> </Router> } diff --git a/vvsite/src/website/client/pages/minishell.rs b/vvsite/src/website/client/pages/minishell.rs index c697e16..bd34c02 100644 --- a/vvsite/src/website/client/pages/minishell.rs +++ b/vvsite/src/website/client/pages/minishell.rs @@ -8,7 +8,7 @@ pub fn MinishellPage() -> impl IntoView{ <div class="flex h-[8vh] place-content-stretch"> <h2 class="text-4xl py-8">"The (mini) Shell"</h2> </div> - <iframe src="http://127.0.0.1:19001/minishell/vnc" class="place-self-center" width="800" height="600" /> + <iframe src="https://remoteserver.vps.webdock.cloud/minishell/vnc" class="place-self-center" width="800" height="600" /> </div> } }