Esempio n. 1
0
        private async Task Login()
        {
            await DialogService.OpenAsync <LoginModal>("Log in to SkyDocs", options : new DialogOptions()
            {
                ShowClose = false, Width = "450px"
            });

            DialogService.Open <LoadingModal>("Loading...", new Dictionary <string, object>()
            {
                { "Msg", $"Loading files from {skyDocsService.CurrentNetwork}..." }
            }, options: new DialogOptions()
            {
                ShowClose = false, ShowTitle = false, Width = "200px"
            });
            await skyDocsService.LoadDocumentList();

            DialogService.Close();
            StateHasChanged();

            if (skyDocsService.IsMetaMaskLogin)
            {
                var address = await MetaMaskService.GetSelectedAddress();

                var shares = await ShareService.GetSharedDocuments(address);

                var myshares = await ShareService.GetDocumentsIShared(address);

                shares = shares.Union(myshares).ToList();

                var shareData = skyDocsService.SetShares(shares);
                Layout.SetNewShares(shareData.total, shareData.newShares);
            }
        }
Esempio n. 2
0
        private async Task MetaMaskLogin()
        {
            ShowMetaMaskMessage = false;
            Error = null;

            bool hasMetaMask = await MetaMaskService.HasMetaMask();

            if (!hasMetaMask)
            {
                ShowMetaMaskMessage = true;
            }
            else
            {
                try
                {
                    bool isSiteConnected = await MetaMaskService.IsSiteConnected();

                    MetaMaskLogin?storedLogin = null;
                    if (!isSiteConnected)
                    {
                        storedLogin = await GetAndStoreHash();
                    }
                    else
                    {
                        string address = await MetaMaskService.GetSelectedAddress();

                        storedLogin = await MetaMaskStorageService.GetStoredhash(address);

                        if (storedLogin == null)
                        {
                            storedLogin = await GetAndStoreHash();
                        }
                    }

                    SkyDocsService.Login(storedLogin.address, storedLogin.hash, isMetaMaskLogin: true);
                    DialogService.Close();
                }
                catch (NoMetaMaskException)
                {
                    ShowMetaMaskMessage = true;
                }
                catch (UserDeniedException)
                {
                    Error = "MetaMask not allowed to connect to SkyDocs. Please try again.";
                }
                catch (Exception ex)
                {
                    Error = "Failed to sign message. Please try again.";
                    Console.WriteLine(ex);
                }
            }
        }
Esempio n. 3
0
        private async Task <MetaMaskLogin> GetAndStoreHash()
        {
            string signHash = await MetaMaskService.SignTypedData(SignLabel, SignValue);

            string address = await MetaMaskService.GetSelectedAddress();

            MetaMaskLogin storedLogin = new MetaMaskLogin(address, signHash);

            //Store hash in cookie
            await MetaMaskStorageService.SaveStoredHash(storedLogin);

            return(storedLogin);
        }
Esempio n. 4
0
        protected override async Task OnInitializedAsync()
        {
            //Subscribe to events
            MetaMaskService.AccountChangedEvent += MetaMaskService_AccountChangedEvent;
            MetaMaskService.NetworkChangedEvent += MetaMaskService_NetworkChangedEvent;

            HasMetaMask = await MetaMaskService.HasMetaMask();

            if (HasMetaMask)
            {
                await MetaMaskService.ListenToEvents();
            }

            bool isSiteConnected = await MetaMaskService.IsSiteConnected();

            if (isSiteConnected)
            {
                await GetSelectedAddress();
                await GetSelectedNetwork();
            }
        }
Esempio n. 5
0
        private async Task OnMetaMaskShare()
        {
            Error = null;

            var chain = await MetaMaskService.GetSelectedChain();

            if (chain.chain != MetaMask.Blazor.Enums.Chain.Kovan)
            {
                Error    = "Please select the Kovan network in MetaMask. Sharing currently only works on the Kovan testnet.";
                Progress = null;
                return;
            }

            if (SkyDocsService.CurrentSum == null)
            {
                Progress = null;
                return;
            }

            //Store data to share and get URL
            Progress = "Saving sharing secrets to Skynet...";
            StateHasChanged();

            try
            {
                var             existing = SkyDocsService.CurrentSum;
                DocumentSummary shareSum = new DocumentSummary()
                {
                    ContentSeed   = existing.ContentSeed,
                    CreatedDate   = existing.CreatedDate,
                    Id            = existing.Id,
                    ShareOrigin   = existing.ShareOrigin,
                    Title         = existing.Title,
                    PublicKey     = existing.PublicKey,
                    ModifiedDate  = existing.ModifiedDate,
                    PreviewImage  = existing.PreviewImage,
                    PrivateKey    = ShareReadOnly ? null : existing.PrivateKey,
                    StorageSource = SkyDocsService.IsDfinityLogin ? StorageSource.Dfinity : StorageSource.Skynet
                };

                string?url = await ShareService.StoreShareMessage(ShareFormModel.EthAddress, shareSum);

                if (string.IsNullOrEmpty(url))
                {
                    Error = "Error storing shared data. Please try again";
                }
                else
                {
                    Console.WriteLine(url);
                }

                //Smart contract has a function called "share"
                FunctionABI function = new FunctionABI("share", false);

                //With 4 inputs
                var inputsParameters = new[] {
                    new Parameter("address", "receiver"),
                    new Parameter("string", "appId"),
                    new Parameter("string", "shareType"),
                    new Parameter("string", "data")
                };
                function.InputParameters = inputsParameters;

                var functionCallEncoder = new FunctionCallEncoder();

                var data = functionCallEncoder.EncodeRequest(function.Sha3Signature, inputsParameters,
                                                             ShareFormModel.EthAddress,
                                                             "SkyDocs",
                                                             string.Empty,
                                                             url);

                //Using The Share It Network: https://github.com/michielpost/TheShareItNetwork
                string     address  = "0x6E8c5AFd3CFf5f6Ec85c032B68eF2997323a00FD";
                BigInteger weiValue = 0;

                data = data[2..]; //Remove the 0x from the generated string