OSDN Git Service

●用SSL障害のため強制ログインモード追加(2003/12/21まで)
authorh677 <h677>
Sat, 13 Dec 2003 09:19:25 +0000 (09:19 +0000)
committerh677 <h677>
Sat, 13 Dec 2003 09:19:25 +0000 (09:19 +0000)
Dolib.pas
Giko.dfm
Giko.pas

index 259b6d2..0944f8f 100644 (file)
--- a/Dolib.pas
+++ b/Dolib.pas
@@ -65,10 +65,12 @@ type
                function GetErrorMsg: string;
                procedure MakeError(Session: TDolibSession; Error: DWORD);
                procedure DOLIB_LOGIN(Proxy: string; Port: Integer; ID: string; Pass: string);
+        procedure ForcedDOLIB_LOGIN(Proxy: string; Port: Integer; ID: string; Pass: string);
        public
                constructor Create;
                destructor  Destroy; override;
                function  Connect: boolean;
+        function  ForcedConnect: boolean;   //2003/12/20\82Ü\82Å\82ÌSSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93\81i12/21\88È\8d~\82È\82ç\92Ê\8fí\83\8d\83O\83C\83\93\81j
                function  Disconnect: boolean;
                property  ProxyAddress: string  read  FProxyAddress write FProxyAddress;
                property  ProxyPort: integer  read  FProxyPort  write FProxyPort;
@@ -127,6 +129,14 @@ begin
                end;
        end;
 end;
+function  TDolib.ForcedConnect: boolean;   //2003/12/20\82Ü\82Å\82ÌSSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93\81i12/21\88È\8d~\82È\82ç\92Ê\8fí\83\8d\83O\83C\83\93\81j
+begin
+       Result := False;
+       if not Connected then begin
+               ForcedDOLIB_LOGIN(FProxyAddress, FProxyPort, FUserName, FPassword);
+        Result := True;
+       end;
+end;
 
 function TDolib.Disconnect: boolean;
 begin
@@ -276,6 +286,72 @@ begin
                InternetCloseHandle(hSession);
        end;
 end;
+//2003/12/20\82Ü\82Å\82ÌSSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93\81i12/21\88È\8d~\82È\82ç\92Ê\8fí\83\8d\83O\83C\83\93\81j
+procedure TDolib.ForcedDOLIB_LOGIN(Proxy: string; Port: Integer; ID: string; Pass: string);
+var
+       hSession: HINTERNET;
+       hConnect: HINTERNET;
+       hRequest: HINTERNET;
+       ProxyHostPort: string;
+       Buf: array[0..4096] of Char;
+       UserInfo: string;
+       UserAgent: string;
+       cb: DWORD;
+       Delim: Integer;
+begin
+       FSession := TDolibSession.Create;
+
+       if Proxy <> '' then begin
+               ProxyHostPort := Format('%s:%d', [Proxy, Port]);
+               hSession := InternetOpen(DOLIB_LOGIN_UA, INTERNET_OPEN_TYPE_PROXY, PChar(ProxyHostPort), '', 0);
+       end else begin
+               hSession := InternetOpen(DOLIB_LOGIN_UA, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
+       end;
 
+       if not Assigned(hSession) then
+               MakeError(FSession, GetLastError())
+       else begin
+               hConnect := InternetConnect(hSession, DOLIB_LOGIN_HOST,
+                       INTERNET_DEFAULT_HTTPS_PORT, nil, nil,
+                       INTERNET_SERVICE_HTTP, INTERNET_FLAG_SECURE, 0);
+               if not Assigned(hConnect) then
+                       MakeError(FSession, GetLastError())
+               else begin
+                       hRequest := HttpOpenRequest(hConnect, 'POST', DOLIB_LOGIN_URL,
+                               nil, nil, nil,
+                               INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES or
+                               INTERNET_FLAG_NO_UI or INTERNET_FLAG_SECURE, 0);
+                       if not Assigned(hRequest) then
+                               MakeError(FSession, GetLastError())
+                       else begin
+                               UserInfo := Format('ID=%s&PW=%s', [ID, Pass]);
+                               UserAgent := Format('%s %s', [DOLIB_2CH_UA, ClientUA]) + #13#10;
+                               HttpSendRequest(hRequest, PChar(UserAgent), DWORD(-1), PChar(UserInfo), Length(UserInfo));
+                if not InternetReadFile(hRequest, @Buf, SizeOf(Buf), cb) then
+                    MakeError(FSession, GetLastError())
+                else if (cb < 11) or (Pos('SESSION-ID=', Buf) <> 1) then
+                    MakeError(FSession, ERROR_INVALID_DATA)
+                else begin
+                    if Buf[cb - 1] = #10 then
+                        Buf[cb - 1] := #0;
+                    FSession.SessionID := Copy(Buf, 12, cb);
+                    if FSession.SessionID = '' then
+                        MakeError(FSession, ERROR_NOT_ENOUGH_MEMORY);
+                    Delim := Pos(':', Buf);
+                    if Delim = 0 then
+                        MakeError(FSession, ERROR_INVALID_DATA)
+                    else begin
+                        FSession.UserAgent := Copy(Buf, 12, Delim - 12);
+                        if FSession.UserAgent = '' then
+                            MakeError(FSession, ERROR_NOT_ENOUGH_MEMORY);
+                    end;
+                               end;
+                               InternetCloseHandle(hRequest);
+                       end;
+                       InternetCloseHandle(hConnect);
+               end;
+               InternetCloseHandle(hSession);
+       end;
+end;
 end.
 
index 2f843a6..3aeaa95 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -20,7 +20,6 @@ object GikoForm: TGikoForm
   OnCloseQuery = FormCloseQuery
   OnCreate = FormCreate
   OnDestroy = FormDestroy
-  OnKeyDown = FormKeyDown
   OnKeyUp = FormKeyUp
   OnMouseWheel = FormMouseWheel
   OnResize = FormResize
@@ -5443,6 +5442,11 @@ object GikoForm: TGikoForm
       OnExecute = UpBoardActionExecute
       OnUpdate = UpBoardActionUpdate
     end
+    object KoreCopy: TAction
+      Category = #12502#12521#12454#12470#12509#12483#12503#12450#12483#12503
+      Caption = #12371#12398#12524#12473#12467#12500#12540
+      OnExecute = KoreCopyExecute
+    end
   end
   object MainMenu: TMainMenu
     Images = HotToobarImageList
@@ -6124,6 +6128,12 @@ object GikoForm: TGikoForm
     object MenuItem2: TMenuItem
       Action = KokoResAction
     end
+    object N64: TMenuItem
+      Caption = '-'
+    end
+    object N63: TMenuItem
+      Action = KoreCopy
+    end
     object N41: TMenuItem
       Caption = '-'
     end
index 98847bd..62a36ce 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -12,8 +12,9 @@ uses
        SHDocVw_TLB,
        MSHTML_TLB,
 {$IFEND}
-       IdHTTP, ActiveX, Clipbrd, Buttons, ToolWin, {HTTPApp,} YofUtils, IdComponent,
-       ShellAPI, ImgList, ActnList, UrlMon, Tabs, IdGlobal, StrUtils,
+       IdHTTP, ActiveX, ActnList, ImgList,
+    ToolWin, Buttons, {Clipbrd,} {HTTPApp,} YofUtils, IdComponent,
+       ShellAPI,  UrlMon, Tabs, IdGlobal, StrUtils,
        CommCtrl, IniFiles, Dialogs,
        GikoSystem, GikoUtil, Setting, BoardGroup, ThreadControl, ItemDownload,
        Editor, RoundData, RoundName, KeySetting, GikoPanel, Favorite, FavoriteAdd,
@@ -517,6 +518,9 @@ type
     N24: TMenuItem;
     N62: TMenuItem;
     N61: TMenuItem;
+    N63: TMenuItem;
+    KoreCopy: TAction;
+    N64: TMenuItem;
                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure CabinetPanelHide(Sender: TObject);
@@ -755,8 +759,6 @@ type
                procedure NG1Click(Sender: TObject);
                procedure SelectResActionExecute(Sender: TObject);
                procedure SelectResActionUpdate(Sender: TObject);
-               procedure FormKeyDown(Sender: TObject; var Key: Word;
-                       Shift: TShiftState);
                procedure FormKeyUp(Sender: TObject; var Key: Word;
                        Shift: TShiftState);
                procedure AllResActionExecute(Sender: TObject);
@@ -822,6 +824,7 @@ type
                procedure UpBoardActionUpdate(Sender: TObject);
     procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
       var Handled: Boolean);
+    procedure KoreCopyExecute(Sender: TObject);
        private
                { Private \90é\8c¾ }
         //RoundList : TRoundList;
@@ -1028,7 +1031,7 @@ implementation
 
 uses
        About, Option, Round, Splash, Sort, ListSelect,
-       NewBoard, MojuUtils;
+       NewBoard, MojuUtils,Clipbrd;
 
 const
        CAPTION_NAME: string = '\83M\83R\83i\83r';
@@ -5632,7 +5635,11 @@ end;
 procedure TGikoForm.LoginActionExecute(Sender: TObject);
 var
        TmpCursor: TCursor;
+    LimitDay: TDateTime;
+    Today:  TDateTime;
 begin
+       LimitDay := EncodeDate( 2003, 12, 21);
+    Today := Date;
        if GikoSys.Dolib.Connected then begin
                //\83\8d\83O\83A\83E\83g
                GikoSys.Dolib.Disconnect;
@@ -5643,27 +5650,54 @@ begin
                TmpCursor := Screen.Cursor;
                Screen.Cursor := crHourGlass;
                try
-                       GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
-                       GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
-                       GikoSys.Dolib.Password := GikoSys.Setting.Password;
-                       if GikoSys.Setting.ReadProxy then begin
-                               GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
-                               GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
-                       end else begin
-                               GikoSys.Dolib.ProxyAddress := '';
-                               GikoSys.Dolib.ProxyPort := 0;
-                       end;
-                       if GikoSys.Dolib.Connect then begin
-                               LoginAction.Checked := True;
-                               AddMessageList('\83\8d\83O\83C\83\93\82µ\82Ü\82µ\82½ - ' + GikoSys.Setting.UserID, nil, gmiOK);
-                               LoginAction.Caption := '\83\8d\83O\83A\83E\83g(&L)';
-                       end else begin
-       //                      MsgBox(Handle, '\83\8d\83O\83C\83\93\8fo\97\88\82Ü\82¹\82ñ\82Å\82µ\82½', '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
-                               AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
-                               PlaySound('Error');
-                               LoginAction.Checked := False;
-                               LoginToolButton.Down := False;
-                       end;
+            //2003/12/20\82Ü\82Å\82ÌSSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93\81i12/21\88È\8d~\82È\82ç\92Ê\8fí\83\8d\83O\83C\83\93\81j
+            if CompareDate( LimitDay, Today ) = -1 then begin
+                               GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
+                               GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
+                               GikoSys.Dolib.Password := GikoSys.Setting.Password;
+                               if GikoSys.Setting.ReadProxy then begin
+                                       GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
+                                       GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
+                               end else begin
+                                       GikoSys.Dolib.ProxyAddress := '';
+                                       GikoSys.Dolib.ProxyPort := 0;
+                               end;
+                               if GikoSys.Dolib.Connect then begin
+                                       LoginAction.Checked := True;
+                                       AddMessageList('\83\8d\83O\83C\83\93\82µ\82Ü\82µ\82½ - ' + GikoSys.Setting.UserID, nil, gmiOK);
+                                       LoginAction.Caption := '\83\8d\83O\83A\83E\83g(&L)';
+                               end else begin
+               //                      MsgBox(Handle, '\83\8d\83O\83C\83\93\8fo\97\88\82Ü\82¹\82ñ\82Å\82µ\82½', '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
+                                       AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
+                                       PlaySound('Error');
+                                       LoginAction.Checked := False;
+                                       LoginToolButton.Down := False;
+                               end;
+               end else begin
+                               GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
+                               GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
+                               GikoSys.Dolib.Password := GikoSys.Setting.Password;
+                if GikoSys.Setting.ReadProxy then begin
+                                       GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
+                                       GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
+                               end else begin
+                                       GikoSys.Dolib.ProxyAddress := '';
+                                       GikoSys.Dolib.ProxyPort := 0;
+                               end;
+                //2003/12/20\82Ü\82Å\82ÌSSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93\81i12/21\88È\8d~\82È\82ç\92Ê\8fí\83\8d\83O\83C\83\93\81j
+                GikoSys.Dolib.ForcedConnect;
+                if GikoSys.Dolib.Connect then begin
+                       LoginAction.Checked := True;
+                       AddMessageList('\8b­\90§\83\8d\83O\83C\83\93\82µ\82Ü\82µ\82½ - ' + GikoSys.Setting.UserID, nil, gmiOK);
+                       LoginAction.Caption := '\83\8d\83O\83A\83E\83g(&L)';
+                end else begin
+               //                      MsgBox(Handle, '\83\8d\83O\83C\83\93\8fo\97\88\82Ü\82¹\82ñ\82Å\82µ\82½', '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
+                                       AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
+                                       PlaySound('Error');
+                                       LoginAction.Checked := False;
+                                       LoginToolButton.Down := False;
+                               end;
+            end;
                finally
                        Screen.Cursor := TmpCursor;
                end;
@@ -6176,9 +6210,9 @@ var
        i, bi                                   : Integer;
        boardURL                        : string;
        tmpThread                       : TThreadItem;
-       category                        : TCategory;
-       categoryNode    : TTreeNode;
-       boardNode                       : TTreeNode;
+//     category                        : TCategory;
+//     categoryNode    : TTreeNode;
+//     boardNode                       : TTreeNode;
        shiftDown                       : Boolean;
        ctrlDown                        : Boolean;
 begin
@@ -6671,7 +6705,7 @@ begin
                         Body := CustomStringReplace(Body, '&quot;', '"');
                         Body := CustomStringReplace(Body, '&amp;', '&');
                         Body := CustomStringReplace(Body, '&nbsp;', ' ');
-                    
+
                         FHint.Add(Header, Body);
                         FHint.Title := '';
                     end;
@@ -7535,66 +7569,9 @@ begin
        SelectResAction.Enabled := GetActiveContent <> nil;
 end;
 
-procedure TGikoForm.FormKeyDown(Sender: TObject; var Key: Word;
-       Shift: TShiftState);
-
-//var
-begin
-{
-       ThreadItem := GetActiveContent;
-       if ThreadItem <> nil then begin
-               if ssCtrl in Shift then begin
-                       if ssAlt in Shift then begin
-                               Doc := Browser.Document as IHtmlDocument2;
-                               s := IntToStr(Fkeynum);
-                               if GikoSys.IsNumeric(s) then begin
-                                       ThreadItem := GetActiveContent;
-                                       if ThreadItem <> nil then begin
-                                               Num := StrToInt(s);
-                                               FHint.PopupType := gptThread;
-                                               SetResPopupText(ThreadItem, Num, Num, False, False);
-                                               if FHint.ResCount <> 0 then begin
-                                                       ShowTextPopup;
-                                               end;
-                                       end;
-                               end;
-                               Fkeynum := 0;
-                       end else begin
-                               if Fkeynum = 0 then begin
-                                       if (Key >= $60) and (Key <= $69) then begin
-                                                       Fkeynum := Key - $60;
-                                       end;
-                               end else begin
-                                       if (Key >= $60) and (Key <= $69) then begin
-                                                       Fkeynum := Fkeynum * 10 + Key - $60;
-                                       end;
-                               end;
-                       end;
-               end else begin
-                       Fkeynum := 0;
-                       if FHint <> nil then begin
-                               FHint.ReleaseHandle;
-                               FHint.ClearAllRes;
-                       end;
-               end;
-       end;
-}
-end;
-
-
 procedure TGikoForm.FormKeyUp(Sender: TObject; var Key: Word;
        Shift: TShiftState);
 begin
-{
-       if Key = $11 then begin
-               Fkeynum := 0;
-               if FHint <> nil then begin
-                       FHint.ReleaseHandle;
-                       FHint.ClearAllRes;
-               end;
-
-       end;
-}
 end;
 
 // \91S\82Ä\82Ì\83\8c\83X\82ð\95\\8e¦
@@ -8732,6 +8709,62 @@ begin
 
 end;
 
+procedure TGikoForm.KoreCopyExecute(Sender: TObject);
+var
+    ThreadItem: TThreadItem;
+       Number: Integer;
+    msg : PChar;
+       i: Integer;
+       tmp: string;
+       FileName: string;
+       Line: Integer;
+
+       wkInt: Integer;
+
+       Res: TResRec;
+       Header: string;
+       Body: string;
+    boardPlugIn : TBoardPlugIn;
+begin
+       Number := KokoPopupMenu.Tag;
+       if Number = 0 then Exit;
+       ThreadItem := GetActiveContent;
+
+    if ThreadItem <> nil then begin
+       if ThreadItem.IsBoardPlugInAvailable then begin
+               //===== \83v\83\89\83O\83C\83\93\82É\82æ\82é\95\\8e¦
+            boardPlugIn                := ThreadItem.BoardPlugIn;
+
+            // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
+            // \95\8e\9a\83R\81[\83h\82Í\83v\83\89\83O\83C\83\93\82É\94C\82¹\82é
+            //\82±\82±\82Å\82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\82Ì\8c`\8e®\82Å\82P\8ds\93Ç\82Ý\8d\9e\82ß\82ê\82Î¥¥¥\81B
+            tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
+        end else begin
+            FileName := ThreadItem.FilePath;
+            tmp := GikoSys.ReadThreadFile(FileName, Number);
+        end;
+        if  tmp <> '' then begin
+               Res := GikoSys.DivideStrLine(tmp);
+
+            Header := IntToStr(Number) + ' \81F' + Res.FName + '\81F' + Res.FDateTime + #10;
+
+            Body := CustomStringReplace(Res.FBody, '<br> ', #10,true);
+            Body := CustomStringReplace(Body, '<br>', #10,true);
+            Body := CustomStringReplace(Body, '</a>', '',true);
+            Body := GikoSys.DeleteLink(Body);
+            Body := CustomStringReplace(Body, '&lt;', '<');
+            Body := CustomStringReplace(Body, '&gt;', '>');
+            Body := CustomStringReplace(Body, '&quot;', '"');
+            Body := CustomStringReplace(Body, '&amp;', '&');
+            //Body := CustomStringReplace(Body, '&nbsp;', ' ');
+
+            Header := Header + Body;
+
+            Clipboard.SetTextBuf( PChar(Header) );
+        end;
+    end;
+end;
+
 initialization
                                OleInitialize(nil);
 finalization