Merge pull request #3273 from matthewburnett/master

Add Firebase Dynamic Links URL Shortener
This commit is contained in:
Jaex 2018-04-05 00:49:45 +03:00 committed by GitHub
commit 958b037c94
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 361 additions and 0 deletions

View file

@ -173,6 +173,8 @@ public enum UrlShortenerType
TwoGP,
[Description("Polr")]
Polr,
[Description("Firebase Dynamic Links")]
FirebaseDynamicLinks,
CustomURLShortener // Localized
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -170,6 +170,12 @@ private void InitializeComponent()
this.lblPolrAPIKey = new System.Windows.Forms.Label();
this.txtPolrAPIHostname = new System.Windows.Forms.TextBox();
this.lblPolrAPIHostname = new System.Windows.Forms.Label();
this.tpFirebaseDynamicLinks = new System.Windows.Forms.TabPage();
this.cbFirebaseIsShort = new System.Windows.Forms.CheckBox();
this.lblFirebaseDomain = new System.Windows.Forms.Label();
this.txtFirebaseDomain = new System.Windows.Forms.TextBox();
this.txtFirebaseWebAPIKey = new System.Windows.Forms.TextBox();
this.lblFirebaseWebAPIKey = new System.Windows.Forms.Label();
this.tpFileUploaders = new System.Windows.Forms.TabPage();
this.tcFileUploaders = new System.Windows.Forms.TabControl();
this.tpFTP = new System.Windows.Forms.TabPage();
@ -650,6 +656,7 @@ private void InitializeComponent()
this.tpAdFly.SuspendLayout();
this.tpCoinURL.SuspendLayout();
this.tpPolr.SuspendLayout();
this.tpFirebaseDynamicLinks.SuspendLayout();
this.tpFileUploaders.SuspendLayout();
this.tcFileUploaders.SuspendLayout();
this.tpFTP.SuspendLayout();
@ -1533,6 +1540,7 @@ private void InitializeComponent()
this.tcURLShorteners.Controls.Add(this.tpAdFly);
this.tcURLShorteners.Controls.Add(this.tpCoinURL);
this.tcURLShorteners.Controls.Add(this.tpPolr);
this.tcURLShorteners.Controls.Add(this.tpFirebaseDynamicLinks);
resources.ApplyResources(this.tcURLShorteners, "tcURLShorteners");
this.tcURLShorteners.Name = "tcURLShorteners";
this.tcURLShorteners.SelectedIndex = 0;
@ -1766,6 +1774,49 @@ private void InitializeComponent()
resources.ApplyResources(this.lblPolrAPIHostname, "lblPolrAPIHostname");
this.lblPolrAPIHostname.Name = "lblPolrAPIHostname";
//
// tpFirebaseDynamicLinks
//
this.tpFirebaseDynamicLinks.Controls.Add(this.cbFirebaseIsShort);
this.tpFirebaseDynamicLinks.Controls.Add(this.lblFirebaseDomain);
this.tpFirebaseDynamicLinks.Controls.Add(this.txtFirebaseDomain);
this.tpFirebaseDynamicLinks.Controls.Add(this.txtFirebaseWebAPIKey);
this.tpFirebaseDynamicLinks.Controls.Add(this.lblFirebaseWebAPIKey);
resources.ApplyResources(this.tpFirebaseDynamicLinks, "tpFirebaseDynamicLinks");
this.tpFirebaseDynamicLinks.Name = "tpFirebaseDynamicLinks";
this.tpFirebaseDynamicLinks.UseVisualStyleBackColor = true;
//
// cbFirebaseIsShort
//
resources.ApplyResources(this.cbFirebaseIsShort, "cbFirebaseIsShort");
this.cbFirebaseIsShort.Checked = true;
this.cbFirebaseIsShort.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbFirebaseIsShort.Name = "cbFirebaseIsShort";
this.cbFirebaseIsShort.UseVisualStyleBackColor = true;
this.cbFirebaseIsShort.CheckedChanged += new System.EventHandler(this.cbFirebaseIsShort_CheckedChanged);
//
// lblFirebaseDomain
//
resources.ApplyResources(this.lblFirebaseDomain, "lblFirebaseDomain");
this.lblFirebaseDomain.Name = "lblFirebaseDomain";
//
// txtFirebaseDomain
//
resources.ApplyResources(this.txtFirebaseDomain, "txtFirebaseDomain");
this.txtFirebaseDomain.Name = "txtFirebaseDomain";
this.txtFirebaseDomain.TextChanged += new System.EventHandler(this.txtFirebaseDomain_TextChanged);
//
// txtFirebaseWebAPIKey
//
resources.ApplyResources(this.txtFirebaseWebAPIKey, "txtFirebaseWebAPIKey");
this.txtFirebaseWebAPIKey.Name = "txtFirebaseWebAPIKey";
this.txtFirebaseWebAPIKey.UseSystemPasswordChar = true;
this.txtFirebaseWebAPIKey.TextChanged += new System.EventHandler(this.txtFirebaseWebAPIKey_TextChanged);
//
// lblFirebaseWebAPIKey
//
resources.ApplyResources(this.lblFirebaseWebAPIKey, "lblFirebaseWebAPIKey");
this.lblFirebaseWebAPIKey.Name = "lblFirebaseWebAPIKey";
//
// tpFileUploaders
//
this.tpFileUploaders.BackColor = System.Drawing.SystemColors.Window;
@ -5172,6 +5223,8 @@ private void InitializeComponent()
this.tpCoinURL.PerformLayout();
this.tpPolr.ResumeLayout(false);
this.tpPolr.PerformLayout();
this.tpFirebaseDynamicLinks.ResumeLayout(false);
this.tpFirebaseDynamicLinks.PerformLayout();
this.tpFileUploaders.ResumeLayout(false);
this.tcFileUploaders.ResumeLayout(false);
this.tpFTP.ResumeLayout(false);
@ -5900,5 +5953,11 @@ private void InitializeComponent()
private System.Windows.Forms.CheckBox cbAmazonS3StripExtensionVideo;
private System.Windows.Forms.CheckBox cbAmazonS3StripExtensionImage;
private System.Windows.Forms.CheckBox cbOwnCloudUsePreviewLinks;
internal System.Windows.Forms.TabPage tpFirebaseDynamicLinks;
private System.Windows.Forms.CheckBox cbFirebaseIsShort;
private System.Windows.Forms.Label lblFirebaseDomain;
private System.Windows.Forms.TextBox txtFirebaseDomain;
private System.Windows.Forms.TextBox txtFirebaseWebAPIKey;
private System.Windows.Forms.Label lblFirebaseWebAPIKey;
}
}

View file

@ -776,6 +776,14 @@ public void LoadSettings()
#endregion Polr
#region Firebase Dynamic Links
txtFirebaseWebAPIKey.Text = Config.FirebaseWebAPIKey;
txtFirebaseDomain.Text = Config.FirebaseDynamicLinkDomain;
cbFirebaseIsShort.Checked = Config.FirebaseIsShort;
#endregion Firebase Dynamic Links
#endregion URL shorteners
#region Other uploaders
@ -3119,6 +3127,25 @@ private void cbPolrUseAPIv1_CheckedChanged(object sender, EventArgs e)
#endregion Polr
#region Firebase Dynamic Links
private void txtFirebaseWebAPIKey_TextChanged(object sender, EventArgs e)
{
Config.FirebaseWebAPIKey = txtFirebaseWebAPIKey.Text;
}
private void txtFirebaseDomain_TextChanged(object sender, EventArgs e)
{
Config.FirebaseDynamicLinkDomain = txtFirebaseDomain.Text;
}
private void cbFirebaseIsShort_CheckedChanged(object sender, EventArgs e)
{
Config.FirebaseIsShort = cbFirebaseIsShort.Checked;
}
#endregion Firebase Dynamic Links
#endregion URL shorteners
#region Other uploaders

View file

@ -3545,6 +3545,156 @@ store.book[0].title</value>
<data name="&gt;&gt;tpPolr.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="cbFirebaseIsShort.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbFirebaseIsShort.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 85</value>
</data>
<data name="cbFirebaseIsShort.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 17</value>
</data>
<data name="cbFirebaseIsShort.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="cbFirebaseIsShort.Text" xml:space="preserve">
<value>Short link</value>
</data>
<data name="&gt;&gt;cbFirebaseIsShort.Name" xml:space="preserve">
<value>cbFirebaseIsShort</value>
</data>
<data name="&gt;&gt;cbFirebaseIsShort.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbFirebaseIsShort.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;cbFirebaseIsShort.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblFirebaseDomain.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblFirebaseDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>62, 61</value>
</data>
<data name="lblFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lblFirebaseDomain.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="lblFirebaseDomain.Text" xml:space="preserve">
<value>.app.goo.gl</value>
</data>
<data name="&gt;&gt;lblFirebaseDomain.Name" xml:space="preserve">
<value>lblFirebaseDomain</value>
</data>
<data name="&gt;&gt;lblFirebaseDomain.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblFirebaseDomain.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;lblFirebaseDomain.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtFirebaseDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 58</value>
</data>
<data name="txtFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 20</value>
</data>
<data name="txtFirebaseDomain.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;txtFirebaseDomain.Name" xml:space="preserve">
<value>txtFirebaseDomain</value>
</data>
<data name="&gt;&gt;txtFirebaseDomain.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtFirebaseDomain.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;txtFirebaseDomain.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="txtFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 32</value>
</data>
<data name="txtFirebaseWebAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 20</value>
</data>
<data name="txtFirebaseWebAPIKey.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;txtFirebaseWebAPIKey.Name" xml:space="preserve">
<value>txtFirebaseWebAPIKey</value>
</data>
<data name="&gt;&gt;txtFirebaseWebAPIKey.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtFirebaseWebAPIKey.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;txtFirebaseWebAPIKey.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblFirebaseWebAPIKey.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 16</value>
</data>
<data name="lblFirebaseWebAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 13</value>
</data>
<data name="lblFirebaseWebAPIKey.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblFirebaseWebAPIKey.Text" xml:space="preserve">
<value>Web API Key:</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.Name" xml:space="preserve">
<value>lblFirebaseWebAPIKey</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="tpFirebaseDynamicLinks.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpFirebaseDynamicLinks.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpFirebaseDynamicLinks.Size" type="System.Drawing.Size, System.Drawing">
<value>972, 537</value>
</data>
<data name="tpFirebaseDynamicLinks.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="tpFirebaseDynamicLinks.Text" xml:space="preserve">
<value>Firebase Dynamic Links</value>
</data>
<data name="&gt;&gt;tpFirebaseDynamicLinks.Name" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;tpFirebaseDynamicLinks.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpFirebaseDynamicLinks.Parent" xml:space="preserve">
<value>tcURLShorteners</value>
</data>
<data name="&gt;&gt;tpFirebaseDynamicLinks.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tcURLShorteners.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>

View file

@ -186,6 +186,16 @@ internal static System.Drawing.Icon Dropbox {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon Firebase {
get {
object obj = ResourceManager.GetObject("Firebase", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>

View file

@ -407,4 +407,7 @@ Created folders:</value>
<data name="OAuthControl_Status_LoginFailed" xml:space="preserve">
<value>Login failed.</value>
</data>
<data name="Firebase" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\favicons\firebase.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View file

@ -352,6 +352,7 @@
<Compile Include="BaseUploaders\Uploader.cs" />
<Compile Include="BaseUploaders\URLShortener.cs" />
<Compile Include="BaseServices\URLShortenerService.cs" />
<Compile Include="URLShorteners\FirebaseDynamicLinksURLShortener.cs" />
<Compile Include="URLShorteners\PolrURLShortener.cs" />
<Compile Include="URLShorteners\TwoGPURLShortener.cs" />
<Compile Include="URLShorteners\AdFlyURLShortener.cs" />
@ -928,6 +929,9 @@
<None Include="Favicons\Gfycat.png" />
<None Include="Favicons\GooglePhotos.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Favicons\Firebase.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>cd $(ProjectDir)APIKeys\

View file

@ -0,0 +1,98 @@
/* https://github.com/matthewburnett */
using Newtonsoft.Json;
using ShareX.HelpersLib;
using ShareX.UploadersLib.Properties;
using System.Collections.Generic;
using System.Drawing;
using System.Web;
using System.Windows.Forms;
namespace ShareX.UploadersLib.URLShorteners
{
public class FirebaseDynamicLinksURLShortenerService : URLShortenerService
{
public override UrlShortenerType EnumValue { get; } = UrlShortenerType.FirebaseDynamicLinks;
public override Icon ServiceIcon => Resources.Firebase;
public override bool CheckConfig(UploadersConfig config)
{
return !string.IsNullOrEmpty(config.FirebaseWebAPIKey) && !string.IsNullOrEmpty(config.FirebaseDynamicLinkDomain);
}
public override URLShortener CreateShortener(UploadersConfig config, TaskReferenceHelper taskInfo)
{
return new FirebaseDynamicLinksURLShortener
{
WebAPIKey = config.FirebaseWebAPIKey,
DynamicLinkDomain = config.FirebaseDynamicLinkDomain,
IsShort = config.FirebaseIsShort
};
}
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpFirebaseDynamicLinks;
}
public class FirebaseResponse
{
public string shortLink { get; set; }
public string previewLink { get; set; }
}
public class FirebaseRequest
{
public string longDynamicLink { get; set; }
public FirebaseRequestSuffix suffix { get; set; }
}
public class FirebaseRequestSuffix
{
public string option { get; set; }
}
public sealed class FirebaseDynamicLinksURLShortener : URLShortener
{
public string WebAPIKey { get; set; }
public string DynamicLinkDomain { get; set; }
public bool IsShort { get; set; }
public override UploadResult ShortenURL(string url)
{
UploadResult result = new UploadResult { URL = url };
string RequestUrl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks";
string longDynamicLink = URLHelpers.ForcePrefix(DynamicLinkDomain + ".app.goo.gl/?link=" + HttpUtility.UrlEncode(url));
string option;
Dictionary<string, string> args = new Dictionary<string, string>
{
{ "key", WebAPIKey }
};
if (IsShort)
{
option = "SHORT";
}
else
{
option = "UNGUESSABLE";
}
FirebaseRequest request = new FirebaseRequest
{
longDynamicLink = longDynamicLink,
suffix = new FirebaseRequestSuffix
{
option = option
}
};
string json = JsonConvert.SerializeObject(request);
result.Response = SendRequest(HttpMethod.POST, RequestUrl, json, ContentTypeJSON, args);
result.ShortenedURL = JsonConvert.DeserializeObject<FirebaseResponse>(result.Response).shortLink;
return result;
}
}
}

View file

@ -429,6 +429,14 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
#endregion polr
#region Firebase Dynamic Links
public string FirebaseWebAPIKey = "";
public string FirebaseDynamicLinkDomain = "";
public bool FirebaseIsShort = true;
#endregion Firebase Dynamic Links
#endregion URL shorteners
#region Other uploaders