• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как в notes форме отобразить интернет страницу?

  • Автор темы haldey
  • Дата начала

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
по html -> text
Код:
%REM
*********************************************
Agent test\ReadHTTP
Created Apr 16, 2015 by Mikhail Cholokov/CRUINTERNET
Description: Comments for Agent
%END REM
Option Public
Option Declare
Use "ErrorHandling"
%Include "lsxbeerr.lss"
'шаблон для получения только текста из нод
Const xslt=|<?xml version="1.0"  encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="text"/>
	<xsl:template match="body">
	<!-- process all the child elements of body in document order -->
		<xsl:apply-templates Select="*"/>
	</xsl:template>
	<xsl:template match="br">
		<xsl:text>
</xsl:text>
		<xsl:apply-templates Select="*"/>
	</xsl:template>
</xsl:stylesheet>|
Sub Initialize
	On Error GoTo ErrH
	Dim jSession As JavaSession
	Dim jError As JavaError
	Dim USER_AGENT As String, sURL As String, sCP As String
	USER_AGENT = {Mozilla/5.0}
	sCP={utf-8} 'предположим "универсальную" кодировку
	'будьте осторожны в своих желания, может оказаться на сайте:
	sCP={windows-1251}
sURL={http://second-ext.inttrust.ru/Site/itforum.nsf/f1eb228a7ae49970c3256a99004aff3d/1cf2925fb5a9460943256a4f0031af11?OpenDocument} 'первое что пришло в голову
  
	Set jSession= New JAVASESSION
	Dim url As Javaclass, urlobj As Javaobject, con As Javaobject, instrm As Javaobject
	Set url=jSession.Getclass({java/net/URL})
	Set urlobj=url.Createobject({(Ljava/lang/String;)V}, sURL)
	'{HttpURLConnection}
	Set con=urlobj.openConnection()
	Call con.setRequestMethod({GET})
	'add request header
	Call con.setRequestProperty({User-Agent}, USER_AGENT)
	Dim ret As Integer
	ret=con.getResponseCode()
	Print {ret code:} ret
	Set instrm=con.getInputStream()
	'Set instrm=urlobj.openStream() 'вариант если все вышеописанное не нужно ;)
	Print {estimate of the number of bytes:} instrm.available()
	Dim inreader, inbuffer, tmpclass As Javaclass
	Set tmpclass=jSession.GetClass({java/io/InputStreamReader})
	Set inreader=tmpclass.CreateObject({(Ljava/io/InputStream;)V}, instrm)
	'не будем полагаться на милось ОС, с кодировкой sCP
	Set inreader=tmpclass.CreateObject({(Ljava/io/InputStream;Ljava/lang/String;)V}, instrm, sCP)
	Set tmpclass=jSession.GetClass({java/io/BufferedReader})
	Set inbuffer=tmpclass.CreateObject({(Ljava/io/Reader;)V},inreader)
	Dim XML_in As NotesStream, ses As New NotesSession
	Set XML_in=ses.CreateStream
	Dim txt As String, sres As String, latch As Boolean, v
	' sres={<?xml version="1.0" encoding="utf-8"?>}
	XML_in.Writetext(sres)
	v=inbuffer.readLine()
	Do While Not IsEmpty(v)
		txt=CStr(v)
		XML_in.Writetext(txt)
		' Print txt
		'для подробностей в ошибке - раскоментить
		' sres=sres+txt
		v=inbuffer.readLine()
	Loop
	XML_in.Position=0
	Dim XSL_ss As NotesStream
	Set XSL_ss=ses.CreateStream
	XSL_ss.Writetext(xslt)
	XSL_ss.Position=0
	Dim XML_out As NotesStream
	Set XML_out=ses.CreateStream
	'ифали будет использоватся Process и файл для вывода - ракаментить
	' If Not XML_out.Open({/test.txt}) Then
	' Error 1024, {file is not opened}
	' End If
	XML_out.Truncate
	Dim transformer As NotesXSLTransformer
	Set transformer=ses.CreateXSLTransformer()
	'ифали будет использоватся Process - ракаментить
	'Set transformer=ses.CreateXSLTransformer(XML_in, xslt, XML_out)
	transformer.InputValidationOption=VALIDATE_NEVER
	'отрубаем эррекцию обработчика на всякие нестыковки в XML_in
	transformer.Exitonfirstfatalerror=False
	'на всяк случай, хотя общего обработчика и transformer.Log хватит за глаза
	On Error lsERR_NOTES_XSLT_INPUT_OBJECT GoTo err_IN
	On Error lsERR_NOTES_XSLT_OUTPUT_OBJECT GoTo err_OUT
	On Error lsERR_NOTES_XSLT_STYLESHEET_OBJECT GoTo err_SS
	'transformer.Process
	'любуемся на мессадж, если в экран влезет..., а если нет - Ctrl-C/Ctrl-V - в блокнот
	MsgBox transformer.Transform(XML_in, XSL_ss)
	'MsgBox transformer.Transform(XML_in, GetXSL({smartXSL}))
Quit:
	Exit Sub
err_IN:
	MessageBox "XSL Input error", , "XSLTransformer Process"
	Exit Sub
err_OUT:
	MessageBox "XSL Output error", , "XSLTransformer Process"
	Exit Sub
err_SS:
	MessageBox "Style Sheet error", , "XSLTransformer Process"
	Exit Sub
ErrH:
	Dim s As String
	If Not transformer Is Nothing Then s=transformer.Log()
	Error Err, RaiseError
	'вывод лога и исходного, хотя.. - не так важно :)
	'Error Err, RaiseError&Chr(10) &s & Chr(10) &sres
End Sub
вощем там с поэтессами и прочим
[DOUBLEPOST=1429289103,1429288883][/DOUBLEPOST]демонстрация оформлена через NotesStream просто как пример (в данном контексте - плевать - можно и текст)
обращу внимание на кодировку - в каментах отмечено
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
вариант действующий (тока обработчик подменить надоть) и
Код:
---------------------------
 
---------------------------
	   Что-то типа такого...function searchBut_click(){	window.location.href = "/Site/itforum.nsf/AA/?SearchView=" + escape( document.all["search"].value);}  Замечание к документу "Если это нужно из Notes делать, то, ...">>>Тема: Что-то типа такого...
Создан:Dmitry Kovalev; Heineken 05/17/2001  12:02 PMМодифицирован:Denis U. Ivanov 05/17/2001  02:18 PMПапка: 
06. Разработка Notes-приложений, 07. Разработка Web-приложенийТип сообщения:
Мне лень заполнять это полеСообщение:import java.net.*;
import java.io.*;
import lotus.domino.*;
 
public class JavaAgent extends AgentBase {
 
	public void NotesMain() {
 
		try {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
 
			// (Your code goes here) 
 
			URL url=new URL("http://www.blackmetal.com");
			InputStream is=url.openStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is,"windows-1251"));
			try
			{
				String nextLine=null;
				while ((nextLine=br.readLine())!=null)	
					System.out.println(nextLine);
			}
			catch(EOFException e)
			{
				e.printStackTrace();
			}
			br.close();
			is.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
 
Иерархия документов данной дискуссии:
задачка маленькая есть. (Dmitry Kovalev; Heineken) (17.05.2001 10:12:48)
.... Если это нужно из Notes делать, то, ... (Denis U. Ivanov; InterTrust) (17.05.2001 10:02:50)
........  Что-то типа такого... (Dmitry Kovalev; Heineken) (17.05.2001 12:02:40)
............ Зачем на Jave-то? Есть чудесный скриптовый метод - GetDocumentByURL (-) (Vitaliy A Bourchenkov) (17.05.2001 14:36:58)
................ Век живи - век учись... :)   (-) (Denis U. Ivanov; InterTrust) (17.05.2001 16:23:23)
............ а это не подойдет ? (Rodion P Varenikov) (17.05.2001 15:51:37)
................ Дома попробовал метод GetDocumentByURL... (Dmitry Kovalev; Heineken) (18.05.2001 9:31:36)
.................... Мне тоже не понравился "GetDoc...()". Особенно тем, что о запускает дополнительную задачу. С Java-ой как-то проще.   (-) (Denis U. Ivanov; InterTrust) (18.05.2001 9:42:49)
........................ ну, я игрался под 4.6 - работало фоновым агентом прекрасно, рефрешь правда не делал... (Rodion P Varenikov) (18.05.2001 18:49:10)
.................... мне право не ловко (Rodion P Varenikov) (19.06.2001 13:18:58)
........................ пошли запрос мне (Dmitry Kovalev; dnet) (19.06.2001 14:06:56)
........................ примерчик на ту же тему (Denis Samoylovich) (19.06.2001 16:49:48)
............ Дим, прошу прощения, это я вместо "Замечание" ткнулся в "Редактировать". :)   (-) (Denis U. Ivanov; InterTrust) (18.05.2001 9:41:59)
................ Я догадался... :-) (Dmitry Kovalev; Heineken) (18.05.2001 11:17:20)
.... COM/OLE Automation вариант, вроде должен работать если есть 5-ый эксплорер (Yegor Malov) (22.05.2001 20:23:47)
........ В принципе, нужно исходить из того, что на машине кроме ОС и сервера Домино ничего не стоит, и вообще не факт что OC это Windows. На Solaris'е это не прокатит (Dmitry Kovalev; Heineken) (23.05.2001 10:05:43)
 
 
Разработчикам и администраторам: курсы, книги, сертификация
---------------------------
ОК   
---------------------------
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
забыл сказать... можете словить java.lang.NullPointerException
нелепые отмазки от ЕБиэМ
лечение (и у меня оно тоже сработало 9.0.1)
JavaCompilerTarget=1.6 в notes.ini
тоже
даже поменяв сборку в java агенте, без этого параметра в ини - ничего не исправилось
апосля - и джава и ЛС2Ж стали работать как задумано :) (т.е. - без необъяснимой ошибки)
[DOUBLEPOST=1429435536,1429435334][/DOUBLEPOST]табличка от вендора
 
  • Нравится
Реакции: alexas1

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
не сказал по-месту, скажу сейчас ;) в хслт применен "хак" т.к. html->text даст кучку текста без перевода строк
закрытие тега <br> в хтмл отсутствует (что для хтмл нормально, но не нормально для хмл)
НО хак работает
HTML:
<xsl:template match="br">
		<xsl:text>
</xsl:text>
		<xsl:apply-templates Select="*"/>
	</xsl:template>
стоит отметить, что если сделать иначе, вынести applay-template - будут пустые строки, это из-за отсутствия закрытия тега
для процессора все выглядит как вложенные теги, и он будет искать текст после закрытия тега (кот. нет)
 

garrick

Lotus Team
26.10.2009
1 351
151
BIT
188
Как-дружно все проигнорировали мой ответ. Решил выложить небольшой пример.
1. Делаем Java-агент, назовём его "Browser".
Java:
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.Session;
 
import org.eclipse.swt.widgets.Display;
 
 
public class JavaAgent extends AgentBase {
 
public void NotesMain() {
Session session = null;
try {
session = getSession();
final AgentContext agentContext = session.getAgentContext();
final lotus.domino.Agent agent = agentContext.getCurrentAgent();
final Document document = agentContext.getDocumentContext();
final Display display = new Display(); 
BrowserDialog dialog = new BrowserDialog(display, document);
dialog.open();
dialog.layout();
while (!dialog.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
agent.recycle();
agentContext.recycle();
session.recycle();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
session.recycle();
} catch (NotesException e) {
e.printStackTrace();
}
}
}
}
2. Добавляем к агенту класс BrowserDialog.
Java:
import lotus.domino.Document;
import lotus.domino.NotesException;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
 
public class BrowserDialog extends Shell {
 
/**
 * Create the shell.
 * 
 * @param display
 */
public BrowserDialog(Display display, final Document document) {
super(display, SWT.DIALOG_TRIM);
try {
setSize(750, 600);
Monitor primary = display.getPrimaryMonitor();
Rectangle bounds = primary.getBounds();
Rectangle rect = getBounds();
int x = bounds.x + (bounds.width - rect.width) / 2;
int y = bounds.y + (bounds.height - rect.height) / 2;
setLocation(x, y);
setLayout(new RowLayout(SWT.HORIZONTAL));
 
ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setLayoutData(new RowData(630, 550));
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
 
Browser browser = new Browser(scrolledComposite, SWT.NONE);
String url = document.getItemValueString("URL");
browser.setUrl(url);
setText(url);
scrolledComposite.setContent(browser);
scrolledComposite.setMinSize(browser.computeSize(SWT.DEFAULT, SWT.DEFAULT));
 
Composite composite = new Composite(this, SWT.NONE);
composite.setLayoutData(new RowData(83, 567));
 
Button btnOK = new Button(composite, SWT.NONE);
btnOK.setBounds(10, 10, 68, 23);
btnOK.setText("OK");
btnOK.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
document.replaceItemValue("Agree", "OK");
document.save();
close();
} catch (NotesException e1) {
e1.printStackTrace();
}
}
});
 
Button btnCancel = new Button(composite, SWT.NONE);
btnCancel.setBounds(10, 39, 68, 23);
btnCancel.setText("Cancel");
btnCancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
close();
}
});
 
createContents();
 
} catch (Exception e1) {
e1.printStackTrace();
}
}
 
/**
 * Create contents of the shell.
 */
protected void createContents() {
}
 
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
2. Считаем, что на форме документа у нас есть поля URL (с адресом, который нужно показать) и Agree (с ответом пользователя "OK"). Создаём кнопку с кодом для вызова агента
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim database As NotesDatabase
Dim agent As NotesAgent
 
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set database = session.CurrentDatabase
Set agent = database.GetAgent("(Browser)")
Call agent.RunWithDocumentContext(doc)
'далее либо закрыть, либо переоткрыть (по вкусу) текущий документ для отображения ответа, если это необходимо
 
End Sub
[DOUBLEPOST=1429869357,1429869174][/DOUBLEPOST]E-e-e-e-eeee... А как в коде отступы форматировать? Я думал оно само умеет :(
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Как-дружно все проигнорировали мой ответ.
НуачО говорить? Это же - "можно-и-так".
Моё ИМХО
в нек. случаях можно взять текст, в нек. накрыть своим макетом, с информацией с сайта, а на сайт отправить сабмит (если вообще оно надо)
- мах. удобно со всех точек зрения.
Способы получения\показа\сабмита вебинфы можно и дальше перечислять.
А надо? Инициатор беседы молчит :(
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!