mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:32:24 -05:00 
			
		
		
		
	[feature] Make Let's Encrypt integration an opt-in feature (#368)
This commit is contained in:
		
					parent
					
						
							
								ec4357485e
							
						
					
				
			
			
				commit
				
					
						e13718148d
					
				
			
		
					 5 changed files with 15 additions and 14 deletions
				
			
		|  | @ -11,11 +11,11 @@ | ||||||
| 
 | 
 | ||||||
| # Bool. Whether or not letsencrypt should be enabled for the server. | # Bool. Whether or not letsencrypt should be enabled for the server. | ||||||
| # If false, the rest of the settings here will be ignored. | # If false, the rest of the settings here will be ignored. | ||||||
| # You should only change this if you want to serve GoToSocial behind a reverse proxy | # If you serve GoToSocial behind a reverse proxy like nginx or traefik, leave this turned off. | ||||||
| # like Traefik, HAProxy, or Nginx. | # If you don't, then turn it on so that you can use https. | ||||||
| # Options: [true, false] | # Options: [true, false] | ||||||
| # Default: true | # Default: false | ||||||
| letsencrypt-enabled: true | letsencrypt-enabled: false | ||||||
| 
 | 
 | ||||||
| # Int. Port to listen for letsencrypt certificate challenges on. | # Int. Port to listen for letsencrypt certificate challenges on. | ||||||
| # If letsencrypt is enabled, this port must be reachable or you won't be able to obtain certs. | # If letsencrypt is enabled, this port must be reachable or you won't be able to obtain certs. | ||||||
|  |  | ||||||
|  | @ -51,6 +51,7 @@ Now open the file in your text editor of choice so that you can set some importa | ||||||
| - Set `db-type` to `sqlite`. | - Set `db-type` to `sqlite`. | ||||||
| - Set `db-address` to `sqlite.db`. | - Set `db-address` to `sqlite.db`. | ||||||
| - Set `storage-local-base-path` to the storage directory you created above (eg., `/gotosocial/storage`). | - Set `storage-local-base-path` to the storage directory you created above (eg., `/gotosocial/storage`). | ||||||
|  | - Set `letsencrypt-enabled` to `true`. | ||||||
| - Set `letsencrypt-cert-dir` to the certificate storage directory you created above (eg., `/gotosocial/storage/certs`). | - Set `letsencrypt-cert-dir` to the certificate storage directory you created above (eg., `/gotosocial/storage/certs`). | ||||||
| 
 | 
 | ||||||
| The above options assume you're using SQLite as your database. If you want to use Postgres instead, see [here](../configuration/database.md) for the config options. | The above options assume you're using SQLite as your database. If you want to use Postgres instead, see [here](../configuration/database.md) for the config options. | ||||||
|  |  | ||||||
|  | @ -258,11 +258,11 @@ statuses-media-max-files: 6 | ||||||
| 
 | 
 | ||||||
| # Bool. Whether or not letsencrypt should be enabled for the server. | # Bool. Whether or not letsencrypt should be enabled for the server. | ||||||
| # If false, the rest of the settings here will be ignored. | # If false, the rest of the settings here will be ignored. | ||||||
| # You should only change this if you want to serve GoToSocial behind a reverse proxy | # If you serve GoToSocial behind a reverse proxy like nginx or traefik, leave this turned off. | ||||||
| # like Traefik, HAProxy, or Nginx. | # If you don't, then turn it on so that you can use https. | ||||||
| # Options: [true, false] | # Options: [true, false] | ||||||
| # Default: true | # Default: false | ||||||
| letsencrypt-enabled: true | letsencrypt-enabled: false | ||||||
| 
 | 
 | ||||||
| # Int. Port to listen for letsencrypt certificate challenges on. | # Int. Port to listen for letsencrypt certificate challenges on. | ||||||
| # If letsencrypt is enabled, this port must be reachable or you won't be able to obtain certs. | # If letsencrypt is enabled, this port must be reachable or you won't be able to obtain certs. | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ var Defaults = Values{ | ||||||
| 	StatusesPollOptionMaxChars: 50, | 	StatusesPollOptionMaxChars: 50, | ||||||
| 	StatusesMediaMaxFiles:      6, | 	StatusesMediaMaxFiles:      6, | ||||||
| 
 | 
 | ||||||
| 	LetsEncryptEnabled:      true, | 	LetsEncryptEnabled:      false, | ||||||
| 	LetsEncryptPort:         80, | 	LetsEncryptPort:         80, | ||||||
| 	LetsEncryptCertDir:      "/gotosocial/storage/certs", | 	LetsEncryptCertDir:      "/gotosocial/storage/certs", | ||||||
| 	LetsEncryptEmailAddress: "", | 	LetsEncryptEmailAddress: "", | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ set -e | ||||||
| echo "STARTING CLI TESTS" | echo "STARTING CLI TESTS" | ||||||
| 
 | 
 | ||||||
| echo "TEST_1 Make sure defaults are set correctly." | echo "TEST_1 Make sure defaults are set correctly." | ||||||
| TEST_1_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | TEST_1_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | ||||||
| TEST_1="$(go run ./cmd/gotosocial/... debug config)" | TEST_1="$(go run ./cmd/gotosocial/... debug config)" | ||||||
| if [ "${TEST_1}" != "${TEST_1_EXPECTED}" ]; then | if [ "${TEST_1}" != "${TEST_1_EXPECTED}" ]; then | ||||||
|     echo "TEST_1 not equal TEST_1_EXPECTED" |     echo "TEST_1 not equal TEST_1_EXPECTED" | ||||||
|  | @ -15,7 +15,7 @@ else | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| echo "TEST_2 Override db-address from default using cli flag." | echo "TEST_2 Override db-address from default using cli flag." | ||||||
| TEST_2_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | TEST_2_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | ||||||
| TEST_2="$(go run ./cmd/gotosocial/... --db-address some.db.address debug config)" | TEST_2="$(go run ./cmd/gotosocial/... --db-address some.db.address debug config)" | ||||||
| if [ "${TEST_2}" != "${TEST_2_EXPECTED}" ]; then | if [ "${TEST_2}" != "${TEST_2_EXPECTED}" ]; then | ||||||
|     echo "TEST_2 not equal TEST_2_EXPECTED" |     echo "TEST_2 not equal TEST_2_EXPECTED" | ||||||
|  | @ -25,7 +25,7 @@ else | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| echo "TEST_3 Override db-address from default using env var." | echo "TEST_3 Override db-address from default using env var." | ||||||
| TEST_3_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | TEST_3_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | ||||||
| TEST_3="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... debug config)" | TEST_3="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... debug config)" | ||||||
| if [ "${TEST_3}" != "${TEST_3_EXPECTED}" ]; then | if [ "${TEST_3}" != "${TEST_3_EXPECTED}" ]; then | ||||||
|     echo "TEST_3 not equal TEST_3_EXPECTED" |     echo "TEST_3 not equal TEST_3_EXPECTED" | ||||||
|  | @ -35,7 +35,7 @@ else | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| echo "TEST_4 Override db-address from default using both env var and cli flag. The cli flag should take priority." | echo "TEST_4 Override db-address from default using both env var and cli flag. The cli flag should take priority." | ||||||
| TEST_4_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.other.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | TEST_4_EXPECTED='{"account-domain":"","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.other.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | ||||||
| TEST_4="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... --db-address some.other.db.address debug config)" | TEST_4="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... --db-address some.other.db.address debug config)" | ||||||
| if [ "${TEST_4}" != "${TEST_4_EXPECTED}" ]; then | if [ "${TEST_4}" != "${TEST_4_EXPECTED}" ]; then | ||||||
|     echo "TEST_4 not equal TEST_4_EXPECTED" |     echo "TEST_4 not equal TEST_4_EXPECTED" | ||||||
|  | @ -105,7 +105,7 @@ else | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| echo "TEST_11 Test loading a partial config file. Default values should be used apart from those set in the config file." | echo "TEST_11 Test loading a partial config file. Default values should be used apart from those set in the config file." | ||||||
| TEST_11_EXPECTED='{"account-domain":"peepee.poopoo","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test2.yaml","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-level":"trace","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | TEST_11_EXPECTED='{"account-domain":"peepee.poopoo","accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test2.yaml","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","help":false,"host":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-level":"trace","media-description-max-chars":500,"media-description-min-chars":0,"media-image-max-size":2097152,"media-video-max-size":10485760,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32"],"web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}' | ||||||
| TEST_11="$(go run ./cmd/gotosocial/... --config-path ./test/test2.yaml debug config)" | TEST_11="$(go run ./cmd/gotosocial/... --config-path ./test/test2.yaml debug config)" | ||||||
| if [ "${TEST_11}" != "${TEST_11_EXPECTED}" ]; then | if [ "${TEST_11}" != "${TEST_11_EXPECTED}" ]; then | ||||||
|     echo "TEST_11 not equal TEST_11_EXPECTED" |     echo "TEST_11 not equal TEST_11_EXPECTED" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue