From 424b3bb932574a21ec8114556a045b29a9a414ba Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 29 Jun 2020 19:52:12 +0000 Subject: [PATCH] Update Go dependencies and code --- go.mod | 7 +- go.sum | 53 +++++++---- main.go | 278 ++++++++++++++++++++++++++++++++------------------------ 3 files changed, 197 insertions(+), 141 deletions(-) diff --git a/go.mod b/go.mod index 07927f9..9ab6e45 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,8 @@ module github.com/qdm12/stackedit-docker require ( - github.com/julienschmidt/httprouter v1.3.0 - github.com/kyokomi/emoji v1.5.1 - github.com/qdm12/golibs v0.0.0-20200108212314-82caecb70123 + github.com/kyokomi/emoji v2.2.4+incompatible + github.com/qdm12/golibs v0.0.0-20200528010515-765b7cd4f0db ) -go 1.13 +go 1.14 diff --git a/go.sum b/go.sum index f441891..21834cd 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -6,6 +7,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -20,30 +23,37 @@ github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsd github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gotify/go-api-client/v2 v2.0.4/go.mod h1:VKiah/UK20bXsr0JObE1eBVLW44zbBouzjuri9iwjFU= -github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kyokomi/emoji v1.5.1 h1:qp9dub1mW7C4MlvoRENH6EAENb9skEFOvIEbp1Waj38= -github.com/kyokomi/emoji v1.5.1/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA= +github.com/kyokomi/emoji v2.2.4+incompatible h1:np0woGKwx9LiHAQmwZx79Oc0rHpNw3o+3evou4BEPv4= +github.com/kyokomi/emoji v2.2.4+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee/go.mod h1:3uODdxMgOaPYeWU7RzZLxVtJHZ/x1f/iHkBZuKJDzuY= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/qdm12/golibs v0.0.0-20200108212314-82caecb70123 h1:YxvlGvUJ+IO1EwaLoZlMrMT6GfuwQ56k0p0YM4rTVZc= -github.com/qdm12/golibs v0.0.0-20200108212314-82caecb70123/go.mod h1:oNw3Ie4T0wyeBk9fK8vOe5tKdWG3bEcII6RlQjw7JIs= +github.com/qdm12/golibs v0.0.0-20200528010515-765b7cd4f0db h1:omObof3k8JjHri+K4ZwKvDCPV12pmLsZOQy4EPYnZMQ= +github.com/qdm12/golibs v0.0.0-20200528010515-765b7cd4f0db/go.mod h1:pikkTN7g7zRuuAnERwqW1yAFq6pYmxrxpjiwGvb0Ysc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -51,16 +61,18 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= -go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -69,18 +81,27 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/main.go b/main.go index d2ddb94..8e87fef 100644 --- a/main.go +++ b/main.go @@ -1,121 +1,157 @@ -package main - -import ( - "encoding/json" - "fmt" - "net/http" - "os" - "strings" - - "github.com/kyokomi/emoji" - "github.com/qdm12/golibs/healthcheck" - "github.com/qdm12/golibs/logging" - "github.com/qdm12/golibs/params" - "github.com/qdm12/golibs/server" -) - -const ( - defaultConf = `{"dropboxAppKey":"","dropboxAppKeyFull":"","githubClientId":"","googleClientId":"","googleApiKey":"","wordpressClientId":"","allowSponsorship":true}` -) - -func main() { - if healthcheck.Mode(os.Args) { - if err := healthcheck.Query(); err != nil { - logging.Err(err) - os.Exit(1) - } - os.Exit(0) - } - fmt.Println("#####################################") - fmt.Println("########## StackEdit Server #########") - fmt.Println("########## by Quentin McGaw #########") - fmt.Println("########## Give some " + emoji.Sprint(":heart:") + " at ##########") - fmt.Println("# github.com/qdm12/stackedit-docker #") - fmt.Print("#####################################\n\n") - envParams := params.NewEnvParams() - logging.InitLogger("console", logging.InfoLevel, 0) - listeningPort, err := envParams.GetListeningPort(params.Default("8000")) - if err != nil { - logging.Err(err) - os.Exit(1) - } - logging.Infof("Using internal listening port %s", listeningPort) - rootURL, err := envParams.GetRootURL(params.Default("/")) - if err != nil { - logging.Err(err) - os.Exit(1) - } - logging.Infof("Using root URL %q", rootURL) - - productionRouter := http.NewServeMux() - productionRouter.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - urlStackeditPath := strings.TrimPrefix(r.URL.Path, rootURL) - filepath := "/dist/" + urlStackeditPath - switch urlStackeditPath { - case "/conf", "/app/conf": - w.Write(getAllStackeditEnv()) - return - case "/": - filepath = "/static/landing/" - case "/sitemap.xml": - filepath = "/static/sitemap.xml" - case "/oauth2/callback": - filepath = "/static/oauth2/callback.html" - case "/app", "/app/": - filepath = "/dist/index.html" - default: - switch { - case strings.HasPrefix(urlStackeditPath, "/static/css/static/fonts/"): - filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/static/css/") - case strings.HasPrefix(urlStackeditPath, "/app/static/css/static/fonts/"): - filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/app/static/css/") - case strings.HasPrefix(urlStackeditPath, "/app/"): - filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/app/") - } - } - http.ServeFile(w, r, "/html"+filepath) - }) - healthcheckRouter := healthcheck.CreateRouter(func() error { return nil }) - serverErrs := server.RunServers( - server.Settings{Name: "production", Addr: "0.0.0.0:" + listeningPort, Handler: productionRouter}, - server.Settings{Name: "healthcheck", Addr: "127.0.0.1:9999", Handler: healthcheckRouter}, - ) - for _, err := range serverErrs { - if err != nil { - logging.Err(err) - } - } - if len(serverErrs) > 0 { - logging.Errorf("%v", serverErrs) - os.Exit(1) - } -} - -// Returns all stackedit env values as JSON -func getAllStackeditEnv() []byte { - env := struct { - DropboxAppKey string `json:"dropboxAppKey"` - DropboxAppKeyFull string `json:"dropboxAppKeyFull"` - GithubClientID string `json:"githubClientId"` - GithubClientSecret string `json:"githubClientSecret"` - GoogleClientID string `json:"googleClientId"` - GoogleAPIKey string `json:"googleApiKey"` - WordpressClientID string `json:"wordpressClientId"` - PaypalReceiverEmail string `json:"paypalReceiverEmail"` - AllowSponsorship bool `json:"allowSponsorship"` - }{} - envParams := params.NewEnvParams() - env.DropboxAppKey, _ = envParams.GetEnv("DROPBOX_APP_KEY") - env.DropboxAppKeyFull, _ = envParams.GetEnv("DROPBOX_APP_KEY_FULL") - env.GithubClientID, _ = envParams.GetEnv("GITHUB_CLIENT_ID") - env.GithubClientSecret, _ = envParams.GetEnv("GITHUB_CLIENT_SECRET") - env.GoogleClientID, _ = envParams.GetEnv("GOOGLE_CLIENT_ID") - env.GoogleAPIKey, _ = envParams.GetEnv("GOOGLE_API_KEY") - env.WordpressClientID, _ = envParams.GetEnv("WORDPRESS_CLIENT_ID") - env.PaypalReceiverEmail, _ = envParams.GetEnv("PAYPAL_RECEIVER_EMAIL") - if len(env.PaypalReceiverEmail) > 0 { - env.AllowSponsorship = true - } - b, _ := json.Marshal(env) - return b -} +package main + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "os" + "os/signal" + "strings" + "syscall" + + "github.com/kyokomi/emoji" + "github.com/qdm12/golibs/healthcheck" + "github.com/qdm12/golibs/logging" + "github.com/qdm12/golibs/params" + "github.com/qdm12/golibs/server" +) + +func main() { + ctx := context.Background() + os.Exit(_main(ctx, os.Args)) +} + +func _main(ctx context.Context, args []string) int { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + if healthcheck.Mode(args) { + if err := healthcheck.Query(); err != nil { + fmt.Println(err) + return 1 + } + return 0 + } + + fmt.Println("#####################################") + fmt.Println("########## StackEdit Server #########") + fmt.Println("########## by Quentin McGaw #########") + fmt.Println("########## Give some " + emoji.Sprint(":heart:") + " at ##########") + fmt.Println("# github.com/qdm12/stackedit-docker #") + fmt.Print("#####################################\n\n") + envParams := params.NewEnvParams() + logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel, -1) + if err != nil { + fmt.Println(err) + return 1 + } + + listeningPort, warning, err := envParams.GetListeningPort(params.Default("8000")) + if len(warning) > 0 { + logger.Warn(warning) + } + if err != nil { + logger.Error(err) + return 1 + } + logger.Info("Using internal listening port %s", listeningPort) + + rootURL, err := envParams.GetRootURL(params.Default("/")) + if err != nil { + logger.Error(err) + return 1 + } + logger.Info("Using root URL %q", rootURL) + + productionRouter := http.NewServeMux() + productionRouter.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + urlStackeditPath := strings.TrimPrefix(r.URL.Path, rootURL) + filepath := "/dist/" + urlStackeditPath + switch urlStackeditPath { + case "/conf", "/app/conf": + bytes := getAllStackeditEnv() + if _, err := w.Write(bytes); err != nil { + logger.Error(err) + } + return + case "/": + filepath = "/static/landing/" + case "/sitemap.xml": + filepath = "/static/sitemap.xml" + case "/oauth2/callback": + filepath = "/static/oauth2/callback.html" + case "/app", "/app/": + filepath = "/dist/index.html" + default: + switch { + case strings.HasPrefix(urlStackeditPath, "/static/css/static/fonts/"): + filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/static/css/") + case strings.HasPrefix(urlStackeditPath, "/app/static/css/static/fonts/"): + filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/app/static/css/") + case strings.HasPrefix(urlStackeditPath, "/app/"): + filepath = "/dist/" + strings.TrimPrefix(urlStackeditPath, "/app/") + } + } + http.ServeFile(w, r, "/html"+filepath) + }) + healthcheckHandlerFunc := healthcheck.GetHandler(func() error { return nil }) + serverErrors := make(chan []error) + go func() { + serverErrors <- server.RunServers(ctx, + server.Settings{Name: "production", Addr: "0.0.0.0:" + listeningPort, Handler: productionRouter}, + server.Settings{Name: "healthcheck", Addr: "127.0.0.1:9999", Handler: healthcheckHandlerFunc}, + ) + }() + + osSignals := make(chan os.Signal, 1) + signal.Notify(osSignals, + syscall.SIGINT, + syscall.SIGTERM, + os.Interrupt, + ) + select { + case errors := <-serverErrors: + for _, err := range errors { + logger.Error(err) + } + return 1 + case signal := <-osSignals: + message := fmt.Sprintf("Stopping program: caught OS signal %q", signal) + logger.Warn(message) + return 2 + case <-ctx.Done(): + message := fmt.Sprintf("Stopping program: %s", ctx.Err()) + logger.Warn(message) + return 1 + } +} + +// Returns all stackedit env values as JSON +func getAllStackeditEnv() []byte { + env := struct { + DropboxAppKey string `json:"dropboxAppKey"` + DropboxAppKeyFull string `json:"dropboxAppKeyFull"` + GithubClientID string `json:"githubClientId"` + GithubClientSecret string `json:"githubClientSecret"` + GoogleClientID string `json:"googleClientId"` + GoogleAPIKey string `json:"googleApiKey"` + WordpressClientID string `json:"wordpressClientId"` + PaypalReceiverEmail string `json:"paypalReceiverEmail"` + AllowSponsorship bool `json:"allowSponsorship"` + }{} + envParams := params.NewEnvParams() + env.DropboxAppKey, _ = envParams.GetEnv("DROPBOX_APP_KEY") + env.DropboxAppKeyFull, _ = envParams.GetEnv("DROPBOX_APP_KEY_FULL") + env.GithubClientID, _ = envParams.GetEnv("GITHUB_CLIENT_ID") + env.GithubClientSecret, _ = envParams.GetEnv("GITHUB_CLIENT_SECRET") + env.GoogleClientID, _ = envParams.GetEnv("GOOGLE_CLIENT_ID") + env.GoogleAPIKey, _ = envParams.GetEnv("GOOGLE_API_KEY") + env.WordpressClientID, _ = envParams.GetEnv("WORDPRESS_CLIENT_ID") + env.PaypalReceiverEmail, _ = envParams.GetEnv("PAYPAL_RECEIVER_EMAIL") + if len(env.PaypalReceiverEmail) > 0 { + env.AllowSponsorship = true + } + b, _ := json.Marshal(env) + return b +}