mirror of
				https://gitcode.com/gitea/gitea.git
				synced 2025-10-25 12:26:40 +08:00 
			
		
		
		
	Respect original content when creating secrets (#24745)
Fix #24721. Follow what GitHub does: - Don't trim spaces for secrets. - Newline should be `\n` instead of `\r\n`. Did some tests with: ```yaml name: secrets on: push jobs: show_secrets: runs-on: ubuntu-latest steps: - name: Dump secrets context run: echo '${{ toJSON(secrets) }}' | base64 ``` `AAAAAA`: ```text AAAAAA AAAAAA ``` `BBBBBB`: ```text BBBBBB BBBBBB ``` On GitHub: <img width="675" alt="image" src="https://github.com/go-gitea/gitea/assets/9418365/0ec60652-c2a3-47bb-9f9d-7e81665355a8"> On Gitea (before): <img width="673" alt="image" src="https://github.com/go-gitea/gitea/assets/9418365/cce818bf-5edc-4656-86e1-2c81c304cdb2"> On Gitea (after): <img width="673" alt="image" src="https://github.com/go-gitea/gitea/assets/9418365/0b3b15af-4d48-4bab-a334-4738a1b0eb4a">
This commit is contained in:
		| @ -59,7 +59,7 @@ func newSecret(ownerID, repoID int64, name, data string) *Secret { | |||||||
|  |  | ||||||
| // InsertEncryptedSecret Creates, encrypts, and validates a new secret with yet unencrypted data and insert into database | // InsertEncryptedSecret Creates, encrypts, and validates a new secret with yet unencrypted data and insert into database | ||||||
| func InsertEncryptedSecret(ctx context.Context, ownerID, repoID int64, name, data string) (*Secret, error) { | func InsertEncryptedSecret(ctx context.Context, ownerID, repoID int64, name, data string) (*Secret, error) { | ||||||
| 	encrypted, err := secret_module.EncryptSecret(setting.SecretKey, strings.TrimSpace(data)) | 	encrypted, err := secret_module.EncryptSecret(setting.SecretKey, data) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ package secrets | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models/db" | 	"code.gitea.io/gitea/models/db" | ||||||
| 	secret_model "code.gitea.io/gitea/models/secret" | 	secret_model "code.gitea.io/gitea/models/secret" | ||||||
| @ -27,7 +28,15 @@ func SetSecretsContext(ctx *context.Context, ownerID, repoID int64) { | |||||||
| func PerformSecretsPost(ctx *context.Context, ownerID, repoID int64, redirectURL string) { | func PerformSecretsPost(ctx *context.Context, ownerID, repoID int64, redirectURL string) { | ||||||
| 	form := web.GetForm(ctx).(*forms.AddSecretForm) | 	form := web.GetForm(ctx).(*forms.AddSecretForm) | ||||||
|  |  | ||||||
| 	s, err := secret_model.InsertEncryptedSecret(ctx, ownerID, repoID, form.Title, form.Content) | 	content := form.Content | ||||||
|  | 	// Since the content is from a form which is a textarea, the line endings are \r\n. | ||||||
|  | 	// It's a standard behavior of HTML. | ||||||
|  | 	// But we want to store them as \n like what GitHub does. | ||||||
|  | 	// And users are unlikely to really need to keep the \r. | ||||||
|  | 	// Other than this, we should respect the original content, even leading or trailing spaces. | ||||||
|  | 	content = strings.ReplaceAll(content, "\r\n", "\n") | ||||||
|  |  | ||||||
|  | 	s, err := secret_model.InsertEncryptedSecret(ctx, ownerID, repoID, form.Title, content) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("InsertEncryptedSecret: %v", err) | 		log.Error("InsertEncryptedSecret: %v", err) | ||||||
| 		ctx.Flash.Error(ctx.Tr("secrets.creation.failed")) | 		ctx.Flash.Error(ctx.Tr("secrets.creation.failed")) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jason Song
					Jason Song