From 21f53ce6b62a653287bcab754d49089b42b9bc80 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sat, 11 Jun 2016 21:54:14 +0300 Subject: [PATCH] Adding puush file uploader --- ShareX.UploadersLib/Enums.cs | 2 + ShareX.UploadersLib/Favicons/puush.ico | Bin 0 -> 55217 bytes ShareX.UploadersLib/FileUploaders/Puush.cs | 137 +++++++++++++++++ .../Forms/PuushLoginForm.Designer.cs | 139 ++++++++++++++++++ ShareX.UploadersLib/Forms/PuushLoginForm.cs | 92 ++++++++++++ ShareX.UploadersLib/Forms/PuushLoginForm.resx | 120 +++++++++++++++ .../Properties/Resources.Designer.cs | 10 ++ ShareX.UploadersLib/Properties/Resources.resx | 3 + .../ShareX.UploadersLib.csproj | 13 ++ ShareX.UploadersLib/UploadersConfig.cs | 25 ++-- 10 files changed, 527 insertions(+), 14 deletions(-) create mode 100644 ShareX.UploadersLib/Favicons/puush.ico create mode 100644 ShareX.UploadersLib/FileUploaders/Puush.cs create mode 100644 ShareX.UploadersLib/Forms/PuushLoginForm.Designer.cs create mode 100644 ShareX.UploadersLib/Forms/PuushLoginForm.cs create mode 100644 ShareX.UploadersLib/Forms/PuushLoginForm.resx diff --git a/ShareX.UploadersLib/Enums.cs b/ShareX.UploadersLib/Enums.cs index 724c69f26..dc44934d5 100644 --- a/ShareX.UploadersLib/Enums.cs +++ b/ShareX.UploadersLib/Enums.cs @@ -94,6 +94,8 @@ public enum FileDestination OneDrive, [Description("Google Drive")] GoogleDrive, + [Description("puush")] + Puush, [Description("Box")] Box, [Description("MEGA")] diff --git a/ShareX.UploadersLib/Favicons/puush.ico b/ShareX.UploadersLib/Favicons/puush.ico new file mode 100644 index 0000000000000000000000000000000000000000..a778b4c5b50c17260673b6ba7d449764c439c3b1 GIT binary patch literal 55217 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 literal 0 HcmV?d00001 diff --git a/ShareX.UploadersLib/FileUploaders/Puush.cs b/ShareX.UploadersLib/FileUploaders/Puush.cs new file mode 100644 index 000000000..335d2f5b1 --- /dev/null +++ b/ShareX.UploadersLib/FileUploaders/Puush.cs @@ -0,0 +1,137 @@ +#region License Information (GPL v3) + +/* + ShareX - A program that allows you to take screenshots and share any file type + Copyright (c) 2007-2016 ShareX Team + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Optionally you can also view the license at . +*/ + +#endregion License Information (GPL v3) + +using System.Collections.Generic; +using System.IO; + +namespace ShareX.UploadersLib.FileUploaders +{ + public class PuushFileUploaderService : FileUploaderService + { + public override FileDestination EnumValue { get; } = FileDestination.Puush; + + public override bool CheckConfig(UploadersConfig config) + { + return !string.IsNullOrEmpty(config.PuushAPIKey); + } + + public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo) + { + return new Puush() + { + APIKey = config.PuushAPIKey + }; + } + } + + public class Puush : FileUploader + { + public const string PuushURL = "https://puush.me"; + public const string PuushAPIURL = PuushURL + "/api"; + public const string PuushAPILoginURL = PuushAPIURL + "/auth"; + public const string PuushAPIUploadURL = PuushAPIURL + "/up"; + public const string PuushRegisterURL = PuushURL + "/register"; + public const string PuushResetPasswordURL = PuushURL + "/reset_password"; + + public string APIKey { get; set; } + + public string Login(string email, string password) + { + Dictionary arguments = new Dictionary(); + arguments.Add("e", email); + arguments.Add("p", password); + arguments.Add("z", "ShareX"); + + string response = SendRequest(HttpMethod.POST, PuushAPILoginURL, arguments); + + if (!string.IsNullOrEmpty(response)) + { + string[] values = response.Split(','); + + if (values != null && values.Length > 1) + { + int status; + + if (int.TryParse(values[0], out status) && status >= 0) + { + return values[1]; + } + } + } + + return null; + } + + public override UploadResult Upload(Stream stream, string fileName) + { + Dictionary arguments = new Dictionary(); + arguments.Add("k", APIKey); + arguments.Add("z", "ShareX"); + + UploadResult result = UploadData(stream, PuushAPIUploadURL, fileName, "f", arguments); + + if (result.IsSuccess) + { + string[] values = result.Response.Split(','); + + if (values != null && values.Length > 1) + { + int status; + + if (!int.TryParse(values[0], out status)) + { + status = -2; + } + + if (status < 0) + { + switch (status) + { + case -1: + Errors.Add("Authentication failure."); + break; + default: + case -2: + Errors.Add("Connection error."); + break; + case -3: + Errors.Add("Checksum error."); + break; + case -4: + Errors.Add("Insufficient account storage remaining."); + break; + } + } + else + { + result.URL = values[1]; + } + } + } + + return result; + } + } +} \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/PuushLoginForm.Designer.cs b/ShareX.UploadersLib/Forms/PuushLoginForm.Designer.cs new file mode 100644 index 000000000..d5e8091ad --- /dev/null +++ b/ShareX.UploadersLib/Forms/PuushLoginForm.Designer.cs @@ -0,0 +1,139 @@ +namespace ShareX.UploadersLib.Forms +{ + partial class PuushLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblPassword = new System.Windows.Forms.Label(); + this.lblEmail = new System.Windows.Forms.Label(); + this.txtEmail = new System.Windows.Forms.TextBox(); + this.txtPassword = new System.Windows.Forms.TextBox(); + this.btnLogin = new System.Windows.Forms.Button(); + this.llForgottenPassword = new System.Windows.Forms.LinkLabel(); + this.llCreateAccount = new System.Windows.Forms.LinkLabel(); + this.SuspendLayout(); + // + // lblPassword + // + this.lblPassword.AutoSize = true; + this.lblPassword.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblPassword.Location = new System.Drawing.Point(13, 96); + this.lblPassword.Name = "lblPassword"; + this.lblPassword.Size = new System.Drawing.Size(71, 16); + this.lblPassword.TabIndex = 1; + this.lblPassword.Text = "Password:"; + // + // lblEmail + // + this.lblEmail.AutoSize = true; + this.lblEmail.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblEmail.Location = new System.Drawing.Point(13, 40); + this.lblEmail.Name = "lblEmail"; + this.lblEmail.Size = new System.Drawing.Size(45, 16); + this.lblEmail.TabIndex = 3; + this.lblEmail.Text = "Email:"; + // + // txtEmail + // + this.txtEmail.Location = new System.Drawing.Point(16, 64); + this.txtEmail.Name = "txtEmail"; + this.txtEmail.Size = new System.Drawing.Size(224, 20); + this.txtEmail.TabIndex = 4; + // + // txtPassword + // + this.txtPassword.Location = new System.Drawing.Point(16, 120); + this.txtPassword.Name = "txtPassword"; + this.txtPassword.Size = new System.Drawing.Size(224, 20); + this.txtPassword.TabIndex = 5; + this.txtPassword.UseSystemPasswordChar = true; + // + // btnLogin + // + this.btnLogin.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnLogin.Location = new System.Drawing.Point(16, 176); + this.btnLogin.Name = "btnLogin"; + this.btnLogin.Size = new System.Drawing.Size(224, 32); + this.btnLogin.TabIndex = 6; + this.btnLogin.Text = "Login"; + this.btnLogin.UseVisualStyleBackColor = true; + this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click); + // + // llForgottenPassword + // + this.llForgottenPassword.AutoSize = true; + this.llForgottenPassword.Location = new System.Drawing.Point(13, 152); + this.llForgottenPassword.Name = "llForgottenPassword"; + this.llForgottenPassword.Size = new System.Drawing.Size(106, 13); + this.llForgottenPassword.TabIndex = 7; + this.llForgottenPassword.TabStop = true; + this.llForgottenPassword.Text = "Forgotten password?"; + this.llForgottenPassword.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llForgottenPassword_LinkClicked); + // + // llCreateAccount + // + this.llCreateAccount.AutoSize = true; + this.llCreateAccount.Location = new System.Drawing.Point(13, 16); + this.llCreateAccount.Name = "llCreateAccount"; + this.llCreateAccount.Size = new System.Drawing.Size(104, 13); + this.llCreateAccount.TabIndex = 8; + this.llCreateAccount.TabStop = true; + this.llCreateAccount.Text = "Create an account..."; + this.llCreateAccount.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llCreateAccount_LinkClicked); + // + // PuushLoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(256, 224); + this.Controls.Add(this.llCreateAccount); + this.Controls.Add(this.llForgottenPassword); + this.Controls.Add(this.btnLogin); + this.Controls.Add(this.txtPassword); + this.Controls.Add(this.txtEmail); + this.Controls.Add(this.lblEmail); + this.Controls.Add(this.lblPassword); + this.Name = "PuushLoginForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "puush login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblPassword; + private System.Windows.Forms.Label lblEmail; + private System.Windows.Forms.TextBox txtEmail; + private System.Windows.Forms.TextBox txtPassword; + private System.Windows.Forms.Button btnLogin; + private System.Windows.Forms.LinkLabel llForgottenPassword; + private System.Windows.Forms.LinkLabel llCreateAccount; + } +} \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/PuushLoginForm.cs b/ShareX.UploadersLib/Forms/PuushLoginForm.cs new file mode 100644 index 000000000..af65a7fb3 --- /dev/null +++ b/ShareX.UploadersLib/Forms/PuushLoginForm.cs @@ -0,0 +1,92 @@ +#region License Information (GPL v3) + +/* + ShareX - A program that allows you to take screenshots and share any file type + Copyright (c) 2007-2016 ShareX Team + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Optionally you can also view the license at . +*/ + +#endregion License Information (GPL v3) + +using ShareX.HelpersLib; +using ShareX.UploadersLib.FileUploaders; +using ShareX.UploadersLib.Properties; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace ShareX.UploadersLib.Forms +{ + public partial class PuushLoginForm : Form + { + public string APIKey { get; set; } + + public PuushLoginForm() + { + InitializeComponent(); + Icon = Resources.puush; + } + + private bool CheckValidation() + { + bool result = true; + + if (string.IsNullOrEmpty(txtEmail.Text)) + { + txtEmail.BackColor = Color.FromArgb(255, 200, 200); + result = false; + } + + if (string.IsNullOrEmpty(txtPassword.Text)) + { + txtPassword.BackColor = Color.FromArgb(255, 200, 200); + result = false; + } + + return result; + } + + private void llCreateAccount_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + URLHelpers.OpenURL(Puush.PuushRegisterURL); + } + + private void llForgottenPassword_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + URLHelpers.OpenURL(Puush.PuushResetPasswordURL); + } + + private void btnLogin_Click(object sender, EventArgs e) + { + if (CheckValidation()) + { + APIKey = new Puush().Login(txtEmail.Text, txtPassword.Text); + + if (!string.IsNullOrEmpty(APIKey)) + { + DialogResult = DialogResult.OK; + Close(); + } + else + { + MessageBox.Show("Login failed.", "Authentication failure", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/PuushLoginForm.resx b/ShareX.UploadersLib/Forms/PuushLoginForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/ShareX.UploadersLib/Forms/PuushLoginForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ShareX.UploadersLib/Properties/Resources.Designer.cs b/ShareX.UploadersLib/Properties/Resources.Designer.cs index eceacab97..1e1314373 100644 --- a/ShareX.UploadersLib/Properties/Resources.Designer.cs +++ b/ShareX.UploadersLib/Properties/Resources.Designer.cs @@ -865,6 +865,16 @@ internal static System.Drawing.Icon Pushbullet { } } + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon puush { + get { + object obj = ResourceManager.GetObject("puush", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShareX.UploadersLib/Properties/Resources.resx b/ShareX.UploadersLib/Properties/Resources.resx index c69f900ed..9572c26ea 100644 --- a/ShareX.UploadersLib/Properties/Resources.resx +++ b/ShareX.UploadersLib/Properties/Resources.resx @@ -494,4 +494,7 @@ Created folders: ..\favicons\someimage.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Favicons\puush.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/ShareX.UploadersLib/ShareX.UploadersLib.csproj b/ShareX.UploadersLib/ShareX.UploadersLib.csproj index 0fa7378b3..be2500045 100644 --- a/ShareX.UploadersLib/ShareX.UploadersLib.csproj +++ b/ShareX.UploadersLib/ShareX.UploadersLib.csproj @@ -129,6 +129,7 @@ + @@ -158,6 +159,12 @@ OCRSpaceForm.cs + + Form + + + PuushLoginForm.cs + Form @@ -591,6 +598,9 @@ OCRSpaceForm.cs + + PuushLoginForm.cs + ResponseForm.cs @@ -934,6 +944,9 @@ + + + diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 5cde381b1..4bbdd3be4 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -135,19 +135,19 @@ public class UploadersConfig : SettingsBase public bool DropboxAutoCreateShareableLink = false; public DropboxURLType DropboxURLType = DropboxURLType.Default; + // FTP Server + + public List FTPAccountList = new List(); + public int FTPSelectedImage = 0; + public int FTPSelectedText = 0; + public int FTPSelectedFile = 0; + // OneDrive public OAuth2Info OneDriveOAuth2Info = null; public OneDriveFileInfo OneDriveSelectedFolder = OneDrive.RootFolder; public bool OneDriveAutoCreateShareableLink = true; - // Copy - - public OAuthInfo CopyOAuthInfo = null; - public CopyAccountInfo CopyAccountInfo = null; - public string CopyUploadPath = "ShareX/%y/%mo"; - public CopyURLType CopyURLType = CopyURLType.Shortened; - // Google Drive public OAuth2Info GoogleDriveOAuth2Info = null; @@ -156,6 +156,10 @@ public class UploadersConfig : SettingsBase public bool GoogleDriveUseFolder = false; public string GoogleDriveFolderID = ""; + // puush + + public string PuushAPIKey = ""; + // SendSpace public AccountType SendSpaceAccountType = AccountType.Anonymous; @@ -183,13 +187,6 @@ public class UploadersConfig : SettingsBase public string LocalhostrPassword = ""; public bool LocalhostrDirectURL = true; - // FTP Server - - public List FTPAccountList = new List(); - public int FTPSelectedImage = 0; - public int FTPSelectedText = 0; - public int FTPSelectedFile = 0; - // Shared Folder public List LocalhostAccountList = new List();