OSDN Git Service

短縮URL生成時に https:// スキームで出力する
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 31 Mar 2019 00:58:38 +0000 (09:58 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 6 Apr 2019 00:12:26 +0000 (09:12 +0900)
OpenTween.Tests/ShortUrlTest.cs
OpenTween.Tests/TwitterTest.cs
OpenTween/Resources/ChangeLog.txt
OpenTween/ShortUrl.cs
OpenTween/Twitter.cs
OpenTween/nicoms.cs

index 2fed93b..1068437 100644 (file)
@@ -449,8 +449,8 @@ namespace OpenTween
                 handler.Enqueue(async x =>
                 {
                     Assert.Equal(HttpMethod.Post, x.Method);
-                    Assert.Equal(new Uri("http://tinyurl.com/api-create.php"), x.RequestUri);
-                    Assert.Equal("url=http%3A%2F%2Fexample.com%2Fhogehoge", await x.Content.ReadAsStringAsync());
+                    Assert.Equal(new Uri("https://tinyurl.com/api-create.php"), x.RequestUri);
+                    Assert.Equal("url=http%3A%2F%2Fexample.com%2Fhogehogehoge", await x.Content.ReadAsStringAsync());
 
                     return new HttpResponseMessage(HttpStatusCode.OK)
                     {
@@ -458,8 +458,8 @@ namespace OpenTween
                     };
                 });
 
-                Assert.Equal(new Uri("http://tinyurl.com/hoge"),
-                    await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.TinyUrl, new Uri("http://example.com/hogehoge")));
+                Assert.Equal(new Uri("https://tinyurl.com/hoge"),
+                    await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.TinyUrl, new Uri("http://example.com/hogehogehoge")));
 
                 Assert.Equal(0, handler.QueueCount);
             }
@@ -476,16 +476,16 @@ namespace OpenTween
                 handler.Enqueue(x =>
                 {
                     Assert.Equal(HttpMethod.Get, x.Method);
-                    Assert.Equal("http://ux.nu/api/short?format=plain&url=http:%2F%2Fexample.com%2Fhogehoge",
+                    Assert.Equal("https://ux.nu/api/short?format=plain&url=http:%2F%2Fexample.com%2Fhogehoge",
                         x.RequestUri.AbsoluteUri);
 
                     return new HttpResponseMessage(HttpStatusCode.OK)
                     {
-                        Content = new ByteArrayContent(Encoding.UTF8.GetBytes("http://ux.nu/hoge")),
+                        Content = new ByteArrayContent(Encoding.UTF8.GetBytes("https://ux.nu/hoge")),
                     };
                 });
 
-                Assert.Equal(new Uri("http://ux.nu/hoge"),
+                Assert.Equal(new Uri("https://ux.nu/hoge"),
                     await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.Uxnu, new Uri("http://example.com/hogehoge")));
 
                 Assert.Equal(0, handler.QueueCount);
index 0c287e3..0ada28c 100644 (file)
@@ -284,7 +284,7 @@ namespace OpenTween
             var text = "sm9";
             var entities = new TwitterEntities();
 
-            var expectedHtml = @"<a href=""http://www.nicovideo.jp/watch/sm9"">sm9</a>";
+            var expectedHtml = @"<a href=""https://www.nicovideo.jp/watch/sm9"">sm9</a>";
 
             Assert.Equal(expectedHtml, Twitter.CreateHtmlAnchor(text, entities, quotedStatusLink: null));
         }
index c7267fd..ee2bdcd 100644 (file)
@@ -7,6 +7,7 @@
   - OpenTweenの古いバージョンの翻訳機能は 2019/4/30 以降に使用できなくなります
  * CHG: 短縮URLの展開時にHTTPSが使用できるドメインは強制的にHTTPSを使用する
  * CHG: 廃止された短縮URLサービスのドメインをURL展開の対象から削除
+ * CHG: 短縮URLで生成されるURLがHTTPSになるように変更
  * CHG: 廃止された twurl.nl によるURL短縮機能を削除
  * CHG: img.azyobuzi.net 利用時の接続先をHTTPSに変更
  * CHG: 廃止されたサービスのサムネイル表示対応を削除
index 2edf8c5..b6bd1cc 100644 (file)
@@ -351,7 +351,7 @@ namespace OpenTween
         private async Task<Uri> ShortenByTinyUrlAsync(Uri srcUri)
         {
             // 明らかに長くなると推測できる場合は短縮しない
-            if ("http://tinyurl.com/xxxxxx".Length > srcUri.OriginalString.Length)
+            if ("https://tinyurl.com/xxxxxxxx".Length > srcUri.OriginalString.Length)
                 return srcUri;
 
             var content = new FormUrlEncodedContent(new[]
@@ -359,7 +359,7 @@ namespace OpenTween
                 new KeyValuePair<string, string>("url", srcUri.OriginalString),
             });
 
-            using (var response = await this.http.PostAsync("http://tinyurl.com/api-create.php", content).ConfigureAwait(false))
+            using (var response = await this.http.PostAsync("https://tinyurl.com/api-create.php", content).ConfigureAwait(false))
             {
                 response.EnsureSuccessStatusCode();
 
@@ -369,14 +369,14 @@ namespace OpenTween
                 if (!Regex.IsMatch(result, @"^https?://"))
                     throw new WebApiException("Failed to create URL.", result);
 
-                return new Uri(result.TrimEnd());
+                return this.UpgradeToHttpsIfAvailable(new Uri(result.TrimEnd()));
             }
         }
 
         private async Task<Uri> ShortenByIsgdAsync(Uri srcUri)
         {
             // 明らかに長くなると推測できる場合は短縮しない
-            if ("http://is.gd/xxxx".Length > srcUri.OriginalString.Length)
+            if ("https://is.gd/xxxxxx".Length > srcUri.OriginalString.Length)
                 return srcUri;
 
             var content = new FormUrlEncodedContent(new[]
@@ -385,7 +385,7 @@ namespace OpenTween
                 new KeyValuePair<string, string>("url", srcUri.OriginalString),
             });
 
-            using (var response = await this.http.PostAsync("http://is.gd/create.php", content).ConfigureAwait(false))
+            using (var response = await this.http.PostAsync("https://is.gd/create.php", content).ConfigureAwait(false))
             {
                 response.EnsureSuccessStatusCode();
 
@@ -402,7 +402,7 @@ namespace OpenTween
         private async Task<Uri> ShortenByBitlyAsync(Uri srcUri, string domain = "bit.ly")
         {
             // 明らかに長くなると推測できる場合は短縮しない
-            if ("http://bit.ly/xxxx".Length > srcUri.OriginalString.Length)
+            if ("https://bit.ly/xxxxxxx".Length > srcUri.OriginalString.Length)
                 return srcUri;
 
             // OAuth2 アクセストークンまたは API キー (旧方式) のいずれも設定されていなければ短縮しない
@@ -416,14 +416,16 @@ namespace OpenTween
                 EndUserApiKey = this.BitlyKey,
             };
 
-            return await bitly.ShortenAsync(srcUri, domain)
+            var result = await bitly.ShortenAsync(srcUri, domain)
                 .ConfigureAwait(false);
+
+            return this.UpgradeToHttpsIfAvailable(result);
         }
 
         private async Task<Uri> ShortenByUxnuAsync(Uri srcUri)
         {
             // 明らかに長くなると推測できる場合は短縮しない
-            if ("http://ux.nx/xxxxxx".Length > srcUri.OriginalString.Length)
+            if ("https://ux.nu/xxxxx".Length > srcUri.OriginalString.Length)
                 return srcUri;
 
             var query = new Dictionary<string, string>
@@ -432,7 +434,7 @@ namespace OpenTween
                 ["url"] = srcUri.OriginalString,
             };
 
-            var uri = new Uri("http://ux.nu/api/short?" + MyCommon.BuildQueryString(query));
+            var uri = new Uri("https://ux.nu/api/short?" + MyCommon.BuildQueryString(query));
             using (var response = await this.http.GetAsync(uri).ConfigureAwait(false))
             {
                 response.EnsureSuccessStatusCode();
index 92c117f..39045f9 100644 (file)
@@ -1638,7 +1638,7 @@ namespace OpenTween
             // PostClass.ExpandedUrlInfo を使用して非同期に URL 展開を行うためここでは expanded_url を使用しない
             text = TweetFormatter.AutoLinkHtml(text, mergedEntities, keepTco: true);
 
-            text = Regex.Replace(text, "(^|[^a-zA-Z0-9_/&##@@>=.~])(sm|nm)([0-9]{1,10})", "$1<a href=\"http://www.nicovideo.jp/watch/$2$3\">$2$3</a>");
+            text = Regex.Replace(text, "(^|[^a-zA-Z0-9_/&##@@>=.~])(sm|nm)([0-9]{1,10})", "$1<a href=\"https://www.nicovideo.jp/watch/$2$3\">$2$3</a>");
             text = PreProcessUrl(text); //IDN置換
 
             if (quotedStatusLink != null)
index 8ad3bea..9c25431 100644 (file)
@@ -49,10 +49,14 @@ namespace OpenTween
         public static string Shorten(string url)
         {
             //整形(http(s)://を削除)
-            if (url.Length > 7 && url.Length < 128 && url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
+            if (url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
             {
                 url = url.Substring(7);
             }
+            else if (url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
+            {
+                url = url.Substring(8);
+            }
             else
             {
                 return url;
@@ -61,19 +65,19 @@ namespace OpenTween
             foreach (var nv in _nicovideo)
             {
                 if (url.StartsWith(nv, StringComparison.Ordinal))
-                    return string.Format("{0}{1}", "http://nico.ms/", url.Substring(nv.Length));
+                    return string.Format("{0}{1}", "https://nico.ms/", url.Substring(nv.Length));
             }
 
             var i = url.IndexOf("nicovideo.jp/user/", StringComparison.OrdinalIgnoreCase);
-            if (i == 0 || i == 4) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(13 + i));
+            if (i == 0 || i == 4) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(13 + i));
 
             i = url.IndexOf("nicovideo.jp/mylist/", StringComparison.OrdinalIgnoreCase);
-            if (i == 0 || i == 4) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(13 + i));
+            if (i == 0 || i == 4) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(13 + i));
 
             i = url.IndexOf("seiga.nicovideo.jp/watch/", StringComparison.OrdinalIgnoreCase);
-            if (i == 0) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(25));
+            if (i == 0) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(25));
 
-            return "http://" + url;
+            return "https://" + url;
         }
     }
 }