示例#1
0
        public App()
        {
            APIConnector = new APIConnector();
            User         = new User();

            InitializeComponent();
        }
        public bool SendE2ETextMessage(ThreemaE2ETextMessage threemaE2ETextMessage)
        {
            try
            {
                try
                {
                    _log.LogDebug("ThreemaController.SendE2ETextMessage: ModelState {0}, ThreemaE2ETextMessage {1}", ModelState.IsValid, threemaE2ETextMessage.ToString());
                }
                catch (Exception ex)
                {
                    _log.LogError("ThreemaController.SendE2ETextMessage 1 " + ex.Message);
                }

                string       myPrivateKey = this._configuration["Threema:PrivateKey"];
                string       myThreemaId  = this._configuration["Threema:ThreemaId"];
                string       mySecret     = this._configuration["Threema:Secret"];
                APIConnector apiConnector = new APIConnector(myThreemaId, mySecret, null);
                string       text         = DataUtils.Utf8Endcode(threemaE2ETextMessage.Text.Trim());
                Key          privateKey   = Key.DecodeKey(myPrivateKey);
                E2EHelper    e2EHelper    = new E2EHelper(apiConnector, privateKey.key);
                String       messageId    = e2EHelper.SendTextMessage(threemaE2ETextMessage.To, text);
                _log.LogDebug("ThreemaController.SendE2ETextMessage: messege sendet to {0}", threemaE2ETextMessage.To);
                return(true);
            }
            catch (Exception ex)
            {
                _log.LogError("ThreemaController.SendE2ETextMessage 2 " + ex.Message);
                return(false);
            }
        }
示例#3
0
        public ServiceResult Get()
        {
            string        url       = _configuration.GetSection("Bank").GetSection("URL").Value;
            APIConnector  connector = new APIConnector(_configuration);
            ServiceResult result    = connector.GetObjectFromRemote();

            return(result);
        }
        private async Task CleanupUnitTest()
        {
            TestStatusMsg("Cleaning up test...");
            string basepath = txtFolderPath.Text;

            if (basepath.EndsWith("/"))
            {
                basepath.TrimEnd(new char[] { '/' });
            }
            string tfoldername = basepath + "/Cloud Elements API Test Folder";

            //check for file on disk
            string fn = System.IO.Path.Combine(WorkPath, "SFCE_test_file_1.txt");

            if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(fn)))
            {
                if (System.IO.File.Exists(fn))
                {
                    try
                    {
                        System.IO.File.Delete(fn);
                        TestStatusMsg("Downloaded test file deleted");
                    }
                    catch (System.IO.IOException ix)
                    {
                        TestStatusMsg("Downloaded test file NOT deleted - " + ix.Message);
                    }
                }
            }


            //check for folder
            try
            {
                List <Cloud_Elements_API.CloudFile> fe = await APIConnector.ListFolderContents(Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, tfoldername, chkWithTags.Checked);

                //if exists, delete
                try
                {
                    bool Result = await APIConnector.DeleteFolder(Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, tfoldername, false);

                    TestStatusMsg("Test folder deleted");
                }
                catch (Exception e)
                {
                    TestStatusMsg("Delete Folder failed: " + e.Message);
                    throw e;
                }
            }
            catch (System.Net.Http.HttpRequestException e)
            {
                TestStatusMsg("Nothing to clean: " + e.Message);
            }

            TestStatusMsg("Test cleanup complete");
        }
示例#5
0
    void Start()
    {
        Screen.orientation = ScreenOrientation.Portrait;

        //Make Connectivity Check
        apiConnector = new APIConnector(this);
        string jsonToSend = @"{'email':'" + "null" + "', 'password':'******'}";

        apiConnector.makeRequest(CheckConnectivity, "test", jsonToSend);
    }
示例#6
0
        /// <summary>
        /// Wrapper to lookup/fetch public key <see cref="Threema.MsgApi.APIConnector.LookupKey"/>
        /// </summary>
        /// <param name="threemaId">Id for lookup</param>
        /// <param name="from">Sender id</param>
        /// <param name="secret">Sender secret</param>
        /// <param name="apiUrl">Optional api url</param>
        /// <returns>public key has hex-string</returns>
        public string LookupKey(string threemaId, string from, string secret, string apiUrl = APIConnector.DEFAULTAPIURL)
        {
            APIConnector apiConnector = this.CreateConnector(from, secret, apiUrl);

            byte[] publicKey = apiConnector.LookupKey(threemaId);
            if (publicKey != null)
            {
                return(new Key(Key.KeyType.PUBLIC, publicKey).Encode());
            }
            return(null);
        }
示例#7
0
        public async System.Threading.Tasks.Task GetEmptyUsernameTest()
        {
            APIConnector   Connector = new APIConnector();
            APIDataGrabber Grabber   = new APIDataGrabber(); // download data from API
            User           EmptyUser = new User("");

            await Connector.ConnectWithAPI();

            Connector.GiveSpotifyAccessFor(Grabber);
            Grabber.UploadUserData(EmptyUser);

            Assert.IsNull(EmptyUser.Name);
        }
示例#8
0
        protected override void Execute()
        {
            string threemaId = this.threemaIdField.Value;
            string from      = this.fromField.Value;
            string secret    = this.secretField.Value;

            APIConnector apiConnector = this.CreateConnector(from, secret);

            byte[] publicKey = apiConnector.LookupKey(threemaId);
            if (publicKey != null)
            {
                System.Console.WriteLine(new Key(Key.KeyType.PUBLIC, publicKey).Encode());
            }
        }
        protected override void Execute()
        {
            string phoneNo = this.phoneNoField.Value;
            string from    = this.fromField.Value;
            string secret  = this.secretField.Value;

            APIConnector apiConnector = this.CreateConnector(from, secret);
            string       id           = apiConnector.LookupPhone(phoneNo);

            if (id != null)
            {
                System.Console.WriteLine(id);
            }
        }
示例#10
0
        protected override void Execute()
        {
            string to     = this.threemaId.Value;
            string from   = this.fromField.Value;
            string secret = this.secretField.Value;

            //string text = ReadStream(System.Console.In, Encoding.UTF8).Trim();
            string text = DataUtils.Utf8Endcode(System.Console.ReadLine().Trim());

            APIConnector apiConnector = this.CreateConnector(from, secret);
            string       messageId    = apiConnector.SendTextMessageSimple(to, text);

            System.Console.WriteLine(messageId);
        }
示例#11
0
        public async System.Threading.Tasks.Task GetPlaylistsImagesURLTest()
        {
            APIConnector   Connector = new APIConnector();
            APIDataGrabber Grabber   = new APIDataGrabber();                  // download data from API
            User           User      = new User("213pado37eomvngbs4vac5qra"); // Paweł Tomaszewski

            await Connector.ConnectWithAPI();

            Connector.GiveSpotifyAccessFor(Grabber);
            Grabber.UploadUserData(User);

            string expectedURL = "https://i.scdn.co/image/2654511f372969510abf52e52fee458ceeb15bed";

            Assert.AreEqual(expectedURL, User.Playlists[1].ImageURL);
        }
示例#12
0
        public async System.Threading.Tasks.Task GetPlaylistsNamesTest()
        {
            APIConnector   Connector = new APIConnector();
            APIDataGrabber Grabber   = new APIDataGrabber();                  // download data from API
            User           User      = new User("213pado37eomvngbs4vac5qra"); // Paweł Tomaszewski

            await Connector.ConnectWithAPI();

            Connector.GiveSpotifyAccessFor(Grabber);
            Grabber.UploadUserData(User);

            string expectedPlaylistName = "Music";

            Assert.AreEqual(expectedPlaylistName, User.Playlists[1].Name);
        }
示例#13
0
        public async System.Threading.Tasks.Task GetCorrectUsernameTest()
        {
            APIConnector   Connector = new APIConnector();
            APIDataGrabber Grabber   = new APIDataGrabber();                  // download data from API
            User           User      = new User("213pado37eomvngbs4vac5qra"); // Paweł Tomaszewski

            await Connector.ConnectWithAPI();

            Connector.GiveSpotifyAccessFor(Grabber);
            Grabber.UploadUserData(User);

            Assert.IsNotNull(User.Name);
            string expected = "Paweł Tomaszewski";

            Assert.AreEqual(expected, User.Name);
        }
        private string GetPublicKey(string threemaId)
        {
            string       myThreemaId  = this._configuration["Threema:ThreemaId"];
            string       mySecret     = this._configuration["Threema:Secret"];
            APIConnector apiConnector = new APIConnector(myThreemaId, mySecret, null);

            byte[] publicKey = apiConnector.LookupKey(threemaId);
            if (publicKey != null)
            {
                string publicKeyEncoded = new Key(Key.KeyType.PUBLIC, publicKey).Encode();
                return(publicKeyEncoded);
            }
            else
            {
                throw new Exception(String.Format("public key for {0} not found", threemaId));
            }
        }
        public async Task RetryHandler_CanRetry()
        {
            var apiResponse = new Mock <IAPIResponse <string> >();

            apiResponse.SetupGet(a => a.Body).Returns("Hello World");

            var response = new Mock <IResponse>();

            response.SetupGet(r => r.ContentType).Returns("application/json");
            response.SetupGet(r => r.StatusCode).Returns(HttpStatusCode.OK);
            response.SetupGet(r => r.Body).Returns("\"Hello World\"");

            var authenticator = new Mock <IAuthenticator>();
            var serializer    = new Mock <IJSONSerializer>();

            serializer.Setup(s => s.DeserializeResponse <string>(It.IsAny <IResponse>())).Returns(apiResponse.Object);

            var httpClient = new Mock <IHTTPClient>();

            httpClient.Setup(h => h.DoRequest(It.IsAny <IRequest>())).Returns(Task.FromResult(response.Object));

            var retryHandler = new Mock <IRetryHandler>();

            retryHandler.Setup(r =>
                               r.HandleRetry(
                                   It.IsAny <IRequest>(),
                                   It.IsAny <IResponse>(),
                                   It.IsAny <IRetryHandler.RetryFunc>()
                                   )
                               ).Returns((IRequest request, IResponse _, IRetryHandler.RetryFunc retry) => retry(request));

            var apiConnector = new APIConnector(
                new Uri("https://spotify.com"),
                authenticator.Object,
                serializer.Object,
                httpClient.Object,
                retryHandler.Object,
                null
                );
            await apiConnector.SendAPIRequest <string>(new Uri("/me", UriKind.Relative), HttpMethod.Get).ConfigureAwait(false);

            serializer.Verify(s => s.SerializeRequest(It.IsAny <IRequest>()), Times.Once);
            authenticator.Verify(a => a.Apply(It.IsAny <IRequest>(), It.IsAny <IAPIConnector>()), Times.Exactly(2));
            httpClient.Verify(h => h.DoRequest(It.IsAny <IRequest>()), Times.Exactly(2));
            serializer.Verify(s => s.DeserializeResponse <string>(response.Object), Times.Once);
        }
        public IActionResult Index()
        {
            string           myThreemaId  = this._configuration["Threema:ThreemaId"];
            string           mySecret     = this._configuration["Threema:Secret"];
            APIConnector     apiConnector = new APIConnector(myThreemaId, mySecret, null);
            CreditsViewModel creditsViewModel;

            try
            {
                creditsViewModel = new CreditsViewModel()
                {
                    Credits = apiConnector.LookupCredits()
                };
            }
            catch (Exception ex)
            {
                creditsViewModel = new CreditsViewModel()
                {
                    ErrorMessage = ex.Message
                };
            }
            return(View(creditsViewModel));
        }
示例#17
0
 protected void ClearToken()
 {
     APIConnector.ClearAuthHeader();
 }
        async Task <string> TestAsyncGetFileMeta()
        {
            string tfoldername = AsyncBasePath; // as set at start of tests

            System.Collections.Generic.Queue <Task <Cloud_Elements_API.CloudFile> >     MetaTasks      = new System.Collections.Generic.Queue <Task <Cloud_Elements_API.CloudFile> >();
            System.Collections.Generic.List <Cloud_Elements_API.CloudElementsConnector> ConnectorsUsed = new System.Collections.Generic.List <Cloud_Elements_API.CloudElementsConnector>();
            DateTime Started   = DateTime.Now;
            int      MetaCount = 0;

            for (int rr = 1; rr <= 4; rr++)
            {
                for (int i = 1; i <= 16; i++)
                {
                    string TargetPath = tfoldername + string.Format("/SFCE_test_file_{0}.txt", i);
                    Cloud_Elements_API.CloudElementsConnector ViaConnector = null;
                    ViaConnector = APIConnector.Clone();
                    Task <Cloud_Elements_API.CloudFile> OneMeta = Cloud_Elements_API.FileOperations.GetCloudFileInfo(ViaConnector, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, TargetPath);
                    ConnectorsUsed.Add(ViaConnector);
                    MetaTasks.Enqueue(OneMeta);
                    if (SerializeGetFileMetadataRequests)
                    {
                        OneMeta.Wait();
                    }
                    MetaCount += 1;
                }
            }

            int rewaitCnt = 0;

            System.Text.StringBuilder Summary = new System.Text.StringBuilder();
            while (MetaTasks.Count > 0)
            {
                Task <Cloud_Elements_API.CloudFile> AnUpload = MetaTasks.Dequeue();

                if (AnUpload.GetAwaiter().IsCompleted)
                {
                    try
                    {
                        Cloud_Elements_API.CloudFile Result = await AnUpload;
                        if (Result != null)
                        {
                            Summary.AppendFormat("\t{5}: Task {2} File Info for {0}, id={1}, ok={3} \r\n", Result.name, Result.id, AnUpload.Id, !AnUpload.IsFaulted,
                                                 0, Cloud_Elements_API.Tools.TraceTimeNow());
                        }
                        else
                        {
                            Summary.AppendFormat("\t{5}: Task {2} did not obtain file Info for {0}, id={1}, ok={3} \r\n", "", "", AnUpload.Id, !AnUpload.IsFaulted,
                                                 0, Cloud_Elements_API.Tools.TraceTimeNow());
                        }
                    }
                    catch (Exception ex)
                    {
                        Summary.AppendFormat("\t{5}: Task {2} File Info Exception {0}, ok={3} \r\n", ex.Message, 0, AnUpload.Id, !AnUpload.IsFaulted,
                                             0, Cloud_Elements_API.Tools.TraceTimeNow());
                    }
                }
                else
                {
                    //   if (AnUpload.Status == TaskStatus.WaitingForActivation) AnUpload.ci
                    MetaTasks.Enqueue(AnUpload);
                    rewaitCnt += 1;
                    System.Threading.Thread.Sleep(128);
                }
            }

            foreach (Cloud_Elements_API.CloudElementsConnector ViaConnector in ConnectorsUsed)
            {
                ViaConnector.Close();
            }
            ConnectorsUsed.Clear();

            Summary.AppendFormat("\t{0}: Finished \r\n", Cloud_Elements_API.Tools.TraceTimeNow());
            double RequiredMS = DateTime.Now.Subtract(Started).TotalMilliseconds;

            Summary.Insert(0, string.Format("Got {0} file infos in {1:F2}s, average {2:F2}s / file; Async Waits: {3} \r\n", MetaCount, RequiredMS / 1000d, RequiredMS / (1000d * MetaCount),
                                            rewaitCnt, 0));
            return(Summary.ToString());
        }
        async Task <string> TestMultiFileAsyncUploads()
        {
            string tfoldername = AsyncBasePath; // set at start of tests

            System.Collections.Generic.Queue <Task <Cloud_Elements_API.CloudFile> >     UploadTasks    = new System.Collections.Generic.Queue <Task <Cloud_Elements_API.CloudFile> >();
            System.Collections.Generic.List <Cloud_Elements_API.CloudElementsConnector> ConnectorsUsed = new System.Collections.Generic.List <Cloud_Elements_API.CloudElementsConnector>();


            DateTime Started     = DateTime.Now;
            int      uploadCount = 0;

            System.IO.Stream teststream;
            string           RandomContent = GenerateRandomContent(256 * 1024 * 8);

            if (NumberOfFilesAlreadyUploaded == 0)
            {
                DownloadTestExpectedHash = RandomContent.GetHashCode();
            }
            long TotalBytes = 0;

            for (int i = 1; i <= 8; i++)
            {
                teststream    = GenerateStreamFromString(RandomContent);
                RandomContent = RandomContent.Substring(RandomContent.Length / 2);
                string        MIMEType    = Cloud_Elements_API.Tools.FileTypeToMimeContentType("txt");
                List <String> TagList     = new List <String>();
                long          sizeInBytes = teststream.Length;
                TotalBytes += sizeInBytes;
                string TargetPath = tfoldername + string.Format("/SFCE_test_file_{0}.txt", i + NumberOfFilesAlreadyUploaded);
                Cloud_Elements_API.CloudElementsConnector ViaConnector = APIConnector.Clone();
                ConnectorsUsed.Add(ViaConnector);
                Task <Cloud_Elements_API.CloudFile> AnUpload = ViaConnector.PostFile(teststream, MIMEType,
                                                                                     TargetPath, "Temporary test file",
                                                                                     TagList.ToArray(), false, sizeInBytes);
                //System.Runtime.CompilerServices.ConfiguredTaskAwaitable<Cloud_Elements_API.CloudFile> AwaitableUpload;
                //AwaitableUpload                  =    AnUpload.ConfigureAwait(false);

                UploadTasks.Enqueue(AnUpload);
                uploadCount += 1;
            }

            int rewaitCnt = 0;

            System.Text.StringBuilder Summary = new System.Text.StringBuilder();
            while (UploadTasks.Count > 0)
            {
                Task <Cloud_Elements_API.CloudFile> AnUpload = UploadTasks.Dequeue();

                if (AnUpload.GetAwaiter().IsCompleted)
                {
                    try
                    {
                        Cloud_Elements_API.CloudFile Result = await AnUpload;
                        Summary.AppendFormat("\t{5}: Task {2} Uploaded {4:F1}KB to {0}, id={1}, ok={3} \r\n", Result.name, Result.id, AnUpload.Id, !AnUpload.IsFaulted,
                                             Result.size / 1024d, Cloud_Elements_API.Tools.TraceTimeNow());
                    }
                    catch (Exception ex)
                    {
                        Summary.AppendFormat("\t{5}: Task {2} Upload Exception {0}, ok={3} \r\n", ex.Message, 0, AnUpload.Id, !AnUpload.IsFaulted,
                                             0, Cloud_Elements_API.Tools.TraceTimeNow());
                    }
                }
                else
                {
                    //   if (AnUpload.Status == TaskStatus.WaitingForActivation) AnUpload.ci
                    UploadTasks.Enqueue(AnUpload);
                    rewaitCnt += 1;
                    System.Threading.Thread.Sleep(128);
                }
            }

            foreach (Cloud_Elements_API.CloudElementsConnector ViaConnector in ConnectorsUsed)
            {
                ViaConnector.Close();
            }
            ConnectorsUsed.Clear();

            Summary.AppendFormat("\t{0}: Finished \r\n", Cloud_Elements_API.Tools.TraceTimeNow());
            double RequiredMS = DateTime.Now.Subtract(Started).TotalMilliseconds;

            Summary.Insert(0, string.Format("Uploaded {0} files in {1:F2}s, average {2:F2}s / file, {4:F2}ms/KB; Async Waits: {3} \r\n", uploadCount, RequiredMS / 1000d, RequiredMS / (1000d * uploadCount),
                                            rewaitCnt, (RequiredMS) / (TotalBytes / 1024d)));
            return(Summary.ToString());
        }
示例#20
0
 protected async Task <ResponseConsult <T> > PutAsJsonAsync <T>(string _path, object _requestData)
 {
     return(await APIConnector.PutAsJsonAsync <T>(_path, _requestData));
 }
示例#21
0
 APIConnector()
 {
     ApiConnector = this;
 }
示例#22
0
 protected async Task <ResponseConsult <T> > DeleteAsync <T>(string _path)
 {
     return(await APIConnector.DeleteAsync <T>(_path));
 }
示例#23
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            JObject jo = JObject.Parse(APIConnector.Get(tbUrl.Text));

            lbImg.Text = "<img src='data: image / png; base64,  " + jo.GetValue("image") + "' />";
        }
示例#24
0
        /// <summary>
        /// Wrapper to send simple message <see cref="Threema.MsgApi.APIConnector.SendTextMessageSimple"/>
        /// </summary>
        /// <param name="to">Recipient id</param>
        /// <param name="from">Sender id</param>
        /// <param name="secret">Sender sercret</param>
        /// <param name="text">Text message</param>
        /// <param name="apiUrl">Optional api url</param>
        /// <returns>Message id</returns>
        public string SendTextMessageSimple(string to, string from, string secret, string text, string apiUrl = APIConnector.DEFAULTAPIURL)
        {
            APIConnector apiConnector = this.CreateConnector(from, secret, apiUrl);

            return(apiConnector.SendTextMessageSimple(to, DataUtils.Utf8Endcode(text)));
        }
示例#25
0
    private int activeMap             = 0; //Country Map(default), 1=Provinces Map


    void Start()
    {
        apiConnector = new APIConnector(this);

        StartCoroutine(UpdateTime());
    }
示例#26
0
        /// <summary>
        /// Wrapper to id lookup via email <see cref="Threema.MsgApi.APIConnector.LookupEmail"/>
        /// </summary>
        /// <param name="email">Email for lookup</param>
        /// <param name="from">Sender id</param>
        /// <param name="secret">Sender secret</param>
        /// <param name="apiUrl">Optional api url</param>
        /// <returns>id</returns>
        public string LookupEmail(string email, string from, string secret, string apiUrl = APIConnector.DEFAULTAPIURL)
        {
            APIConnector apiConnector = this.CreateConnector(from, secret, apiUrl);

            return(apiConnector.LookupEmail(email));
        }
示例#27
0
 void Start()
 {
     apiConnector = new APIConnector(this);
 }
        private async Task RunUnitTest()
        {
            TestStatusMsg("Beginning test suite...");
            TestStatusMsg("Testing with " + toolStripTxtConnectionNow.Text);
            string basepath = txtFolderPath.Text;

            SerializeGetFileMetadataRequests          = chkSerializeGetFileInfoReq.Checked;
            APIConnector.EndpointMaxRequestsPerSecond = (int)spnRequestsPerSecond.Value;

            if (basepath.EndsWith("/"))
            {
                basepath.TrimEnd(new char[] { '/' });
            }
            string tfoldername = basepath + "/Cloud Elements API Test Folder";

            AsyncBasePath = tfoldername;

            Boolean  remnant   = false;
            Boolean  fremnant  = false;
            DateTime StartTime = DateTime.Now;

            Cloud_Elements_API.CloudFile TestFileStore;

            //FIRST TEST: Check for folder. If no folder, create test folder.
            try
            {
                // List<Cloud_Elements_API.CloudFile> fe = await APIConnector.ListFolderContents(Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, tfoldername, chkWithTags.Checked);
                Cloud_Elements_API.CloudFile Result = await Cloud_Elements_API.FileOperations.GetCloudFileInfo(APIConnector, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, tfoldername);

                if (Result != null)
                {
                    remnant = true;
                    TestStatusMsg("Using existing test folder");
                }
                else
                {
                    remnant = false;
                }
            }
            //catch (System.Net.Http.HttpRequestException e)
            //{
            //    //NOTE: handle different http exceptions!
            //    remnant = false;
            //}
            catch (Exception ex)
            {
                TestStatusMsg("Problem checking if test folder exists: " + ex.Message);
                throw ex;
            }
            if (!remnant)
            {
                TestStatusMsg("Test: Creating folder...");
                try
                {
                    Cloud_Elements_API.CloudFile newFolder = new Cloud_Elements_API.CloudFile();
                    newFolder.path = tfoldername;
                    //newFolder.tags = new string[] { "sfCE.NET" };
                    Cloud_Elements_API.CloudFile Result = await APIConnector.CreateFolder(newFolder);

                    TestStatusMsg(string.Format("Created {0}, id={1}", Result.path, Result.id));
                    Task ignoredRefreshFolderTask = RefreshCurrentFolder(); // very naughty, ignore exceptions; ref http://stackoverflow.com/questions/14903887/warning-this-call-is-not-awaited-execution-of-the-current-method-continues
                }
                catch (Exception ec)
                {
                    TestStatusMsg("Create Folder failed: " + ec.Message);
                    throw ec;
                }
            }

            TestStatusMsg("Checking for test file...");
            try
            {
                string TargetPath = tfoldername + "/SFCE_test_file_prime.txt";
                Cloud_Elements_API.CloudFile Result = await Cloud_Elements_API.FileOperations.GetCloudFileInfo(APIConnector, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, TargetPath);

                if (Result != null)
                {
                    TestStatusMsg(string.Format("Test file exists: {0}, id={1}", Result.path, Result.id));
                    fremnant      = true;
                    TestFileStore = Result;
                }
                else
                {
                    TestStatusMsg("Test file not found"); TestFileStore = null;
                }
            }
            catch (Exception ec)
            {
                TestStatusMsg("Check for file failed: " + ec.Message);
                TestFileStore = null;
                //     throw ec;
            }

            double UploadRequiredMS = 0d;

            if (!fremnant)
            {
                //SECOND TEST: Create file.
                TestStatusMsg("Test: Uploading file...");
                try
                {
                    using (System.IO.Stream teststream = GenerateStreamFromString("This is a dummy test file; its diminutive size is quite reasonable."))
                    {
                        string        MIMEType              = Cloud_Elements_API.Tools.FileTypeToMimeContentType("txt");
                        List <String> TagList               = new List <String>();
                        var           sizeInBytes           = teststream.Length;
                        string        TargetPath            = tfoldername + "/SFCE_test_file_prime.txt";
                        DateTime      Started               = DateTime.Now;
                        Cloud_Elements_API.CloudFile Result = await APIConnector.PostFile(teststream, MIMEType,
                                                                                          TargetPath, "Temporary test file",
                                                                                          TagList.ToArray(), false, sizeInBytes);

                        UploadRequiredMS = DateTime.Now.Subtract(Started).TotalMilliseconds;
                        TestStatusMsg(string.Format("Uploaded {0}, id={1}", Result.path, Result.id));

                        TestFileStore = Result;
                    }
                }
                catch (Exception eu)
                {
                    TestStatusMsg("Upload file failed: " + eu.Message);
                    TestFileStore = null;
                }
            }
            else
            {
                TestStatusMsg("Skipping file upload");
            }

            //THIRD TEST: Copy File.
            TestStatusMsg("Test: Copying file...");
            double CopyRequiredMS = 0d;

            try
            {
                if (TestFileStore == null)
                {
                    TestFileStore = await Cloud_Elements_API.FileOperations.GetCloudFileInfo(APIConnector, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, tfoldername + "/SFCE_test_file_prime.txt");
                }
                string CopyFileName = tfoldername + "/SFCE_test_file_copy.txt";
                Cloud_Elements_API.CloudFile currentRow = TestFileStore;
                DateTime Started = DateTime.Now;
                Cloud_Elements_API.CloudFile Result = await Cloud_Elements_API.FileOperations.Copy(APIConnector, currentRow, CopyFileName);

                if (Result == null)
                {
                    TestStatusMsg(string.Format("?? Copy did not return CloudFile object ", 0));
                }
                else
                {
                    CopyRequiredMS = DateTime.Now.Subtract(Started).TotalMilliseconds;
                    TestStatusMsg(string.Format("Copied [{0}] to {1}", currentRow.name, Result.path));
                    if (UploadRequiredMS > 0)
                    {
                        TestStatusMsg(string.Format("Comparison: Upload {0:F1}ms; Copy {1:F1}ms; Pct {2:P2} ", UploadRequiredMS, CopyRequiredMS, CopyRequiredMS / UploadRequiredMS));
                    }
                }
            }
            catch (Exception ecopy)
            {
                TestStatusMsg("Copy File failed: " + ecopy.Message);
            }


            //FOURTH TEST: Rename File.
            TestStatusMsg("Test: Renaming file (by path)...");
            try
            {
                string oldName = "SFCE_test_file_prime.txt";
                string oldPath = tfoldername + "/" + oldName;
                Cloud_Elements_API.CloudElementsConnector.DirectoryEntryType ceType = Cloud_Elements_API.CloudElementsConnector.DirectoryEntryType.File;
                Cloud_Elements_API.CloudFile currentRow = TestFileStore;
                currentRow.path = tfoldername + "/SFCE_test_file_rename_path.txt";
                Cloud_Elements_API.CloudFile Result = await APIConnector.PatchDocEntryMetaData(ceType, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, oldPath, currentRow);

                TestStatusMsg(string.Format("Renamed [{0}] to {1}", oldName, Result.name));
                TestFileStore = Result;
            }
            catch (Exception er)
            {
                TestStatusMsg("Rename file by path failed: " + er.Message);
            }
            TestStatusMsg("Test: Renaming file (by ID)...");
            try
            {
                Cloud_Elements_API.CloudElementsConnector.DirectoryEntryType ceType = Cloud_Elements_API.CloudElementsConnector.DirectoryEntryType.File;
                Cloud_Elements_API.CloudFile currentRow = TestFileStore;
                string oldName = TestFileStore.name;
                currentRow.path = tfoldername + "/SFCE_test_file_rename_id.txt";

                Cloud_Elements_API.CloudFile PatchData = new Cloud_Elements_API.CloudFile();
                PatchData.id   = currentRow.id;
                PatchData.path = currentRow.path;
                Cloud_Elements_API.CloudFile Result = await APIConnector.PatchDocEntryMetaData(ceType, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.ID, TestFileStore.id, PatchData);

                TestStatusMsg(string.Format("Renamed [{0}] to {1}", oldName, Result.name));
                TestFileStore = Result;
            }
            catch (Exception er)
            {
                TestStatusMsg("Rename file failed: " + er.Message);
            }

            //FIFTH TEST: Add two Tags
            TestStatusMsg("Test: Adding Tags...");

            try
            {
                for (int i = 1; i <= 2; i++)
                {
                    string TagToSet = "API Test Tag #" + i.ToString();
                    Cloud_Elements_API.CloudFile currentRow = TestFileStore;
                    TestFileStore = await Cloud_Elements_API.TagOperations.SetTag(APIConnector, currentRow, TagToSet);

                    TestStatusMsg(string.Format("Tag <{0}> added to [{1}] ", TagToSet, currentRow.name));
                }
            }
            catch (Exception etag)
            {
                TestStatusMsg("Add Tag failed: " + etag.Message);
            }

            //SIXTH TEST: Remove a Tag
            TestStatusMsg("Test: Deleting Tags...");

            try
            {
                for (int i = 1; i <= 2; i++)
                {
                    string TagToDel = "API Test Tag #" + i.ToString();
                    Cloud_Elements_API.CloudFile currentRow = TestFileStore;
                    TestFileStore = await Cloud_Elements_API.TagOperations.DeleteTag(APIConnector, currentRow, TagToDel);

                    TestStatusMsg(string.Format("Tag <{0}> removed from [{1}] ", TagToDel, currentRow.name));
                }
            }
            catch (Exception edt)
            {
                TestStatusMsg("Delete Tag failed: " + edt.Message);
            }

            //SEVENTH TEST: Async Uploads
            TestStatusMsg("Test: Multiple ASYNC uploads...");
            NumberOfFilesAlreadyUploaded = 0;
            bool AsyncUploadPassed = false;

            System.Func <Task <string> > UploadTestAction;
            Task <Task <string> >        AsyncUploadTest = null;
            Task <string> FinalAwaitableTestTask         = null;

            System.Runtime.CompilerServices.ConfiguredTaskAwaitable <Task <string> > AwaitableTestTask;
            try
            {
                string info;
                // we need to run away from the UI
                UploadTestAction = new System.Func <Task <string> >(TestMultiFileAsyncUploads);

                AsyncUploadTest = new Task <Task <string> >(UploadTestAction);
                AsyncUploadTest.Start();
                AwaitableTestTask      = AsyncUploadTest.ConfigureAwait(false);
                FinalAwaitableTestTask = await AwaitableTestTask;
                info = await FinalAwaitableTestTask;
                TestStatusMsg(info);
                AsyncUploadPassed = true;

                NumberOfFilesAlreadyUploaded = 8;
            }
            catch (Exception eu)
            {
                TestStatusMsg("Async Uploads   failed: " + eu.Message);
            }

            if (AsyncUploadPassed)
            {
                //SEVENTH TEST: repeat Async Uploads
                UploadTestAction = new System.Func <Task <string> >(TestMultiFileAsyncUploads);
                AsyncUploadTest  = new Task <Task <string> >(UploadTestAction);
                TestStatusMsg("Test: Repeat Multiple ASYNC uploads, without waiting...");
                AsyncUploadTest.Start();
                AwaitableTestTask = AsyncUploadTest.ConfigureAwait(false);
            }

            //EIGHTH TEST: Download File
            TestStatusMsg("Test: Downloading file...");
            System.IO.Stream Target = null;
            try
            {
                string TargetPath = tfoldername + string.Format("/SFCE_test_file_{0}.txt", "1");
                Cloud_Elements_API.CloudFile FileRow = await Cloud_Elements_API.FileOperations.GetCloudFileInfo(APIConnector, Cloud_Elements_API.CloudElementsConnector.FileSpecificationType.Path, TargetPath);

                if (FileRow != null)
                {
                    Cloud_Elements_API.FileContent Result = await APIConnector.GetFile(FileRow);

                    string fn = System.IO.Path.Combine(WorkPath, Result.Disposition);
                    if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(fn)))
                    {
                        System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(fn));
                    }
                    if (System.IO.File.Exists(fn))
                    {
                        System.IO.File.Delete(fn);
                    }
                    Target = new System.IO.FileStream(fn, System.IO.FileMode.Create, System.Security.AccessControl.FileSystemRights.FullControl, System.IO.FileShare.None, 16384, System.IO.FileOptions.Asynchronous, null);
                    await Cloud_Elements_API.Tools.StreamCopyWithProgress(Result.ContentStream, Target, Result.ContentLength);

                    Result.ContentStream.Close();
                    Result.Dispose();
                    Target.Close();
                    Target = null;
                    System.IO.FileInfo finfo = new System.IO.FileInfo(fn);
                    TestStatusMsg(string.Format("Stored {1}: {0}", Cloud_Elements_API.Tools.SizeInBytesToString(finfo.Length), Result.Disposition));
                    int DownloadedHash = Cloud_Elements_API.Tools.FileToString(fn).GetHashCode();
                    if (DownloadedHash != DownloadTestExpectedHash)
                    {
                        TestStatusMsg(string.Format("Warning: Hash of {0} does not match", fn));
                    }
                }
                else
                {
                    TestStatusMsg(string.Format("Could not find file to download ({0})", TargetPath));
                }
            }
            catch (Exception ed)
            {
                TestStatusMsg("*** >>>> File download failed: " + ed.Message);
            }
            finally
            {
                if (Target != null)
                {
                    Target.Close();
                }
            }


            if (AsyncUploadPassed)
            {
                //NINETH TEST: Async Meta Info
                TestStatusMsg("Test: Multiple ASYNC File Meta Info reads ...");
                NumberOfFilesAlreadyUploaded = 0;
                System.Func <Task <string> > TestMetaInfoAction;
                Task <Task <string> >        AsyncMetaInfoTest = null;
                Task <string> FinalAwaitableMetaInfoTask       = null;
                System.Runtime.CompilerServices.ConfiguredTaskAwaitable <Task <string> > AwaitableMetaInfoTask;
                try
                {
                    // we need to run away from the UI
                    TestMetaInfoAction = new System.Func <Task <string> >(TestAsyncGetFileMeta);

                    AsyncMetaInfoTest = new Task <Task <string> >(TestMetaInfoAction);
                    AsyncMetaInfoTest.Start();
                    AwaitableMetaInfoTask      = AsyncMetaInfoTest.ConfigureAwait(false);
                    FinalAwaitableMetaInfoTask = await AwaitableMetaInfoTask;
                }
                catch (Exception eu)
                {
                    TestStatusMsg("Async Meta Info    failed: " + eu.Message);
                }


                AwaitableTestTask      = AsyncUploadTest.ConfigureAwait(false);
                FinalAwaitableTestTask = await AwaitableTestTask;
                string FinalInfo = await FinalAwaitableTestTask;
                TestStatusMsg(FinalInfo);
                FinalInfo = await FinalAwaitableMetaInfoTask;
                TestStatusMsg(FinalInfo);
            }



            TestStatusMsg(string.Format("Test suite complete: Elapsed time: {0:F1}s", DateTime.Now.Subtract(StartTime).TotalSeconds));
        }
示例#29
0
 void Start()
 {
     //Initialize APIConnector obj
     apiConnector = new APIConnector(this);
 }
示例#30
0
        /// <summary>
        /// Wrapper to id lookup via phone number <see cref="Threema.MsgApi.APIConnector.LookupPhone"/>
        /// </summary>
        /// <param name="phoneNo">Phone number for lookup</param>
        /// <param name="from">Sender id</param>
        /// <param name="secret">Sender secret</param>
        /// <param name="apiUrl">Optional api url</param>
        /// <returns>id</returns>
        public string LookupPhone(string phoneNo, string from, string secret, string apiUrl = APIConnector.DEFAULTAPIURL)
        {
            APIConnector apiConnector = this.CreateConnector(from, secret, apiUrl);

            return(apiConnector.LookupPhone(phoneNo));
        }