Added OAuth code, making it possible for Plugins to use a "Greenshot" generic way of authorizing with OAuth services.

git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2013 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
RKrom 2012-09-09 13:28:28 +00:00
commit b2ea24fd9a
4 changed files with 791 additions and 0 deletions

View file

@ -0,0 +1,95 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
*
* For more information see: http://getgreenshot.org/
* The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
*
* 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 1 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, see <http://www.gnu.org/licenses/>.
*/
namespace GreenshotPlugin.Controls {
partial class OAuthLoginForm {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.browser = new System.Windows.Forms.WebBrowser();
this.addressTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// browser
//
this.browser.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.browser.Location = new System.Drawing.Point(0, 26);
this.browser.MinimumSize = new System.Drawing.Size(20, 20);
this.browser.Name = "browser";
this.browser.Size = new System.Drawing.Size(864, 561);
this.browser.TabIndex = 0;
this.browser.Navigating += new System.Windows.Forms.WebBrowserNavigatingEventHandler(this.webBrowser1_Navigating);
this.browser.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(this.browser_Navigated);
//
// addressTextBox
//
this.addressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.addressTextBox.Location = new System.Drawing.Point(7, 2);
this.addressTextBox.Name = "addressTextBox";
this.addressTextBox.Size = new System.Drawing.Size(840, 20);
this.addressTextBox.TabIndex = 1;
this.addressTextBox.TabStop = false;
this.addressTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.addressTextBox_KeyPress);
//
// LoginForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(864, 587);
this.Controls.Add(this.addressTextBox);
this.Controls.Add(this.browser);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "LoginForm";
this.ShowInTaskbar = false;
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.WebBrowser browser;
private System.Windows.Forms.TextBox addressTextBox;
}
}

View file

@ -0,0 +1,97 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
*
* For more information see: http://getgreenshot.org/
* The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
*
* 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 1 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, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Collections.Specialized;
using GreenshotPlugin.Core;
namespace GreenshotPlugin.Controls {
/// <summary>
/// The OAuthLoginForm is used to allow the user to authorize Greenshot with an "Oauth" application
/// </summary>
public partial class OAuthLoginForm : Form {
private OAuthHelper _oauth;
private String _token;
private String _verifier;
private String _tokenSecret;
public String Token {
get {
return _token;
}
}
public String Verifier {
get {
return _verifier;
}
}
public String TokenSecret {
get {
return _tokenSecret;
}
}
public OAuthLoginForm(OAuthHelper o, string browserTitle) {
_oauth = o;
_token = null;
InitializeComponent();
this.Icon = GreenshotPlugin.Core.GreenshotResources.getGreenshotIcon();
this.Text = browserTitle;
this.addressTextBox.Text = o.AuthorizationLink;
_token = _oauth.Token;
_tokenSecret = _oauth.TokenSecret;
browser.Navigate(new Uri(_oauth.AuthorizationLink));
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
this.addressTextBox.Text = e.Url.ToString();
}
private void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e) {
if (browser.Url.ToString().Contains(_oauth.CallbackUrl)) {
string queryParams = e.Url.Query;
if (queryParams.Length > 0) {
//Store the Token and Token Secret
NameValueCollection qs = NetworkHelper.ParseQueryString(queryParams);
if (qs["oauth_token"] != null) {
_token = qs["oauth_token"];
}
if (qs["oauth_verifier"] != null) {
_verifier = qs["oauth_verifier"];
}
}
this.Close();
}
}
private void addressTextBox_KeyPress(object sender, KeyPressEventArgs e) {
//Cancel the key press so the user can't enter a new url
e.Handled = true;
}
}
}