summaryrefslogtreecommitdiff
path: root/Backend
diff options
context:
space:
mode:
Diffstat (limited to 'Backend')
-rw-r--r--Backend/WORM.hs18
1 files changed, 16 insertions, 2 deletions
diff --git a/Backend/WORM.hs b/Backend/WORM.hs
index d7220a431..678784fdf 100644
--- a/Backend/WORM.hs
+++ b/Backend/WORM.hs
@@ -22,8 +22,8 @@ backend = Backend
{ backendVariety = WORMKey
, getKey = keyValue
, verifyKeyContent = Nothing
- , canUpgradeKey = Nothing
- , fastMigrate = Nothing
+ , canUpgradeKey = Just needsUpgrade
+ , fastMigrate = Just removeSpaces
, isStableKey = const True
}
@@ -42,3 +42,17 @@ keyValue source = do
, keySize = Just sz
, keyMtime = Just $ modificationTime stat
}
+
+{- Old WORM keys could contain spaces, and can be upgraded to remove them. -}
+needsUpgrade :: Key -> Bool
+needsUpgrade key = ' ' `elem` keyName key
+
+removeSpaces :: Key -> Backend -> AssociatedFile -> Maybe Key
+removeSpaces oldkey newbackend _
+ | migratable = Just $ oldkey
+ { keyName = reSanitizeKeyName (keyName oldkey) }
+ | otherwise = Nothing
+ where
+ migratable = oldvariety == newvariety
+ oldvariety = keyVariety oldkey
+ newvariety = backendVariety newbackend