This commit is contained in:
Dmitry Zuikov 2024-09-10 12:59:32 +03:00
parent a2868c2dcf
commit 7ae26ef108
4 changed files with 89 additions and 3 deletions

View File

@ -62,3 +62,5 @@ fixme-comments ";" "--"
(refchan 3WtddmcE8zzgBAPR7Bu7mKMaVMTN423NNXSPUJp3Hx42)
(author 3fKeGjaDGBKtNqeNBPsThh8vSj4TPiqaaK7uHbB8MQUV)

View File

@ -136,6 +136,7 @@ runFixmeCLI m = do
<*> newTVarIO (1,3)
<*> newTVarIO mzero
<*> newTVarIO mzero
<*> newTVarIO mzero
-- FIXME: defer-evolve
-- не все действия требуют БД,
@ -408,13 +409,19 @@ runTop forms = do
_ -> throwIO $ BadFormException @C nil
entry $ bindMatch "author" $ nil_ \case
[SignPubKeyLike au] -> do
t <- lift $ asks fixmeEnvAuthor
atomically $ writeTVar t (Just au)
_ -> throwIO $ BadFormException @C nil
entry $ bindMatch "git:commits" $ const $ do
co <- lift listCommits <&> fmap (mkStr @C . view _1)
pure $ mkList co
-- TODO: implement-fixme:refchan:export
entry $ bindMatch "fixme:refchan:export" $ nil_ \case
_ -> none
entry $ bindMatch "fixme:refchan:export" $ nil_ $ const do
void $ lift $ refchanExport
entry $ bindMatch "git:blobs" $ \_ -> do
blobs <- lift (listBlobs Nothing)

View File

@ -12,22 +12,31 @@ import Fixme.Scan as Scan
import HBS2.Git.Local.CLI
import HBS2.OrDie
import HBS2.Data.Types.SignedBox
import HBS2.Base58
import HBS2.Merkle
import HBS2.Data.Types.Refs
import HBS2.Storage
import HBS2.Storage.Compact
import HBS2.Storage.Operations.ByteString
import HBS2.System.Dir
import HBS2.Net.Auth.Credentials
import DBPipe.SQLite hiding (field)
import HBS2.KeyMan.Keys.Direct
import Data.Config.Suckless
import Data.Config.Suckless.Script.File
import Data.List.Split (chunksOf)
import Control.Applicative
import Data.Aeson.Encode.Pretty as Aeson
import Data.ByteString (ByteString)
import Data.ByteString.Lazy qualified as LBS
import Data.ByteString.Lazy.Char8 qualified as LBS8
import Data.ByteString qualified as BS
import Data.Either
import Data.Maybe
import Data.HashSet qualified as HS
@ -42,6 +51,7 @@ import Data.Text.IO qualified as Text
import Data.Text.Encoding (encodeUtf8)
import Text.InterpolatedString.Perl6 (qc)
import Data.Coerce
import Data.Word
import Control.Monad.Identity
import Lens.Micro.Platform
import System.Process.Typed
@ -324,3 +334,68 @@ cat_ hash = do
liftIO $ action dict fallback
data FixmeExported =
FixmeExported
{ exportedKey :: FixmeKey
, exportedWeight :: Word64
, exportedName :: FixmeAttrName
, exportedValue :: FixmeAttrVal
}
deriving stock Generic
instance FromRow FixmeExported
instance ToRow FixmeExported
instance Serialise FixmeExported
refchanExport :: FixmePerks m => FixmeM m ()
refchanExport = do
sto <- getStorage
rchanAPI <- getClientAPI @RefChanAPI @UNIX
chan <- asks fixmeEnvRefChan
>>= readTVarIO
>>= orThrowUser "refchan not set"
au <- asks fixmeEnvAuthor
>>= readTVarIO
>>= orThrowUser "author's key not set"
creds <- runKeymanClientRO $ loadCredentials au
>>= orThrowUser "can't read credentials"
let (pk,sk) = (view peerSignPk creds, view peerSignSk creds)
-- withRPC2 @RefChanAPI soname $ \caller -> do
-- for_ items $ \it -> do
-- let str = show (pretty it)
-- putStr str
-- let lbs = str & Text.pack & Text.encodeUtf8
-- let box = makeSignedBox @L4Proto @BS.ByteString pk sk lbs
-- void $ callService @RpcRefChanPropose caller (chan, box)
withState do
what <- select_ @_ @FixmeExported [qc|select o,w,k,cast (v as text) from object order by o, k, v|]
let chu = chunksOf 10000 what
for_ chu $ \x -> do
h <- writeAsMerkle sto (serialise x)
let tx = AnnotatedHashRef Nothing (HashRef h)
let lbs = serialise tx
liftIO $ print (LBS.length lbs)
let box = makeSignedBox @'HBS2Basic @BS.ByteString pk sk (LBS.toStrict lbs)
warn $ "POST" <+> red "unencrypted!" <+> pretty (hashObject @HbSync (serialise box))
r <- callRpcWaitMay @RpcRefChanPropose (TimeoutSec 1) rchanAPI (chan, box)
when (isNothing r) do
err $ red "hbs2-peer rpc calling timeout"

View File

@ -356,6 +356,7 @@ data FixmeEnv =
, fixmeEnvCatContext :: TVar (Int,Int)
, fixmeEnvMyEndpoints :: TVar (Maybe MyPeerClientEndpoints)
, fixmeEnvRefChan :: TVar (Maybe (PubKey 'Sign 'HBS2Basic))
, fixmeEnvAuthor :: TVar (Maybe (PubKey 'Sign 'HBS2Basic))
}
@ -424,6 +425,7 @@ fixmeEnvBare =
<*> newTVarIO (1,3)
<*> newTVarIO mzero
<*> newTVarIO mzero
<*> newTVarIO mzero
withFixmeEnv :: FixmePerks m => FixmeEnv -> FixmeM m a -> m a
withFixmeEnv env what = runReaderT ( fromFixmeM what) env