remove broken NSFW scanning feature
This commit is contained in:
parent
214c8e70ac
commit
4f244b3bc2
16
README.md
16
README.md
|
@ -8,7 +8,7 @@ This is a HP ePrint clone that has similar functions to normal HP ePrint but it
|
||||||
- Printing PDF, any image file, text, [encoded html render .ini files](https://git.fluffy.pw/matu6968/web-hp-eprint-clone/wiki/Encoded-.ini-files-that-prints-out-a-url), MS Office documents (gets converted to a .pdf file first then print out) and HTML files
|
- Printing PDF, any image file, text, [encoded html render .ini files](https://git.fluffy.pw/matu6968/web-hp-eprint-clone/wiki/Encoded-.ini-files-that-prints-out-a-url), MS Office documents (gets converted to a .pdf file first then print out) and HTML files
|
||||||
- custom print quality and page index options
|
- custom print quality and page index options
|
||||||
- REST API
|
- REST API
|
||||||
- NSFW scanning (requires DeepAI PRO account and API key)
|
- ~~NSFW scanning (requires DeepAI PRO account and API key)~~ feature broken and removed
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
|
@ -46,7 +46,6 @@ In the .env file this is the only thing you can set
|
||||||
```
|
```
|
||||||
PORT=8080
|
PORT=8080
|
||||||
LOG=log # enables file logging (aka copies file to user home directory under the folder imagelog so make a folder first in the home root if you wish to enable it), to disable it replace it with nolog
|
LOG=log # enables file logging (aka copies file to user home directory under the folder imagelog so make a folder first in the home root if you wish to enable it), to disable it replace it with nolog
|
||||||
NSFWCHECK=true # Requires DeepAI API key and DeepAI PRO subscription
|
|
||||||
```
|
```
|
||||||
## Autostart with systemd or OpenRC
|
## Autostart with systemd or OpenRC
|
||||||
|
|
||||||
|
@ -87,16 +86,6 @@ sudo cp /path/to/cloned/repo/init-scripts/eprint-clone-web /etc/init.d/
|
||||||
sudo rc-update add eprint-clone-web
|
sudo rc-update add eprint-clone-web
|
||||||
sudo rc-service eprint-clone-web start
|
sudo rc-service eprint-clone-web start
|
||||||
```
|
```
|
||||||
## DeepAI NSFW scanning
|
|
||||||
|
|
||||||
If you would like to open the service up to public, consider enabling NSFW scanning to prevent naughty content from entering your printer.
|
|
||||||
To enable it, first make a account on [DeepAI](https://deepai.org), then sign up for a DeepAI PRO subscription to use the API (5$ per month), lastly grab the API from your user dashboard
|
|
||||||
`User icon in the top right corner --> View Profile --> API Keys`
|
|
||||||
and put it in your eprintcloned file
|
|
||||||
|
|
||||||
```
|
|
||||||
deepaiapikey=00000000-0000-0000-0000-000000000000 # replace zeros with your actual API key
|
|
||||||
```
|
|
||||||
|
|
||||||
### For this to even work
|
### For this to even work
|
||||||
You need a linux distro which has the modern equifelent of the lpr program. To check if you have the newer version, type `man lpr` and look at the program description, if it says `lpr - print files` (present on recent Ubuntu versions and rolling release distros like Arch Linux) then you are good to go otherwaise if it says `lpr - off line print` (present on Debian and older Ubuntu versions) then this won't work as the commands for the older version are different and this targets the newer version of the program.
|
You need a linux distro which has the modern equifelent of the lpr program. To check if you have the newer version, type `man lpr` and look at the program description, if it says `lpr - print files` (present on recent Ubuntu versions and rolling release distros like Arch Linux) then you are good to go otherwaise if it says `lpr - off line print` (present on Debian and older Ubuntu versions) then this won't work as the commands for the older version are different and this targets the newer version of the program.
|
||||||
|
@ -107,8 +96,7 @@ and put the eprintcloned script (ePrint clone daemon aka it handles the printing
|
||||||
|
|
||||||
# !IMPORTANT!
|
# !IMPORTANT!
|
||||||
|
|
||||||
You need to modify the script to include your printer name (it is at the top and is called printer and not the one used in the included configuration in the repository) and to include your
|
You need to modify the script to include your printer name (it is at the top and is called printer and not the one used in the included configuration in the repository)
|
||||||
DeepAI API key in the eprintcloned script.
|
|
||||||
|
|
||||||
for example change it from
|
for example change it from
|
||||||
```
|
```
|
||||||
|
|
82
eprintcloned
82
eprintcloned
|
@ -52,11 +52,10 @@ else
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printer=examplename # replace this with your actual printer name before putting it into /usr/bin
|
printer=Deskjet-2600 # replace this with your actual printer name before putting it into /usr/bin
|
||||||
imagelogmsg="Server hoster decided to enable file logging, if you don't wish your file to be logged, ask the server owner to delete your sent file or if you are the server hoster set LOG=nolog in .env file" # specify a custom logging of files message
|
imagelogmsg="Server hoster decided to enable file logging, if you don't wish your file to be logged, ask the server owner to delete your sent file or if you are the server hoster set LOG=nolog in .env file" # specify a custom logging of files message
|
||||||
nsfwscantosmsg="Server hoster enabled NSFW scanning, by sending any images to this instance, you agree to the DeepAI TOS at https://deepai.org/terms-of-service/terms-of-service to scan them." # specify a custom logging of NSFW message
|
nsfwscantosmsg="Server hoster enabled NSFW scanning, by sending any images to this instance, you agree to the DeepAI TOS at https://deepai.org/terms-of-service/terms-of-service to scan them." # specify a custom logging of NSFW message
|
||||||
nsfwscantrue="The following image you uploaded is not safe for work. Due to Cloudflare TOS, you cannot send content promoting NSFW"
|
nsfwscantrue="The following image you uploaded is not safe for work. Due to Cloudflare TOS, you cannot send content promoting NSFW"
|
||||||
deepaiapikey=00000000-0000-0000-0000-000000000000 # replace zeros with your actual API key
|
|
||||||
# check if quality is specified, it it isn't then set the default quality
|
# check if quality is specified, it it isn't then set the default quality
|
||||||
if [[ " $3 " =~ "" ]]; then
|
if [[ " $3 " =~ "" ]]; then
|
||||||
quality="4"
|
quality="4"
|
||||||
|
@ -77,15 +76,6 @@ else
|
||||||
pagerange="$4"
|
pagerange="$4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If the user specified for NSFW scanning (.env configuration flag: NSFWSCAN=true) then check if there is a argument passed to scan for it
|
|
||||||
# To use the DeepAI NSFW scanning service, provide a API key under the variable deepaiapikey (leave it blank, and specify NSFWSCAN=false in .env if you are not using it)
|
|
||||||
if [[ " $@ " =~ "nsfwscan" ]]; then
|
|
||||||
echo $nsfwscantosmsg
|
|
||||||
nsfwscan=yes
|
|
||||||
else
|
|
||||||
echo "NSFW scanning is off"
|
|
||||||
nsfwscan=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Loop through each file passed as an argument
|
# Loop through each file passed as an argument
|
||||||
for file in "$1"; do
|
for file in "$1"; do
|
||||||
|
@ -97,80 +87,10 @@ for file in "$1"; do
|
||||||
if [[ $2 == log ]]; then
|
if [[ $2 == log ]]; then
|
||||||
echo $imagelogmsg
|
echo $imagelogmsg
|
||||||
cp "$1" $HOME/imagelog/
|
cp "$1" $HOME/imagelog/
|
||||||
if [ $nsfwscan = "yes" ]
|
|
||||||
then
|
|
||||||
echo "Scanning image for NSFW"
|
|
||||||
API_URL="https://api.deepai.org/api/nsfw-detector"
|
|
||||||
for image in $1; do
|
|
||||||
# Send image to the API and capture both the response and the HTTP status code and if there is another instance running, wait until it closes
|
|
||||||
wait_for_curl_to_finish
|
|
||||||
response=$(curl -s -o /tmp/response.json -w "%{http_code}" -F "image=@$image" -H "api-key: $deepaiapikey" $API_URL)
|
|
||||||
status_code=$(tail -n1 <<< "$response")
|
|
||||||
|
|
||||||
# Check for HTTP errors (non-200 status code)
|
|
||||||
if [ "$status_code" -ne 200 ]; then
|
|
||||||
echo "Failed to analyze $image: Server returned status code $status_code."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Read the actual JSON response
|
|
||||||
json_response=$(head -n -1 /tmp/response.json)
|
|
||||||
|
|
||||||
# Check if the response contains "is_nsfw" field
|
|
||||||
if echo "$json_response" | grep -q '"is_nsfw": true'; then
|
|
||||||
echo $nsfwscantrue
|
|
||||||
exit 1
|
|
||||||
# If NSFW is not detected then print the image
|
|
||||||
elif echo "$json_response" | grep -q '"is_nsfw": false'; then
|
|
||||||
echo "Image is safe, printing."
|
|
||||||
# Check for invalid API key
|
|
||||||
elif echo "$json_response" | grep -q '"status": "Please pass a valid Api-Key in a HTTP header called \"Api-Key\"'; then
|
|
||||||
echo "API key is missing or invalid, skipping NSFW check."
|
|
||||||
else
|
|
||||||
# Handle unexpected JSON structure
|
|
||||||
echo "Unexpected response format for $image: $json_response, skipping NSFW check"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
echo "Printing image/document"
|
echo "Printing image/document"
|
||||||
rm /tmp/response.json
|
rm /tmp/response.json
|
||||||
lpr -r -o portrait -o media=A4 -o fit-to-page -o print-quality=$quality $pagerange "$1" -P $printer && exit 0 # if you are using a different printer that requires different commands to print, change this part of the code.
|
lpr -r -o portrait -o media=A4 -o fit-to-page -o print-quality=$quality $pagerange "$1" -P $printer && exit 0 # if you are using a different printer that requires different commands to print, change this part of the code.
|
||||||
else
|
else
|
||||||
if [ $nsfwscan == "yes" ]
|
|
||||||
then
|
|
||||||
echo "Scanning image for NSFW"
|
|
||||||
API_URL="https://api.deepai.org/api/nsfw-detector"
|
|
||||||
for image in $1; do
|
|
||||||
# Send image to the API and capture both the response and the HTTP status code and if there is another instance running, wait until it closes
|
|
||||||
wait_for_curl_to_finish
|
|
||||||
response=$(curl -s -o /tmp/response.json -w "%{http_code}" -F "image=@$image" -H "api-key: $deepaiapikey" $API_URL)
|
|
||||||
status_code=$(tail -n1 <<< "$response")
|
|
||||||
|
|
||||||
# Check for HTTP errors (non-200 status code)
|
|
||||||
if [ "$status_code" -ne 200 ]; then
|
|
||||||
echo "Failed to analyze $image: Server returned status code $status_code."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Read the actual JSON response
|
|
||||||
json_response=$(head -n -1 /tmp/response.json)
|
|
||||||
|
|
||||||
# Check if the response contains "is_nsfw" field
|
|
||||||
if echo "$json_response" | grep -q '"is_nsfw": true'; then
|
|
||||||
echo $nsfwscantrue
|
|
||||||
exit 1
|
|
||||||
# If NSFW is not detected then print the image
|
|
||||||
elif echo "$json_response" | grep -q '"is_nsfw": false'; then
|
|
||||||
echo "Image is safe, printing."
|
|
||||||
# Check for invalid API key
|
|
||||||
elif echo "$json_response" | grep -q '"status": "Please pass a valid Api-Key in a HTTP header called \"Api-Key\"'; then
|
|
||||||
echo "API key is missing or invalid, skipping NSFW check."
|
|
||||||
else
|
|
||||||
# Handle unexpected JSON structure
|
|
||||||
echo "Unexpected response format for $image: $json_response, skipping NSFW check"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
echo "Printing image/document"
|
echo "Printing image/document"
|
||||||
rm /tmp/repsonse.json
|
rm /tmp/repsonse.json
|
||||||
lpr -r -o portrait -o media=A4 -o fit-to-page -o print-quality=$quality $pagerange "$1" -P $printer && exit 0 # if you are using a different printer that requires different commands to print, change this part of the code.
|
lpr -r -o portrait -o media=A4 -o fit-to-page -o print-quality=$quality $pagerange "$1" -P $printer && exit 0 # if you are using a different printer that requires different commands to print, change this part of the code.
|
||||||
|
|
11
main.go
11
main.go
|
@ -89,6 +89,7 @@ func handleUpload(w http.ResponseWriter, r *http.Request) {
|
||||||
printconfig := r.FormValue("printconfig")
|
printconfig := r.FormValue("printconfig")
|
||||||
if printconfig == "" {
|
if printconfig == "" {
|
||||||
fmt.Printf("Warning: User did not specify page range on sent request\n")
|
fmt.Printf("Warning: User did not specify page range on sent request\n")
|
||||||
|
printconfig = "0"
|
||||||
} else {
|
} else {
|
||||||
re := regexp.MustCompile(`^[0-9]+(-[0-9]+)*$`)
|
re := regexp.MustCompile(`^[0-9]+(-[0-9]+)*$`)
|
||||||
if !re.MatchString(printconfig) {
|
if !re.MatchString(printconfig) {
|
||||||
|
@ -129,6 +130,16 @@ func handleUpload(w http.ResponseWriter, r *http.Request) {
|
||||||
printingcmdPath := filepath.Join("/", "usr", "bin", "eprintcloned")
|
printingcmdPath := filepath.Join("/", "usr", "bin", "eprintcloned")
|
||||||
filelog := os.Getenv("LOG")
|
filelog := os.Getenv("LOG")
|
||||||
nsfwcheck := os.Getenv("NSFWCHECK")
|
nsfwcheck := os.Getenv("NSFWCHECK")
|
||||||
|
if nsfwcheck == "true" {
|
||||||
|
nsfwcheck = "nsfwcheck"
|
||||||
|
} else
|
||||||
|
if nsfwcheck == "false" {
|
||||||
|
nsfwcheck = ""
|
||||||
|
} else
|
||||||
|
if nsfwcheck == "" {
|
||||||
|
nsfwcheck = ""
|
||||||
|
}
|
||||||
|
fmt.Printf(printingcmdPath, tempFile.Name(), filelog, printres, printconfig, nsfwcheck)
|
||||||
cmd := exec.Command(printingcmdPath, tempFile.Name(), filelog, printres, printconfig, nsfwcheck)
|
cmd := exec.Command(printingcmdPath, tempFile.Name(), filelog, printres, printconfig, nsfwcheck)
|
||||||
|
|
||||||
output, err := cmd.CombinedOutput()
|
output, err := cmd.CombinedOutput()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user