1 module oauth_page; 2 3 import std.typecons; 4 import std.process; 5 6 import awebview.wrapper; 7 import awebview.gui.html; 8 import awebview.gui.widgets.button; 9 import awebview.gui.widgets.text; 10 import awebview.gui.application; 11 12 import graphite.twitter; 13 14 import carbon.functional; 15 16 17 class OAuthPage : TemplateHTMLPage!(import(`oauth_page.html`)) 18 { 19 private 20 alias NormalButton = InputButton!(["class": "btn btn-xs btn-primary"]); 21 22 23 this() 24 { 25 super("oauthPage"); 26 27 this ~= new InputText!()("iptCnsKey"); 28 this ~= new InputText!()("iptCnsSct"); 29 30 this ~= (new NormalButton("btnOpenBrowser")).observe!((a){ 31 a.onClick.connect!"onClickOpenBrowser"(this); 32 a.staticProps["value"] = "ブラウザで開く"; 33 }); 34 35 this ~= (new NormalButton("btnDoOAuth")).observe!((a){ 36 a.onClick.connect!"onClickDoOAuth"(this); 37 a.staticProps["value"] = "認証"; 38 }); 39 40 this ~= new InputText!()("iptPinCode"); 41 } 42 43 44 void onClickOpenBrowser(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 45 { 46 auto cnsKey = elements["iptCnsKey"].to!ITextInput.text(), 47 cnsSct = elements["iptCnsSct"].to!ITextInput.text(); 48 49 if(_twTkn.isNull && cnsKey.length && cnsSct.length){ 50 auto cnsTkn = ConsumerToken(cnsKey, cnsSct); 51 _twTkn = Twitter(Twitter.oauth.requestToken(cnsTkn, null)); 52 //browse(_twTkn.callAPI!"oauth.authorizeURL"()); 53 activity.addChild(application.to!SDLApplication.createActivity(WebPreferences.recommended, 54 new WebPage("oauthWebPage", _twTkn.callAPI!"oauth.authorizeURL"()), "oauthWebPageActivity", 600, 400, "Twitter OAuth")); 55 } 56 } 57 58 59 override 60 void onUpdate() 61 { 62 if(auto pTwiPage = "oauthWebPageActivity" in activity.children) 63 { 64 if((*pTwiPage).querySelectorAll("#code-desc")["length"].get!uint){ 65 string str = (*pTwiPage)[$("code")]["innerHTML"].to!string; 66 elements["iptPinCode"].to!ITextOutput.text = str; 67 activity.children["oauthWebPageActivity"].close(); 68 onClickDoOAuthImpl(); 69 } 70 } 71 } 72 73 74 void onClickDoOAuth(FiredContext ctx, WeakRef!(const(JSArrayCpp)) args) 75 { 76 onClickDoOAuthImpl(); 77 } 78 79 80 void onClickDoOAuthImpl() 81 { 82 auto pinCode = elements["iptPinCode"].to!ITextInput.text(); 83 if(!_twTkn.isNull && pinCode.length){ 84 _twTkn = Twitter(_twTkn.callAPI!"oauth.accessToken"(pinCode)); 85 } 86 87 elements["btnOpenBrowser"]["disabled"] = true; 88 elements["btnDoOAuth"]["disabled"] = true; 89 activity.load("mainPage"); 90 } 91 92 93 Nullable!Twitter token() 94 { 95 return _twTkn; 96 } 97 98 99 private: 100 NormalButton _btnOpenBrowser; 101 Nullable!Twitter _twTkn; 102 }