aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@cepl.eu>2024-08-01 23:41:04 +0200
committerMatěj Cepl <mcepl@cepl.eu>2024-08-15 03:48:43 +0200
commit49915340da02da7d74777225aa1d2e2bb31ac4b3 (patch)
tree784e73a948e3fe93c1ab4fbba5f2c4a616db64bb
parent89ad13eff45e7e9a21715ff1bba20327efeeef45 (diff)
downloadtmp-49915340da02da7d74777225aa1d2e2bb31ac4b3.tar.gz
chore: add README.md and LICENSE
Also, TODO.md with review comments from https://codepal.ai/code-explainer
-rw-r--r--LICENSE22
-rw-r--r--README.md20
-rw-r--r--TODO.md (renamed from explanation.md)50
-rw-r--r--tmp.go2
4 files changed, 43 insertions, 51 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..941133c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright © 2024 Matěj Cepl, mcepl at cepl dot eu
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the “Software”), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..bfc5376
--- /dev/null
+++ b/README.md
@@ -0,0 +1,20 @@
+# tmp
+
+Simple utility to store files given as its argument(s) to tmp
+files on various websites.
+
+Run as:
+
+```sh
+ $ tmp argument.ext
+```
+
+and the program prints on the output URL of the uploaded file(s).
+
+----
+
+All issues, questions, complaints, or (even better!) patches
+should be send via email to
+[~mcepl/devel@lists.sr.ht](mailto:~mcepl/devel@lists.sr.ht) email
+list (for patches use [git send-email](https://git-send-email.io/)).
+
diff --git a/explanation.md b/TODO.md
index cc5f0da..49244c4 100644
--- a/explanation.md
+++ b/TODO.md
@@ -1,30 +1,3 @@
-### Overall Explanation of the Code
-The provided Go code is a command-line utility designed to check the
-size of files passed as arguments and determine whether they should be
-compressed based on their size and file extension. The program utilizes
-the `gzip` command to compress files larger than 1 MB that do not have
-certain compressed file extensions. It also contains a configuration map
-(`URL_VARIANTS`) that allows the user to define different base URLs for
-various sections, although this part of the code is not actively used in
-the main logic.
-
-### Code Structure Overview
-- **Imports**: The code imports necessary packages for logging,
- executing commands, handling file paths, and manipulating strings.
-- **Constants and Variables**:
- - `COMPRESSED_EXTENSIONS`: A slice of strings representing file
- extensions that are already considered compressed.
- - `URL_VARIANTS`: A map that holds different configurations for
- various sections, including base URLs and target URLs.
-- **Main Function**:
- - Retrieves the command name and checks if it corresponds to any entry
- in `URL_VARIANTS`.
- - Validates that at least one file argument is provided.
- - Iterates over each file argument, checks its size and extension, and
- decides whether to compress it.
-- **Helper Function**:
- - `contains`: Checks if a given item exists within a slice of strings.
-
### Possible Bugs
1. **Missing URL Variants Handling**: The code retrieves the
configuration for the command name but does not handle cases where the
@@ -47,12 +20,6 @@ the main logic.
4. **Command-Line Flags**: Consider using a command-line flag library to
improve argument parsing and provide help messages.
-### External Dependencies
-- The code relies on the `gzip` command-line utility for file
- compression. It also uses standard Go libraries (`log`, `os`,
- `os/exec`, `path/filepath`, `strconv`, and `strings`) which are part
- of the Go standard library and do not require external installation.
-
### Potential Security Concerns
1. **Command Injection**: The use of `exec.Command` with user-provided
input could lead to command injection vulnerabilities if not properly
@@ -67,19 +34,11 @@ the main logic.
descriptors) if not properly managed, especially if the compression
command spawns many subprocesses.
-In summary, while the code serves its purpose of checking file sizes and
-compressing them as needed, it could benefit from improved error
-handling, validation, and security measures to enhance its robustness
-and usability.
-
### Error Handling Analysis
1. **Use of `log.Fatal`**: The code employs `log.Fatal(err)` to handle
errors, which logs the error message and exits the program. While this
is effective for critical failures, it does not allow for graceful
recovery or error reporting to the user.
-2. **Limited Error Context**: The error messages provided do not give
- detailed context about where the error occurred, which can complicate
- debugging.
3. **Exit on Missing Arguments**: The program exits with `os.Exit(1)` if
no arguments are provided, which is a straightforward approach but could
be improved by providing a user-friendly message indicating the expected
@@ -115,17 +74,8 @@ and usability.
(argument parsing, file processing, logging), which could be broken down
into smaller, more focused functions to improve readability and
maintainability.
-3. **Use of Constants**: The use of constants for file extensions is
- good practice, but consider using a more descriptive name for
- `COMPRESSED_EXTENSIONS` to clarify its purpose.
### Collaboration and Readability
-1. **Code Comments**: The code includes some comments, but they could be
- expanded to explain the purpose of functions and complex logic, making
- it easier for collaborators to understand.
-2. **Descriptive Variable Names**: Variable names like `cmdname` and
- `processedFile` are reasonably descriptive, but further clarity could be
- added by using more context-specific names.
3. **Error Messages**: Providing more informative error messages would
enhance collaboration, as other developers would have a clearer
understanding of issues that arise.
diff --git a/tmp.go b/tmp.go
index 4920075..e57e199 100644
--- a/tmp.go
+++ b/tmp.go
@@ -2,7 +2,7 @@ package main
import (
"fmt"
- "log"
+ "log" // TODO: eventually change to slog and manage levels
"net/url"
"os"
"os/exec"