From 634d1dd9ecf538e9fbbfd4ab4d23ac5cd5d30848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=86=E3=82=AF=E3=83=8B=E3=82=AB=E3=83=AB=E8=AB=8F?= =?UTF-8?q?=E8=A8=AA=E5=AD=90?= Date: Mon, 20 Feb 2023 12:19:31 +0900 Subject: [PATCH] =?UTF-8?q?FreeBSD=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.json | 3 + install.sh | 71 ++++++++++++++----- main.go | 42 +++++++++-- srv/freebsd/usr/local/etc/rc.d/urloli | 42 +++++++++++ .../{urloli.conf => urloli-clear.conf} | 0 .../etc/nginx/sites-enabled/urloli-dark.conf | 13 ++++ view/submitted.html | 2 +- 7 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 config.json mode change 100644 => 100755 install.sh create mode 100755 srv/freebsd/usr/local/etc/rc.d/urloli rename srv/linux/etc/nginx/sites-enabled/{urloli.conf => urloli-clear.conf} (100%) create mode 100644 srv/linux/etc/nginx/sites-enabled/urloli-dark.conf diff --git a/config.json b/config.json new file mode 100644 index 0000000..2da4a92 --- /dev/null +++ b/config.json @@ -0,0 +1,3 @@ +{ + "domain": "https://urlo.li" +} diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index b11cb42..f227f81 --- a/install.sh +++ b/install.sh @@ -1,16 +1,30 @@ #!/bin/sh -su -mkdir /etc/urloli -cp links.sample.json /etc/urloli/links.json - -go build - -mv urloli /usr/local/bin -chown -R urloli:urloli /usr/local/bin/urloli -chown -R urloli:urloli /etc/urloli - unamestr=$(uname) +domain="$1" + +case "$domain" in + *.i2p) network="i2p" ;; + *.onion) network="tor" ;; + *) network="www" ;; +esac + +if [ "$unamestr" = 'FreeBSD' ]; then + mkdir /usr/local/etc/urloli + cp -i links.sample.json /usr/local/etc/urloli/links.json + cp -i config.json /usr/local/etc/urloli/config.json + sed -i .orig "s/urlo\.li/$domain/g" /usr/local/etc/urloli/config.json + rm -rf /usr/local/etc/urloli/config.json.orig + go build -buildvcs=false +else + mkdir /etc/urloli + cp -i links.sample.json /etc/urloli/links.json + cp -i config.json /etc/urloli/config.json + sed -i "s/urlo\.li/$domain/g" /etc/urloli/config.json + go build +fi + +mv -i urloli /usr/local/bin if [ "$unamestr" = 'Linux' ]; then platform=$(cat /etc/os-release | grep "^ID=") @@ -21,19 +35,44 @@ if [ "$unamestr" = 'Linux' ]; then elif [ "$platform" = "ID=centos" -o "$platform" = "ID=rhel" ]; then dnf install certbot fi - certbot certonly --webroot urlo.li www.urlo.li - cp srv/linux/etc/nginx/sites-enabled/urloli.conf /etc/nginx/sites-enabled - cp srv/linux/etc/init.d/urloli /etc/init.d + if [ "$network" = 'www' ]; then + certbot certonly --webroot -d $domain -d www.$domain + cp -i srv/linux/etc/nginx/sites-enabled/urloli-clear.conf /etc/nginx/sites-enabled/urloli.conf + else + cp -i srv/linux/etc/nginx/sites-enabled/urloli-dark.conf /etc/nginx/sites-enabled/urloli.conf + fi + sed -i "s/urlo\.li/$domain/g" /etc/nginx/sites-enabled/urloli.conf + cp -i srv/linux/etc/init.d/urloli /etc/init.d chmod +x /etc/init.d/urloli /etc/init.d/urloli start elif [ "$unamestr" = 'OpenBSD' ]; then - cat /etc/acme-client.conf src/openbsd/etc/acme-client.conf > /etc/acme-client.conf + if [ "$network" = 'www' ]; then + cat /etc/acme-client.conf srv/openbsd/etc/acme-client.conf > /etc/acme-client.conf + sed -i "s/urlo\.li/$domain/g" /etc/acme-client.conf + fi cat /etc/httpd.conf srv/openbsd/etc/httpd.conf > /etc/httpd.conf + sed -i "s/urlo\.li/$domain/g" /etc/httpd.conf rcctl restart httpd - acme-client -v urlo.li - cp srv/openbsd/etc/rc.d/urloli /etc/rc.d + if [ "$network" = 'www' ]; then + acme-client -v $domain + fi + cp -i srv/openbsd/etc/rc.d/urloli /etc/rc.d chmod +x /etc/rc.d/urloli rcctl start urloli +elif [ "$unamestr" = 'FreeBSD' ]; then + pkg install py39-certbot + if [ "$network" = 'www' ]; then + certbot certonly --webroot -d $domain -d www.$domain + cp -i srv/linux/etc/nginx/sites-enabled/urloli-clear.conf /usr/local/etc/nginx/sites-enabled/urloli.conf + else + cp -i srv/linux/etc/nginx/sites-enabled/urloli-dark.conf /usr/local/etc/nginx/sites-enabled/urloli.conf + fi + sed -i .orig "s/urlo\.li/$domain/g" /usr/local/etc/nginx/sites-enabled/urloli.conf + rm -rf /usr/local/etc/nginx/sites-enabled/urloli.conf.orig + cp -i srv/freebsd/usr/local/etc/rc.d/urloli /usr/local/etc/rc.d + chmod +x /usr/local/etc/rc.d/urloli + sysrc urloli_enable=YES + service start urloli fi exit diff --git a/main.go b/main.go index 6484bb9..8e07c32 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,12 @@ import ( "unicode/utf8" "io/ioutil" "os" + "runtime" +) + +var ( + linkpath string + configpath string ) func mkstring () string { @@ -49,7 +55,7 @@ func checkcharlim (url string) bool { } func geturl (key string) string { - data, err := ioutil.ReadFile("/etc/urloli/links.json") + data, err := ioutil.ReadFile(linkpath) if err != nil { fmt.Println("links.jsonを開けられません: ", err) } @@ -67,7 +73,7 @@ func geturl (key string) string { } func checkjson (url string) bool { - data, err := ioutil.ReadFile("/etc/urloli/links.json") + data, err := ioutil.ReadFile(linkpath) if err != nil { fmt.Println("links.jsonを開けられません: ", err) } @@ -85,7 +91,7 @@ func checkjson (url string) bool { } func insertjson (url string) string { - data, err := ioutil.ReadFile("/etc/urloli/links.json") + data, err := ioutil.ReadFile(linkpath) if err != nil { fmt.Println("links.jsonを開けられません: ", err) } @@ -96,7 +102,7 @@ func insertjson (url string) string { newstring := mkstring() payload[newstring] = url m, _ := json.Marshal(&payload) - ioutil.WriteFile("/etc/urloli/links.json", m, os.ModePerm) + ioutil.WriteFile(linkpath, m, os.ModePerm) // fmt.Printf("%s\n", m) return newstring @@ -106,10 +112,32 @@ type Page struct { Tit string Err string Url string + Dom string Lan string } func main () { + if runtime.GOOS == "freebsd" { + linkpath = "/usr/local/etc/urloli/links.json" + configpath = "/usr/local/etc/urloli/config.json" + } else { + linkpath = "/etc/urloli/links.json" + configpath = "/etc/urloli/config.json" + } + var domain string + + data, err := ioutil.ReadFile(configpath) + if err != nil { + fmt.Println("config.jsonを開けられません: ", err) + } + + var payload map[string]interface{} + json.Unmarshal(data, &payload) + + for k := range payload { + domain = payload[k].(string) + } + http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { @@ -163,9 +191,9 @@ func main () { } else { res := insertjson(addurl) if cookie.Value == "ja" { - data = &Page{Tit: "短縮済み", Lan: cookie.Value, Url: res} + data = &Page{Tit: "短縮済み", Lan: cookie.Value, Url: res, Dom: domain} } else { - data = &Page{Tit: "Shortened", Lan: cookie.Value, Url: res} + data = &Page{Tit: "Shortened", Lan: cookie.Value, Url: res, Dom: domain} } tmpl = template.Must(template.ParseFiles("view/submitted.html", "view/header.html", "view/footer.html")) } @@ -204,7 +232,7 @@ func main () { tmpl = template.Must(template.ParseFiles("view/404.html", "view/header.html", "view/footer.html")) } } else if uri == "/" && qnewurl != "" { - data = &Page{Tit: "短縮済み", Url: qnewurl} + data = &Page{Tit: "短縮済み", Url: qnewurl, Dom: domain} tmpl = template.Must(template.ParseFiles("view/submitted.html", "view/header.html", "view/footer.html")) } else { if cookie.Value == "ja" { diff --git a/srv/freebsd/usr/local/etc/rc.d/urloli b/srv/freebsd/usr/local/etc/rc.d/urloli new file mode 100755 index 0000000..aa0f8fb --- /dev/null +++ b/srv/freebsd/usr/local/etc/rc.d/urloli @@ -0,0 +1,42 @@ +#!/bin/sh + +# PROVIDE: urloli +# REQUIRE: NETWORKING SYSLOG +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf to enable urloli: +# +#urloli_enable="YES" + +. /etc/rc.subr + +name="urloli" +rcvar="urloli_enable" + +load_rc_config $name + +: ${urloli_enable:="NO"} +: ${urloli_facility:="daemon"} +: ${urloli_priority:="debug"} + +command="/usr/local/bin/${name}" +procname="/usr/local/bin/${name}" + +pidfile="/var/run/${name}.pid" + +start_cmd="${name}_start" + +urloli_start() { + for d in /var/db/urloli /var/log/urloli; do + if [ ! -e "$d" ]; then + mkdir "$d" + fi + done + /usr/sbin/daemon -S -l ${urloli_facility} -s ${urloli_priority} -T ${name} \ + -p ${pidfile} \ + /usr/bin/env -i \ + "PATH=/usr/local/bin:${PATH}" \ + $command +} + +run_rc_command "$1" diff --git a/srv/linux/etc/nginx/sites-enabled/urloli.conf b/srv/linux/etc/nginx/sites-enabled/urloli-clear.conf similarity index 100% rename from srv/linux/etc/nginx/sites-enabled/urloli.conf rename to srv/linux/etc/nginx/sites-enabled/urloli-clear.conf diff --git a/srv/linux/etc/nginx/sites-enabled/urloli-dark.conf b/srv/linux/etc/nginx/sites-enabled/urloli-dark.conf new file mode 100644 index 0000000..4cd79da --- /dev/null +++ b/srv/linux/etc/nginx/sites-enabled/urloli-dark.conf @@ -0,0 +1,13 @@ +server { + server_name urlo.li; + + access_log off; + error_log off; + + location / { + proxy_pass http://localhost:9910; + } + + listen 80; + listen [::]:80; +} diff --git a/view/submitted.html b/view/submitted.html index 58a9461..25e81d1 100644 --- a/view/submitted.html +++ b/view/submitted.html @@ -2,7 +2,7 @@ {{template "header" .}} {{if eq .Lan "ja"}}下記のURLからアクセス出来ます。{{else}}Please enter a URL.{{end}}
- https://urlo.li/{{ .Url }} + {{ .Dom }}/{{ .Url }}

{{if eq .Lan "ja"}}トップページに戻る{{else}}Return to toppage{{end}} {{template "footer" .}}