From 3e480df721aad3123a55d057b259d47b31a1b918 Mon Sep 17 00:00:00 2001
From: zachmann <gabriel.zachmann@kit.edu>
Date: Thu, 20 Jan 2022 09:05:51 +0100
Subject: [PATCH] fix problems in ssh

---
 internal/db/dbmigrate/scripts/v0.4.0.pre.sql  | 2 +-
 internal/endpoints/settings/grants/ssh/ssh.go | 3 +++
 internal/server/ssh/at.go                     | 6 ++++--
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/internal/db/dbmigrate/scripts/v0.4.0.pre.sql b/internal/db/dbmigrate/scripts/v0.4.0.pre.sql
index 343c2b6e..e2f9253b 100644
--- a/internal/db/dbmigrate/scripts/v0.4.0.pre.sql
+++ b/internal/db/dbmigrate/scripts/v0.4.0.pre.sql
@@ -519,7 +519,7 @@ BEGIN
     DECLARE rtCount INT;
 
     SELECT m.`user_id` FROM MTokens m WHERE m.id = MTID INTO uid;
-    SELECT s.MT_id, s.key_id FROM SSHPublicKeys s WHERE s.ssh_key_fp = FP AND s.user = uid INTO sshMTID, cid;
+    SELECT s.MT_id, s.MT_crypt FROM SSHPublicKeys s WHERE s.ssh_key_fp = FP AND s.user = uid INTO sshMTID, cid;
     SELECT m.`rt_id` FROM MTokens m WHERE m.id = sshMTID INTO rid;
     SELECT k.`key_id` FROM RT_EncryptionKeys k WHERE k.rt_id = rid AND k.MT_id = sshMTID INTO rckid;
     CALL EncryptionKeys_Delete(rckid);
diff --git a/internal/endpoints/settings/grants/ssh/ssh.go b/internal/endpoints/settings/grants/ssh/ssh.go
index 9326ba65..ade356d7 100644
--- a/internal/endpoints/settings/grants/ssh/ssh.go
+++ b/internal/endpoints/settings/grants/ssh/ssh.go
@@ -142,6 +142,9 @@ func handleAddSSHKey(ctx *fiber.Ctx) error {
 		}.Send(ctx)
 	}
 	sshKeyFP := gossh.FingerprintSHA256(sshKey)
+	if len(req.Capabilities) == 0 {
+		req.Capabilities = api.Capabilities{api.CapabilityAT}
+	}
 
 	return settings.HandleSettingsHelper(
 		ctx, &req.Mytoken, api.CapabilitySSHGrant, event.FromNumber(event.SSHKeyAdded, ""), fiber.StatusOK,
diff --git a/internal/server/ssh/at.go b/internal/server/ssh/at.go
index d241981d..8f96dfa1 100644
--- a/internal/server/ssh/at.go
+++ b/internal/server/ssh/at.go
@@ -18,10 +18,11 @@ import (
 func handleSSHAT(reqData []byte, s ssh.Session) error {
 	ctx := s.Context()
 	req := pkg.NewAccessTokenRequest()
-	req.GrantType = model.GrantTypeMytoken
 	if len(reqData) > 0 {
 		if err := json.Unmarshal(reqData, &req); err != nil {
-			return err
+			if err.Error() != "token not valid" {
+				return err
+			}
 		}
 	}
 	mt := ctx.Value("mytoken").(*mytoken.Mytoken)
@@ -29,6 +30,7 @@ func handleSSHAT(reqData []byte, s ssh.Session) error {
 		IP:        ctx.Value("ip").(string),
 		UserAgent: ctx.Value("user_agent").(string),
 	}
+	req.GrantType = model.GrantTypeMytoken
 	req.Mytoken = mt.ToUniversalMytoken()
 	rlog := logger.GetSSHRequestLogger(ctx.Value("session").(string))
 	rlog.Debug("Handle AT from ssh")
-- 
GitLab