aboutsummaryrefslogtreecommitdiff
path: root/internal/memfs_wui.go
AgeCommit message (Collapse)Author
2026-02-08internal: include the robots.txt from _wui/doc/ and _wui/ directoryShulhan
The robots.txt in _wui/doc/ is for awwan.org, while in _wui/ is for tour.awwan.org. This remove the unneeded robots.txt from _tour/ directory that we previously assume for tour.
2026-02-03_ops/awwan-tour: fix build with latest mkosiShulhan
2026-02-03_wui/doc: use default ciigo styleShulhan
The default ciigo style provides consistent style with kilabit.info and have support for light and dark themes.
2026-02-03all: add robots.txt to main and tour sitesShulhan
2025-01-12go.mod: update all dependenciesShulhan
This changes remove the replace module and back to upstream. Maintaining fork is not easy and take a lot of time. As we seen in crypto fork, we are 10 minor version behind upstream.
2024-04-06all: comply with linter recommendationsShulhan
2024-03-22_wui: use shared static assets from Cloud StorageShulhan
The idea is to minimize noise in the logs that does not related to page access and minimize binary size.
2024-03-22all: replace module "share" with "pakakeh.go"Shulhan
The "share" project has been moved to SourceHut with new name "pakakeh.go".
2024-02-08Release awwan v0.12.0 (2024-02-08)v0.12.0Shulhan
=== Breaking changes * all: refactoring "env-set" arguments Previously, the "env-set" take the file argument as the last argument and optional. This changes move the file argument to the first argument so the bash completion can detect and print the completion for list of keys. While at it, fix handling key with quoted in EnvSet and EnvGet. * all: refactoring env-get command This changes the order of arguments of env-get command to pass the directory first before the key. The reason is to simplify auto-completion later from the command line. === New features * all: add command env-keys The "env-keys" command print list of environment variables under a directory. This command is internal, not documented, used by bash completion. * all: add bash completion script Using awwan from CLI now can automatically complete the arguments based on the command and current parameter number.
2024-01-16all: refactoring "env-set" argumentsShulhan
Previously, the "env-set" take the file argument as the last argument and optional. This changes move the file argument to the first argument so the bash completion can detect and print the completion for list of keys. While at it, fix handling key with quoted in EnvSet and EnvGet. Closes: https://todo.sr.ht/~shulhan/awwan/10
2024-01-16all: refactoring env-get commandShulhan
This changes the order of arguments of env-get command to pass the directory first before the key. The reason is to simplify auto-completion later from the command line.
2024-01-06internal: update memfs for www-awwan and wuiShulhan
2023-12-22_wui: implement button to stop executionShulhan
The Stop button call "DELETE /awwan/api/execute?id=" with id is the previous execution ID. Implements: https://todo.sr.ht/~shulhan/awwan/9
2023-12-21all: setup tour.awwan.orgShulhan
Now that the _tour is ready we can deploy it to tour.awwan.org. The website is updated to include link to tour domain. Implements: https://todo.sr.ht/~shulhan/awwan/4
2023-12-16Release awwan v0.10.0 (2023-12-16)v0.10.0Shulhan
=== New features internal/cmd: add flag "address" for command www-awwan:: This is to allow using different address when running on local, without conflict with "serve-www" task in Makefile. all: implement command "env-get" to get value from environment files:: The env-get command get the value from environment files. Syntax, <key> [dir] The "key" argument define the key where value is stored in environment using "section:sub:name" format. The "dir" argument is optional, its define the directory where environment files will be loaded, recursively, from BaseDir to dir. If its empty default to the current directory. all: implement command to set environment value with "env-set":: The env-set command set the value of environment file. Syntax, <key> <value> <file> The "key" argument define the key to be set using "section:sub:name" format. The "value" argument define the value key. The "file" argument define path to environment file. For example, to set the value for "name" under section "host" to "myhost" in file "awwan.env" run ---- $ awwan env-set host::name myhost awwan.env ---- To set the value for key "pass" under section "user" subsection "database" to value "s3cret" in file "awwan.env" run ---- $ awwan env-set user:database:pass s3cret awwan.env ---- _wui: implement Encrypt:: In the right side of Save button we now have a button Encrypt that allow user to Encrypt opened file. This require the workspace has been setup with private key (.ssh/awwan.key) and pass file (.ssh/awwan.pass). _wui: implement Decrypt:: In the right side of Save button we now have a button Decrypt that allow user to Decrypt file with ".vault" extension only. This require the workspace has been setup with private key (.ssh/awwan.key) and pass file (.ssh/awwan.pass). === Breaking changes all: make the magic line "#local" works on "local" command too:: In case we have a script that manage local host and remote server, calling "play" on "#local" lines only always open the connection to remote server. To minimize opening unused connections, let the "#local" command works on both commands. Its up to user which part of lines that they want to execute on remote or local. _wui: use CTRL+Enter to trigger save instead of CTRL+s on editor:: Using CTRL+s sometimes cause pressing s only trigger the save, due to fast typing (or keyboard error?). === Bug fixes all: close the SSH connection once Play finished:: Previously, we used to run awwan as CLI so each connection is open and closed once the command completed. Since we now use awwan WUI frequently, any command that execute Play does not close the session immediately once finished. This cause many connections open in remote server. This changes close the SSH connections immediately once the Play command finished. all: fix memfs excludes regex:: Previously, the regex does not contains "^" and "$" which makes file like "multi-user.target.wants" considered as ".tar" file and being excluded. _wui: update editor component:: Changes, - fix paste that always end with newline - fix editor content that got wrapped due to width - update layout without using float - replace execCommand with Selection all: fix excludes on HTTP server related to .git:: The HTTP server should excludes ".git" directory only, not the other files, like ".gitignore" or ".gitconfig". all: always load SSH config when running Play:: In case awwan run with "serve" and we modify the ".ssh/config", the changes does not detected by awwan because we only read ".ssh/config" once we Awwan instance created. This changes fix this issue by always loading SSH config every time the Play method executed so the user CLI and WUI has the same experiences. === Enhancements all: reduce the response on HTTP endpoint on GET fs:: Previously, the HTTP endpoint for "GET /awwan/api/fs" return the content of files when the requested node is a directory. This is cause unnecessary load because when requesting directory we only need list of file names not the content. This changes reduce the response by returning only list of node child without its content, which require update on share module on [Node.JSON]. _wui: use the output for displaying notification:: Previously, we use a quick "pop-up" to display notification for each information or error from WUI. Sometimes this is annoying, it overlap the buttons, make it hard to Save and Encrypt at the same time. In this changes we move the nofication message to be displayed in the output, same with output of execution. all: use the same date format between log and mlog package:: In this way, the date-time output from log.Xxx and mlog.Xxx are consistent. all: remove duplicate errors logged on Copy, Put, and SudoCopy:: While at it, replace all call of [log.Printf] with [Request.mlog] so error both written to stderr and to [Request.Output]. _wui: do not clear output when executing another command:: This allow user to see the output of previous command without opening the log file. _wui: store and load the vfs width in local storage:: This is allow user to resize vfs width in one window and when new window is opened the vfs width is restored with the same size. _wui: disable button "Local" and "Play" when clicked:: Once the execution completed, both buttons will be enabled again. While at it, add an icon to show the execution status. _wui: rename "Remote" to "Play":: This is to make command between the CLI and WUI consistent. all: refactoring HTTP endpoint for Execute:: Previously, the Execute endpoint wait for command execution to finish. In case the command takes longer than proxy or server write timeout, it will return with a timeout error to client. In this changes, we generate an execution ID for each request and return it immediately. The new API "GET /awwan/api/execute/tail" implement Server-sent events, accept the execution ID from "/awwan/api/execute". Once called with valid ID, it will streaming the command output to client. By using this new API, the WUI can receive the output of command immediately without waiting for all commands to be completed. _wui: add vertical resizer, to resize between VFS and editor:: _wui: allow all content type but decrease max file size to 1 MB:: Previously, only file with type json, message, octet-stream, script, text, or XML that can be opened by editor. In this changes we allow all files as long as the size is less than 1MB. _wui: update vfs component:: This changes allow user browse the crumb in path and item in the list using tab key. While at it, fix the layout to make VFS and editor aligned. _wui: implement file filter:: This changes move the text input for creating new file above the list. Filling the text field will filter the list based on the node name using regular expression. Another changes is for node with type directory now suffixed with "/".
2023-12-16_wui/doc: change the HTML element "dt" to have bold fontShulhan
This is for CHANGELOG so the subject of changes highlighted make it different with the changes description.
2023-12-14go.mod: replace esbuild with our own fork to fix rebuildShulhan
See https://github.com/evanw/esbuild/pull/3534
2023-12-08_wui: update wui sub moduleShulhan
Changes, * Reduce the left padding on the editor so space and padding not to similar * Set the caret color to red in editor * Prevent "Enter" without pressing Control trigger the Save
2023-12-08_wui/doc: detach the index from READMEShulhan
The links in the index should be relative, so we can test and deploy it anywhere. Also the README contains link to website which is redundant if rendered on website itself.
2023-12-06_wui: use the output for displaying notificationShulhan
Previously, we use a quick "pop-up" to display notification for each information or error from WUI. Sometimes this is annoying, it overlap the buttons, make it hard to Save and Encrypt at the same time. In this changes we move the nofication message to be displayed in the output, same with output of execution.
2023-12-04all: write the output as is when sending with server-sent eventsShulhan
Previously, if the command output is "line1\n\nline2\n", the web output it as line1 line2 it should be line1 line2 This fix the empty line not displayed in wui output.
2023-12-04_wui: do not clear output when executing another commandShulhan
This allow user to see the output of previous command without opening the log file.
2023-12-01_wui: store and load the vfs width in local storageShulhan
This is allow user to resize vfs width in one window and when new window is opened the vfs width is restored with the same size. Implements: https://todo.sr.ht/~shulhan/awwan/6
2023-12-01_wui: disable button "Local" and "Play" when clickedShulhan
Once the execution completed, both buttons will be enabled again. While at it, add an icon to show the execution status.
2023-12-01_wui: rename "Remote" to "Play"Shulhan
This is to make command between the CLI and WUI consistent.
2023-12-01all: handle reconnecting when streaming executionShulhan
In "/awwan/api/execute/tail" SSE endpoint, in order for client to be able to reconnect and start streaming from the last know output, we need to send the ID for each message that we send. The ID is the index of Output in slice. If client does not send Last-Event-ID, we send all Output from beginning, otherwise, we send only message start from index in Last-Event-ID.
2023-12-01all: fix link to Repository in the READMEShulhan
2023-12-01all: implement HTTP API to fetch execution output by IDShulhan
The new API is "GET /awwan/api/execute/tail" that implement Server-sent events, not a normal GET request. Its accept the query parameter "id" with value is the execution ID from "/awwan/api/execute". Once called with valid ID, it will streaming the command output to client. By using this new API, the WUI can receive the output of command immediately without waiting for all commands to be completed. Implements: https://todo.sr.ht/~shulhan/awwan/5 Signed-off-by: Shulhan <ms@kilabit.info>
2023-12-01all: refactoring HTTP endpoint for ExecuteShulhan
Previously, the Execute endpoint wait for command execution to finish. In case the command takes longer than proxy or server write timeout, it will return with an timeout error to client. In this changes, we generate an execution ID for each request and return it immediately. The next commit will implement HTTP endpoint to fetch the latest status and/or output by execution ID. References: https://todo.sr.ht/~shulhan/awwan/5
2023-11-22cmd/www-awwan: replace download links by requesting to server directlyShulhan
The contabostorage have an issues with cache. The file that we upload today, when downloaded by user may not the latest one. This changes require update on share module to use the latest [memfs.MemFS#Merge] method.
2023-11-21_wui: update editor componentShulhan
Changes, * fix paste that always end with newline * fix editor content that got wrapped due to width * update layout without using float * replace execCommand with Selection
2023-11-20_wui: refactoring the layout once and for allShulhan
Last weeked, I spent one day to fix the resizer to works with flex layout, and its hard and not optimal.
2023-11-20all: do not changes the Script path in the response of HTTP ExecuteShulhan
Previously, the ExecRequest from HTTP Execute endpoint changes the Script value to the absolute script path in the system. This changes fix this issue to minimize inconsistency between request and response.
2023-11-19_wui: various improvementsShulhan
Changes, * Add fixed height on output wrapper * Add space between Encrypt and Decrypt button * Add padding in Execute actions component * Change the wording of "Execute" to "Execute line"
2023-11-19_wui: wrap path if its overflow instead of using scrollShulhan
If we dive into many sub directories, the path in VFS may have horizontal scroll in it. To minimize scroll, make the crumbs wrapped to bottom.
2023-11-19_wui: fix build using tscShulhan
2023-11-19_wui: fix editor content grow outside browser widthShulhan
When file opened and the content length is greater than browser length, the editor width also growth based on the content. This changes fix this issue by using flex-basis (similar to setting width) and "overflow:auto" on the class awwan-content.
2023-11-19all: update share moduleShulhan
The latest share module, in lib/crypto, handle loading SSH private key with passphrase interactively using a program defined in SSH_ASKPASS. This allow "awwan serve" that run without stdin, for example under systemd service, works seamlessly by setting environment variable SSH_ASKPASS to /usr/lib/ssh/x11-ssh-askpass. Implements: https://todo.sr.ht/~shulhan/awwan/3 Signed-off-by: Shulhan <ms@kilabit.info>
2023-11-19all: return 403 Forbidden when requesting awwan.key and awwan.passShulhan
When user run "awwan serve", using web-user interface, any request to fetch the content of "awwan.key" and "awwan.pass" should not allowed for security reason, in case user want to serve awwan with others.
2023-11-18_wui/doc: add missing documentation for env-get in awwan manualShulhan
2023-11-17_wui: add vertical resizer, to resize between VFS and editorShulhan
While at it, refactoring the layout using flex.
2023-11-17all: move the file argument in env-set to the last argumentShulhan
The "file" argument is optional, its define path to environment file. If its empty it will be set to "awwan.env" in the current directory.
2023-11-17_wui: increase max file size to 1MiBShulhan
This is to allow viewing log from editor.
2023-11-17all: implement command "env-get" to get value from environment filesShulhan
The env-get command get the value from environment files. Syntax, ---- <key> [dir] ---- The "key" argument define the key where value is stored in environment using "section:sub:name" format. The "dir" argument is optional, its define the directory where environment files will be loaded, recursively, from BaseDir to dir. If its empty default to the current directory.
2023-11-17all: implement command to set environment value with "env-set"Shulhan
The env-set command set the value of environment file. Syntax, <file> <key> <value> The "file" argument define path to environment file. The "key" argument define the key to be set using "section:sub:name" format. The "value" argument define the value key. For example, to set the value for "name" under section "host" to "myhost" in file "awwan.env" run $ awwan env-set awwan.env host::name myhost To set the value for key "pass" under section "user" subsection "database" to value "s3cret" in file "awwan.env" run $ awwan env-set awwan.env user:database:pass s3cret
2023-11-16all: always load SSH config when running PlayShulhan
In case awwan run with "serve" and we modify the ".ssh/config", the changes does not detected by awwan because we only read ".ssh/config" once we Awwan instance created. This changes fix this issue by always loading SSH config everytime the Play method executed so the user CLI and WUI has the same experiences.
2023-11-16_wui: allow all content type but decrease max file size to 100KBShulhan
Previously, only file with type json, message, octet-stream, script, text, or xml that can be opened by editor. In this changes we allow all files as long as the size is less than 100KB.
2023-11-16_wui: update wui/vfs to fix crumb overflowShulhan
In case the directory name is too long, the name can span multi line, break automatically by browser and overlap with previous crumbs.
2023-11-16_wui: implement DecryptShulhan
In the right side of Save button we now have a button Decrypt that allow user to Decrypt file with ".vault" extension only. This require the workspace has been setup with private key (.ssh/awwan.key) and pass file (.ssh/awwan.pass).
2023-11-16all: implement HTTP API to decrypt fileShulhan
Similar to the CLI, the HTTP API accept the path of vault file and return the path to decrypted file.