(ctx context.Context, req *enc.AdminExportKeyRequest)
| 230 | } |
| 231 | |
| 232 | func (ukm *userKeyStore) AdminExportKey(ctx context.Context, req *enc.AdminExportKeyRequest) (*enc.AdminExportKeyResponse, error) { |
| 233 | dao, err := manager.Resolve[key.DAO](ctx) |
| 234 | if err != nil { |
| 235 | return nil, err |
| 236 | } |
| 237 | |
| 238 | rsp := &enc.AdminExportKeyResponse{} |
| 239 | var version int |
| 240 | rsp.Key, version, err = dao.GetKey(ctx, common.PydioSystemUsername, req.KeyID) |
| 241 | if err != nil { |
| 242 | return rsp, err |
| 243 | } |
| 244 | log.Logger(ctx).Debug(fmt.Sprintf("Exporting key %s", rsp.Key.Content)) |
| 245 | |
| 246 | // We set export info |
| 247 | if rsp.Key.Info.Exports == nil { |
| 248 | rsp.Key.Info.Exports = []*enc.Export{} |
| 249 | } |
| 250 | rsp.Key.Info.Exports = append(rsp.Key.Info.Exports, &enc.Export{ |
| 251 | By: common.PydioSystemUsername, |
| 252 | Date: int32(time.Now().Unix()), |
| 253 | }) |
| 254 | |
| 255 | // We update the key |
| 256 | err = dao.SaveKey(ctx, rsp.Key, version) |
| 257 | if err != nil { |
| 258 | return rsp, errors.WithMessagef(errors.StatusInternalServerError, "failed to update key info, cause: %s", err.Error()) |
| 259 | } |
| 260 | |
| 261 | pwd, err := ukm.masterFromCache(ctx) |
| 262 | if err != nil { |
| 263 | return nil, err |
| 264 | } |
| 265 | |
| 266 | if version < 4 { |
| 267 | if p, e := ukm.legacyFromCache(ctx, pwd); e == nil { |
| 268 | pwd = p |
| 269 | } else { |
| 270 | return nil, e |
| 271 | } |
| 272 | } |
| 273 | err = open(rsp.Key, pwd) |
| 274 | if err != nil { |
| 275 | return rsp, errors.WithMessagef(errors.StatusInternalServerError, "unable to decrypt for %s with key %s, cause: %s", common.PydioSystemUsername, req.KeyID, err) |
| 276 | } |
| 277 | |
| 278 | err = seal(rsp.Key, []byte(req.StrPassword)) |
| 279 | if err != nil { |
| 280 | return rsp, errors.WithMessagef(errors.StatusInternalServerError, "unable to encrypt for %s with key %s for export, cause: %s", common.PydioSystemUsername, req.KeyID, err) |
| 281 | } |
| 282 | return rsp, nil |
| 283 | } |
| 284 | |
| 285 | // Create a default key or create a system key with a given ID |
| 286 | func (ukm *userKeyStore) createSystemKey(ctx context.Context, keyID string, keyLabel string) error { |
nothing calls this directly
no test coverage detected