mirror of https://github.com/voidlizard/hbs2
wip, keymanClient from busyloop
This commit is contained in:
parent
2761af5d60
commit
fde773522c
|
@ -822,7 +822,7 @@ mergeState seed orig = do
|
||||||
-- впоследствии
|
-- впоследствии
|
||||||
--
|
--
|
||||||
|
|
||||||
getStateFromDir0 :: ( MonadIO m
|
getStateFromDir0 :: ( MonadUnliftIO m
|
||||||
, HasClientAPI RefChanAPI UNIX m
|
, HasClientAPI RefChanAPI UNIX m
|
||||||
, HasClientAPI StorageAPI UNIX m
|
, HasClientAPI StorageAPI UNIX m
|
||||||
, HasStorage m
|
, HasStorage m
|
||||||
|
@ -841,7 +841,7 @@ getStateFromDir0 seed = do
|
||||||
|
|
||||||
getStateFromDir seed dir incl excl
|
getStateFromDir seed dir incl excl
|
||||||
|
|
||||||
getStateFromDir :: ( MonadIO m
|
getStateFromDir :: ( MonadUnliftIO m
|
||||||
, HasClientAPI RefChanAPI UNIX m
|
, HasClientAPI RefChanAPI UNIX m
|
||||||
, HasClientAPI StorageAPI UNIX m
|
, HasClientAPI StorageAPI UNIX m
|
||||||
, HasStorage m
|
, HasStorage m
|
||||||
|
@ -883,10 +883,11 @@ getStateFromDir seed path incl excl = do
|
||||||
S.yield (p,e)
|
S.yield (p,e)
|
||||||
|
|
||||||
|
|
||||||
getStateFromRefChan :: forall m . ( MonadIO m
|
getStateFromRefChan :: forall m . ( MonadUnliftIO m
|
||||||
, HasClientAPI RefChanAPI UNIX m
|
, HasClientAPI RefChanAPI UNIX m
|
||||||
, HasClientAPI StorageAPI UNIX m
|
, HasClientAPI StorageAPI UNIX m
|
||||||
, HasStorage m
|
, HasStorage m
|
||||||
|
, HasRunDir m
|
||||||
)
|
)
|
||||||
=> MyRefChan
|
=> MyRefChan
|
||||||
-> m [(FilePath, Entry)]
|
-> m [(FilePath, Entry)]
|
||||||
|
@ -899,6 +900,25 @@ getStateFromRefChan rchan = do
|
||||||
outq <- newTQueueIO
|
outq <- newTQueueIO
|
||||||
tss <- newTVarIO mempty
|
tss <- newTVarIO mempty
|
||||||
|
|
||||||
|
rch <- Client.getRefChanHead @UNIX rchan
|
||||||
|
>>= orThrow RefChanHeadNotFoundException
|
||||||
|
|
||||||
|
let members = view refChanHeadReaders rch & HS.toList
|
||||||
|
|
||||||
|
krl <- liftIO $ runKeymanClient $ loadKeyRingEntries members
|
||||||
|
<&> L.sortOn (Down . fst)
|
||||||
|
<&> fmap snd
|
||||||
|
|
||||||
|
let krs = HM.fromList [ (pk,e) | e@(KeyringEntry pk _ _) <- krl ]
|
||||||
|
|
||||||
|
let findKey gk = do
|
||||||
|
r <- S.toList_ do
|
||||||
|
forM_ (HM.toList $ recipients gk) $ \(pk,box) -> runMaybeT do
|
||||||
|
(KeyringEntry ppk ssk _) <- toMPlus $ HM.lookup pk krs
|
||||||
|
let s = Symm.lookupGroupKey @'HBS2Basic ssk ppk gk
|
||||||
|
for_ s $ lift . S.yield
|
||||||
|
pure $ headMay r
|
||||||
|
|
||||||
-- FIXME: may-be-slow
|
-- FIXME: may-be-slow
|
||||||
walkRefChanTx @UNIX (const $ pure True) rchan $ \txh -> \case
|
walkRefChanTx @UNIX (const $ pure True) rchan $ \txh -> \case
|
||||||
A (AcceptTran ts _ what) -> do
|
A (AcceptTran ts _ what) -> do
|
||||||
|
@ -911,8 +931,6 @@ getStateFromRefChan rchan = do
|
||||||
AnnotatedHashRef w href <- deserialiseOrFail @AnnotatedHashRef (LBS.fromStrict bs)
|
AnnotatedHashRef w href <- deserialiseOrFail @AnnotatedHashRef (LBS.fromStrict bs)
|
||||||
& toMPlus . either (const Nothing) Just
|
& toMPlus . either (const Nothing) Just
|
||||||
|
|
||||||
let findKey gk = liftIO (runKeymanClient (extractGroupKeySecret gk))
|
|
||||||
|
|
||||||
runExceptT (extractMetaData @'HBS2Basic findKey sto href)
|
runExceptT (extractMetaData @'HBS2Basic findKey sto href)
|
||||||
>>= either (const none) ( \meta -> atomically $ writeTQueue outq (orig, (href, meta)) )
|
>>= either (const none) ( \meta -> atomically $ writeTQueue outq (orig, (href, meta)) )
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue