Merge branch 'main' of github.com:binwiederhier/ntfy into main
This commit is contained in:
		
						commit
						983dec801a
					
				
					 6 changed files with 66 additions and 13 deletions
				
			
		| 
						 | 
					@ -21,6 +21,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## ntfy server v1.24.0 (UNRELEASED)
 | 
					## ntfy server v1.24.0 (UNRELEASED)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Features:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Regularly send Firebase keepalive messages to ~poll topic to support self-hosted servers (no ticket)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Bugs:**
 | 
					**Bugs:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Support emails without `Content-Type` ([#265](https://github.com/binwiederhier/ntfy/issues/265), thanks to [@dmbonsall](https://github.com/dmbonsall))
 | 
					* Support emails without `Content-Type` ([#265](https://github.com/binwiederhier/ntfy/issues/265), thanks to [@dmbonsall](https://github.com/dmbonsall))
 | 
				
			||||||
| 
						 | 
					@ -41,7 +45,8 @@ The app is now available in the [App Store](https://apps.apple.com/us/app/ntfy/i
 | 
				
			||||||
* iOS app ([#4](https://github.com/binwiederhier/ntfy/issues/4), see also: [TestFlight summary](https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150))
 | 
					* iOS app ([#4](https://github.com/binwiederhier/ntfy/issues/4), see also: [TestFlight summary](https://github.com/binwiederhier/ntfy/issues/4#issuecomment-1133767150))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Thanks:**
 | 
					**Thanks:**
 | 
				
			||||||
Thank you to all the testers who tried out the app. You guys gave me the confidence that it's ready to release (albeit with
 | 
					
 | 
				
			||||||
 | 
					* Thank you to all the testers who tried out the app. You guys gave me the confidence that it's ready to release (albeit with
 | 
				
			||||||
  some known issues which will be addressed in follow-up releases).
 | 
					  some known issues which will be addressed in follow-up releases).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## ntfy server v1.23.0
 | 
					## ntfy server v1.23.0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										17
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
					@ -14,20 +14,20 @@ require (
 | 
				
			||||||
	github.com/mattn/go-sqlite3 v1.14.13
 | 
						github.com/mattn/go-sqlite3 v1.14.13
 | 
				
			||||||
	github.com/olebedev/when v0.0.0-20211212231525-59bd4edcf9d6
 | 
						github.com/olebedev/when v0.0.0-20211212231525-59bd4edcf9d6
 | 
				
			||||||
	github.com/stretchr/testify v1.7.0
 | 
						github.com/stretchr/testify v1.7.0
 | 
				
			||||||
	github.com/urfave/cli/v2 v2.7.1
 | 
						github.com/urfave/cli/v2 v2.8.1
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898
 | 
						golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e
 | 
				
			||||||
	golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect
 | 
						golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 // indirect
 | 
				
			||||||
	golang.org/x/sync v0.0.0-20220513210516-0976fa681c29
 | 
						golang.org/x/sync v0.0.0-20220513210516-0976fa681c29
 | 
				
			||||||
	golang.org/x/term v0.0.0-20220411215600-e5f449aeb171
 | 
						golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
 | 
				
			||||||
	golang.org/x/time v0.0.0-20220411224347-583f2d630306
 | 
						golang.org/x/time v0.0.0-20220411224347-583f2d630306
 | 
				
			||||||
	google.golang.org/api v0.80.0
 | 
						google.golang.org/api v0.81.0
 | 
				
			||||||
	gopkg.in/yaml.v2 v2.4.0
 | 
						gopkg.in/yaml.v2 v2.4.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require github.com/pkg/errors v0.9.1 // indirect
 | 
					require github.com/pkg/errors v0.9.1 // indirect
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	cloud.google.com/go v0.101.1 // indirect
 | 
						cloud.google.com/go v0.102.0 // indirect
 | 
				
			||||||
	cloud.google.com/go/compute v1.6.1 // indirect
 | 
						cloud.google.com/go/compute v1.6.1 // indirect
 | 
				
			||||||
	cloud.google.com/go/iam v0.3.0 // indirect
 | 
						cloud.google.com/go/iam v0.3.0 // indirect
 | 
				
			||||||
	github.com/AlekSi/pointer v1.2.0 // indirect
 | 
						github.com/AlekSi/pointer v1.2.0 // indirect
 | 
				
			||||||
| 
						 | 
					@ -42,13 +42,14 @@ require (
 | 
				
			||||||
	github.com/googleapis/go-type-adapters v1.0.0 // indirect
 | 
						github.com/googleapis/go-type-adapters v1.0.0 // indirect
 | 
				
			||||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
						github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
				
			||||||
	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 | 
						github.com/russross/blackfriday/v2 v2.1.0 // indirect
 | 
				
			||||||
 | 
						github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
 | 
				
			||||||
	go.opencensus.io v0.23.0 // indirect
 | 
						go.opencensus.io v0.23.0 // indirect
 | 
				
			||||||
	golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect
 | 
						golang.org/x/net v0.0.0-20220524220425-1d687d428aca // indirect
 | 
				
			||||||
	golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
 | 
						golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
 | 
				
			||||||
	golang.org/x/text v0.3.7 // indirect
 | 
						golang.org/x/text v0.3.7 // indirect
 | 
				
			||||||
	golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
 | 
						golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
 | 
				
			||||||
	google.golang.org/appengine v1.6.7 // indirect
 | 
						google.golang.org/appengine v1.6.7 // indirect
 | 
				
			||||||
	google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect
 | 
						google.golang.org/genproto v0.0.0-20220525015930-6ca3db687a9d // indirect
 | 
				
			||||||
	google.golang.org/grpc v1.46.2 // indirect
 | 
						google.golang.org/grpc v1.46.2 // indirect
 | 
				
			||||||
	google.golang.org/protobuf v1.28.0 // indirect
 | 
						google.golang.org/protobuf v1.28.0 // indirect
 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
 | 
						gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
					@ -29,6 +29,8 @@ cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2Z
 | 
				
			||||||
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
 | 
					cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
 | 
				
			||||||
cloud.google.com/go v0.101.1 h1:3+/0TAm9JD/PyhkrDWQWi2L197h3euCsM+H+J4iYTR8=
 | 
					cloud.google.com/go v0.101.1 h1:3+/0TAm9JD/PyhkrDWQWi2L197h3euCsM+H+J4iYTR8=
 | 
				
			||||||
cloud.google.com/go v0.101.1/go.mod h1:55HwjsGW4CHD3JrNuMdZtSDsgTs0CuCB/bBTugD+7AA=
 | 
					cloud.google.com/go v0.101.1/go.mod h1:55HwjsGW4CHD3JrNuMdZtSDsgTs0CuCB/bBTugD+7AA=
 | 
				
			||||||
 | 
					cloud.google.com/go v0.102.0 h1:DAq3r8y4mDgyB/ZPJ9v/5VJNqjgJAxTn6ZYLlUywOu8=
 | 
				
			||||||
 | 
					cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
 | 
				
			||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 | 
					cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 | 
				
			||||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
 | 
					cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
 | 
				
			||||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
 | 
					cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
 | 
				
			||||||
| 
						 | 
					@ -171,6 +173,7 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg
 | 
				
			||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 | 
					github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 | 
				
			||||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 | 
					github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 | 
				
			||||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 | 
					github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 | 
				
			||||||
 | 
					github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ=
 | 
				
			||||||
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 | 
					github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 | 
				
			||||||
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
 | 
					github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
 | 
				
			||||||
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 | 
					github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 | 
				
			||||||
| 
						 | 
					@ -241,6 +244,10 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
 | 
				
			||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
					github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
				
			||||||
github.com/urfave/cli/v2 v2.7.1 h1:DsAOFeI9T0vmUW4LiGR5mhuCIn5kqGIE4WMU2ytmH00=
 | 
					github.com/urfave/cli/v2 v2.7.1 h1:DsAOFeI9T0vmUW4LiGR5mhuCIn5kqGIE4WMU2ytmH00=
 | 
				
			||||||
github.com/urfave/cli/v2 v2.7.1/go.mod h1:TYFbtzt/azQoJOrGH5mDfZtS0jIkl/OeFwlRWPR9KRM=
 | 
					github.com/urfave/cli/v2 v2.7.1/go.mod h1:TYFbtzt/azQoJOrGH5mDfZtS0jIkl/OeFwlRWPR9KRM=
 | 
				
			||||||
 | 
					github.com/urfave/cli/v2 v2.8.1 h1:CGuYNZF9IKZY/rfBe3lJpccSoIY1ytfvmgQT90cNOl4=
 | 
				
			||||||
 | 
					github.com/urfave/cli/v2 v2.8.1/go.mod h1:Z41J9TPoffeoqP0Iza0YbAhGvymRdZAd2uPmZ5JxRdY=
 | 
				
			||||||
 | 
					github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
 | 
				
			||||||
 | 
					github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
 | 
				
			||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
					github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
					github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
| 
						 | 
					@ -262,6 +269,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
					golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0=
 | 
					golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 | 
					golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
					golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 | 
				
			||||||
| 
						 | 
					@ -341,6 +350,8 @@ golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su
 | 
				
			||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
					golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
				
			||||||
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y=
 | 
					golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y=
 | 
				
			||||||
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
					golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20220524220425-1d687d428aca h1:xTaFYiPROfpPhqrfTIDXj0ri1SpfueYT951s4bAuDO8=
 | 
				
			||||||
 | 
					golang.org/x/net v0.0.0-20220524220425-1d687d428aca/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
					golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
				
			||||||
| 
						 | 
					@ -362,6 +373,8 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 | 
					golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=
 | 
					golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 | 
					golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 | 
				
			||||||
 | 
					golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw=
 | 
				
			||||||
 | 
					golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
| 
						 | 
					@ -438,6 +451,8 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
 | 
				
			||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8=
 | 
					golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8=
 | 
				
			||||||
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
 | 
					golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
 | 
				
			||||||
 | 
					golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
| 
						 | 
					@ -552,6 +567,8 @@ google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69
 | 
				
			||||||
google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=
 | 
					google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=
 | 
				
			||||||
google.golang.org/api v0.80.0 h1:IQWaGVCYnsm4MO3hh+WtSXMzMzuyFx/fuR8qkN3A0Qo=
 | 
					google.golang.org/api v0.80.0 h1:IQWaGVCYnsm4MO3hh+WtSXMzMzuyFx/fuR8qkN3A0Qo=
 | 
				
			||||||
google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
 | 
					google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
 | 
				
			||||||
 | 
					google.golang.org/api v0.81.0 h1:o8WF5AvfidafWbFjsRyupxyEQJNUWxLZJCK5NXrxZZ8=
 | 
				
			||||||
 | 
					google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko=
 | 
				
			||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
					google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
				
			||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
					google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
				
			||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
					google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
				
			||||||
| 
						 | 
					@ -641,6 +658,9 @@ google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP
 | 
				
			||||||
google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 | 
					google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 | 
				
			||||||
google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I=
 | 
					google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I=
 | 
				
			||||||
google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 | 
					google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 | 
				
			||||||
 | 
					google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 | 
				
			||||||
 | 
					google.golang.org/genproto v0.0.0-20220525015930-6ca3db687a9d h1:8BnRR08DxAQ+e2pFx64Q3Ltg/AkrrxyG1LLa1WpomyA=
 | 
				
			||||||
 | 
					google.golang.org/genproto v0.0.0-20220525015930-6ca3db687a9d/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
 | 
				
			||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 | 
					google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 | 
				
			||||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 | 
					google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 | 
				
			||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 | 
					google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,8 @@ const (
 | 
				
			||||||
	DefaultAtSenderInterval          = 10 * time.Second
 | 
						DefaultAtSenderInterval          = 10 * time.Second
 | 
				
			||||||
	DefaultMinDelay                  = 10 * time.Second
 | 
						DefaultMinDelay                  = 10 * time.Second
 | 
				
			||||||
	DefaultMaxDelay                  = 3 * 24 * time.Hour
 | 
						DefaultMaxDelay                  = 3 * 24 * time.Hour
 | 
				
			||||||
	DefaultFirebaseKeepaliveInterval = 3 * time.Hour // Not too frequently to save battery
 | 
						DefaultFirebaseKeepaliveInterval = 3 * time.Hour    // ~control topic (Android), not too frequently to save battery
 | 
				
			||||||
 | 
						DefaultFirebasePollInterval      = 20 * time.Minute // ~poll topic (iOS), max. 2-3 times per hour (see docs)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Defines all global and per-visitor limits
 | 
					// Defines all global and per-visitor limits
 | 
				
			||||||
| 
						 | 
					@ -67,6 +68,7 @@ type Config struct {
 | 
				
			||||||
	WebRootIsApp                         bool
 | 
						WebRootIsApp                         bool
 | 
				
			||||||
	AtSenderInterval                     time.Duration
 | 
						AtSenderInterval                     time.Duration
 | 
				
			||||||
	FirebaseKeepaliveInterval            time.Duration
 | 
						FirebaseKeepaliveInterval            time.Duration
 | 
				
			||||||
 | 
						FirebasePollInterval                 time.Duration
 | 
				
			||||||
	SMTPSenderAddr                       string
 | 
						SMTPSenderAddr                       string
 | 
				
			||||||
	SMTPSenderUser                       string
 | 
						SMTPSenderUser                       string
 | 
				
			||||||
	SMTPSenderPass                       string
 | 
						SMTPSenderPass                       string
 | 
				
			||||||
| 
						 | 
					@ -117,6 +119,7 @@ func NewConfig() *Config {
 | 
				
			||||||
		MaxDelay:                             DefaultMaxDelay,
 | 
							MaxDelay:                             DefaultMaxDelay,
 | 
				
			||||||
		AtSenderInterval:                     DefaultAtSenderInterval,
 | 
							AtSenderInterval:                     DefaultAtSenderInterval,
 | 
				
			||||||
		FirebaseKeepaliveInterval:            DefaultFirebaseKeepaliveInterval,
 | 
							FirebaseKeepaliveInterval:            DefaultFirebaseKeepaliveInterval,
 | 
				
			||||||
 | 
							FirebasePollInterval:                 DefaultFirebasePollInterval,
 | 
				
			||||||
		TotalTopicLimit:                      DefaultTotalTopicLimit,
 | 
							TotalTopicLimit:                      DefaultTotalTopicLimit,
 | 
				
			||||||
		VisitorSubscriptionLimit:             DefaultVisitorSubscriptionLimit,
 | 
							VisitorSubscriptionLimit:             DefaultVisitorSubscriptionLimit,
 | 
				
			||||||
		VisitorAttachmentTotalSizeLimit:      DefaultVisitorAttachmentTotalSizeLimit,
 | 
							VisitorAttachmentTotalSizeLimit:      DefaultVisitorAttachmentTotalSizeLimit,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,6 +91,7 @@ var (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	firebaseControlTopic     = "~control"                // See Android if changed
 | 
						firebaseControlTopic     = "~control"                // See Android if changed
 | 
				
			||||||
 | 
						firebasePollTopic        = "~poll"                   // See iOS if changed
 | 
				
			||||||
	emptyMessageBody         = "triggered"               // Used if message body is empty
 | 
						emptyMessageBody         = "triggered"               // Used if message body is empty
 | 
				
			||||||
	defaultAttachmentMessage = "You received a file: %s" // Used if message body is empty, and there is an attachment
 | 
						defaultAttachmentMessage = "You received a file: %s" // Used if message body is empty, and there is an attachment
 | 
				
			||||||
	encodingBase64           = "base64"
 | 
						encodingBase64           = "base64"
 | 
				
			||||||
| 
						 | 
					@ -1074,7 +1075,12 @@ func (s *Server) runFirebaseKeepaliver() {
 | 
				
			||||||
		select {
 | 
							select {
 | 
				
			||||||
		case <-time.After(s.config.FirebaseKeepaliveInterval):
 | 
							case <-time.After(s.config.FirebaseKeepaliveInterval):
 | 
				
			||||||
			if err := s.firebase(newKeepaliveMessage(firebaseControlTopic)); err != nil {
 | 
								if err := s.firebase(newKeepaliveMessage(firebaseControlTopic)); err != nil {
 | 
				
			||||||
				log.Printf("error sending Firebase keepalive message: %s", err.Error())
 | 
									log.Printf("error sending Firebase keepalive message to %s: %s", firebaseControlTopic, err.Error())
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							case <-time.After(s.config.FirebasePollInterval):
 | 
				
			||||||
 | 
								log.Printf("Sending to timer topic %s", firebasePollTopic)
 | 
				
			||||||
 | 
								if err := s.firebase(newKeepaliveMessage(firebasePollTopic)); err != nil {
 | 
				
			||||||
 | 
									log.Printf("error sending Firebase keepalive message to %s: %s", firebasePollTopic, err.Error())
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		case <-s.closeChan:
 | 
							case <-s.closeChan:
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +80,24 @@ func toFirebaseMessage(m *message, auther auth.Auther) (*messaging.Message, erro
 | 
				
			||||||
			"event": m.Event,
 | 
								"event": m.Event,
 | 
				
			||||||
			"topic": m.Topic,
 | 
								"topic": m.Topic,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							// Silent notification; only 2-3 per hour are allowed; delivery not guaranteed
 | 
				
			||||||
 | 
							// See https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app
 | 
				
			||||||
 | 
							apnsData := make(map[string]interface{})
 | 
				
			||||||
 | 
							for k, v := range data {
 | 
				
			||||||
 | 
								apnsData[k] = v
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							apnsConfig = &messaging.APNSConfig{
 | 
				
			||||||
 | 
								Headers: map[string]string{
 | 
				
			||||||
 | 
									"apns-push-type": "background",
 | 
				
			||||||
 | 
									"apns-priority":  "5",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								Payload: &messaging.APNSPayload{
 | 
				
			||||||
 | 
									Aps: &messaging.Aps{
 | 
				
			||||||
 | 
										ContentAvailable: true,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									CustomData: apnsData,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	case messageEvent:
 | 
						case messageEvent:
 | 
				
			||||||
		allowForward := true
 | 
							allowForward := true
 | 
				
			||||||
		if auther != nil {
 | 
							if auther != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue