From e5972bbcdea957dc9baf5ed55b0f094d9f30142e Mon Sep 17 00:00:00 2001 From: Najeeb R Date: Thu, 22 Dec 2016 03:35:48 +0300 Subject: [PATCH] #3480 Fix new ssh key adding issues (#3565) * #3480 Fix new ssh key adding issues Added regular exp match (108) and remove training new line (111) that cause system to think its an ssh2 key. * #3480 Fix new ssh key adding issues -Sanitizate new lines (windows format) in posted key -Edit sanitization implementation to use string replace for code readability and maintenability. --- models/ssh_key.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/models/ssh_key.go b/models/ssh_key.go index 0925b9ba7..e2c3431d3 100644 --- a/models/ssh_key.go +++ b/models/ssh_key.go @@ -104,8 +104,18 @@ func extractTypeFromBase64Key(key string) (string, error) { // parseKeyString parses any key string in OpenSSH or SSH2 format to clean OpenSSH string (RFC4253). func parseKeyString(content string) (string, error) { - // Transform all legal line endings to a single "\n". - content = strings.NewReplacer("\r\n", "\n", "\r", "\n").Replace(content) + // Transform all legal line endings to a single "\n" + + // Replace all windows full new lines ("\r\n") + content = strings.Replace(content, "\r\n", "\n", -1) + + // Replace all windows half new lines ("\r"), if it happen not to match replace above + content = strings.Replace(content, "\r", "\n", -1) + + // Replace ending new line as its may cause unwanted behaviour (extra line means not a single line key | OpenSSH key) + content = strings.TrimRight(content, "\n") + + // split lines lines := strings.Split(content, "\n") var keyType, keyContent, keyComment string