aboutsummaryrefslogtreecommitdiff
path: root/models/ssh_key.go
diff options
context:
space:
mode:
authorNajeeb R <mohamme89d@gmail.com>2016-12-22 03:35:48 +0300
committer无闻 <u@gogs.io>2016-12-21 19:35:48 -0500
commite5972bbcdea957dc9baf5ed55b0f094d9f30142e (patch)
tree4065415c79e771a6f5e742836559960301103213 /models/ssh_key.go
parent952e510dfa6f4d20842bf2216286710f0b1a233c (diff)
#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.
Diffstat (limited to 'models/ssh_key.go')
-rw-r--r--models/ssh_key.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/models/ssh_key.go b/models/ssh_key.go
index 0925b9ba..e2c3431d 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