MCPcopy Create free account
hub / github.com/daodst/chat / UploadCrossSigningDeviceKeys

Function UploadCrossSigningDeviceKeys

clientapi/routing/key_crosssigning.go:35–106  ·  view source on GitHub ↗
(
	req *http.Request, userInteractiveAuth *auth.UserInteractive,
	keyserverAPI api.ClientKeyAPI, device *userapi.Device,
	accountAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
)

Source from the content-addressed store, hash-verified

33}
34
35func UploadCrossSigningDeviceKeys(
36 req *http.Request, userInteractiveAuth *auth.UserInteractive,
37 keyserverAPI api.ClientKeyAPI, device *userapi.Device,
38 accountAPI userapi.ClientUserAPI, cfg *config.ClientAPI,
39) util.JSONResponse {
40 uploadReq := &crossSigningRequest{}
41 uploadRes := &api.PerformUploadDeviceKeysResponse{}
42
43 resErr := httputil.UnmarshalJSONRequest(req, &uploadReq)
44 if resErr != nil {
45 return *resErr
46 }
47 sessionID := uploadReq.Auth.Session
48 if sessionID == "" {
49 sessionID = util.RandomString(sessionIDLength)
50 }
51 if uploadReq.Auth.Type != authtypes.LoginTypePassword {
52 return util.JSONResponse{
53 Code: http.StatusUnauthorized,
54 JSON: newUserInteractiveResponse(
55 sessionID,
56 []authtypes.Flow{
57 {
58 Stages: []authtypes.LoginType{authtypes.LoginTypePassword},
59 },
60 },
61 nil,
62 ),
63 }
64 }
65 typePassword := auth.LoginTypePassword{
66 GetAccountByPassword: accountAPI.QueryAccountByPassword,
67 Config: cfg,
68 }
69 if _, authErr := typePassword.Login(req.Context(), &uploadReq.Auth.PasswordRequest); authErr != nil {
70 return *authErr
71 }
72 sessions.addCompletedSessionStage(sessionID, authtypes.LoginTypePassword)
73
74 uploadReq.UserID = device.UserID
75 keyserverAPI.PerformUploadDeviceKeys(req.Context(), &uploadReq.PerformUploadDeviceKeysRequest, uploadRes)
76
77 if err := uploadRes.Error; err != nil {
78 switch {
79 case err.IsInvalidSignature:
80 return util.JSONResponse{
81 Code: http.StatusBadRequest,
82 JSON: jsonerror.InvalidSignature(err.Error()),
83 }
84 case err.IsMissingParam:
85 return util.JSONResponse{
86 Code: http.StatusBadRequest,
87 JSON: jsonerror.MissingParam(err.Error()),
88 }
89 case err.IsInvalidParam:
90 return util.JSONResponse{
91 Code: http.StatusBadRequest,
92 JSON: jsonerror.InvalidParam(err.Error()),

Callers 1

SetupFunction · 0.85

Calls 6

LoginMethod · 0.95
ContextMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected