• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

как подписать Button на Rich Text Item

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

Vvv

Подскажите пожалуйста как можно подписать button (horspot) на rich text item
item не имеет секций
устанавливал IsSigned = True и подписывал item и note
все равно при нажатии на кнопку появляеться диалог доверять или нет автору кнопки а не пользователю которым пытался подписывать
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Вот порос так вопрос ;)
Код желательно подписывать сервером. Тогда подобного диалога не будет
 
V

Vvv

Вот порос так вопрос
Код желательно подписывать сервером. Тогда подобного диалога не будет

создаю вторую тестовую кнопку под юзером которым пользовался для подписи
диалога не появляеться, те необязательно подписывать сервером

в моем случаи что появляеться диалог плохо но не критично
у меня не получаеться так подписать базу документы что бы появлялся диалог на доверя пользователю под которым подписывали а не автора кнопки (3 разных человека делали документы надо что бы они все были подписанны одним лицом)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Ты делаешь цифровую подпись RT-поля? Или что ты хочешь сделать?
А то то что ты пишешь - набор слов
 
V

Vvv

Ты делаешь цифровую подпись RT-поля?

да я делаю цифровую подпись RT-поля

я нашел упоминание о проблемме подписи кнопки в документе


связался с этим Rod он говорит что исходников у него уже нет, прототип для NSFMemorySign он непомнит
 
V

Vvv

есть вот такая функция которая должна решить проблемму NSFNoteSignHotspots
но чего то она не помогает
 
V

Vvv

NSFSearch выбрал документы с Form="MyForm"
для каждой ноты вызвал NSFNoteSignHotspots с
hNote
флаг 0
ссылка на флаг была note подписанна или нет (в 70% возращает что была)
эфекта нет все равно появляеться диалог доверять автору кнопки а не кем подписывал

на форуме на ibm нашел что народ жалуеться у них тоже эта функция не помогла
 
T

turumbay

не верю(с). где пример вызова?
поменяю мой рабочий код на ваш нерабочий...
 
V

Vvv

STATUS SignElements(DBHANDLE hDB)
{
STATUS error = NOERROR;

// error = SignDataNotes(hDB, NOTE_ID_SPECIAL | NOTE_CLASS_DESIGN, TRUE);
error = SignDataNotes(hDB, NOTE_CLASS_PRIVATE | NOTE_CLASS_FILTER, TRUE);
error = SignDataNotes(hDB, NOTE_CLASS_ICON, TRUE);
error = SignDataNotes(hDB, NOTE_CLASS_HELP, TRUE);

error = SignDataNotes(hDB, NOTE_CLASS_DATA, TRUE);

return error;
}

/************************************************************************

FUNCTION: SignDataNotes

This function exports a set of notes based on the Note Class(es)
specified. (NOTE_CLASS_xxx)

*************************************************************************/
STATUS LNPUBLIC SignDataNotes(DBHANDLE hDB, WORD wNoteClassMask, BOOL bDesignNotes)
{
STATUS error = NOERROR;
HANDLE hNoteIDTable; /* table of Note IDs to modify */


/*
* Need to set up an ID Table which will contain a list of Note IDs that are to be exported.
*/
if (error = IDCreateTable(sizeof(NOTEID), &hNoteIDTable))
return(error);

/*
* Call NSFSearch to find the notes that match the note classes we would like to export.
* For each note found, the routine AddIdUnique is called.
*/

if (error = NSFSearch(hDB, /* database handle */
NULLHANDLE, /* selection formula */
NULL, /* title of view in selection formula */
0, /* search flags */
wNoteClassMask, /* note class to find */
NULL, /* starting date (unused) */
AddIDUnique, /* call for each note found */
&hNoteIDTable, /* argument to AddIDUnique */
NULL)) /* returned ending date (unused) */

{
IDDestroyTable(hNoteIDTable);
return(error);
}

if (error = IDEnumerate(hNoteIDTable, Processnote, hDB))
{
IDDestroyTable(hNoteIDTable);
return(error);
}

/*
* Free the memory containing the ID table
*/
IDDestroyTable(hNoteIDTable);

return (error);
}

/************************************************************************

FUNCTION: AddIDUnique

*************************************************************************/
STATUS LNPUBLIC AddIDUnique(void far * phNoteIDTable, SEARCH_MATCH far *pSearchMatch, ITEM_TABLE far *summary_info)
{
SEARCH_MATCH SearchMatch;
HANDLE hNoteIDTable;
STATUS error;
BOOL flagOK;

memcpy( (char*)&SearchMatch, (char*)pSearchMatch, sizeof(SEARCH_MATCH) );

/* if (SearchMatch.MatchesFormula != SE_FMATCH) V3 */
if (!(SearchMatch.SERetFlags & SE_FMATCH)) /* V4 */
return (NOERROR);

hNoteIDTable = *((HANDLE far *)phNoteIDTable);

error = IDInsert(hNoteIDTable, SearchMatch.ID.NoteID, &flagOK);

return (NOERROR);
}

/************************************************************************

FUNCTION: Processnote

PURPOSE:

INPUTS:

*************************************************************************/

STATUS LNCALLBACK Processnote(void far *hDB, NOTEID NoteId)
{
STATUS error = NOERROR;
NOTEHANDLE hNote = NULLHANDLE;

BOOL retfSigned = FALSE;


//Open the Note.
if (error = NSFNoteOpen(hDB, //database handle
NoteId, //Note ID
OPEN_EXPAND, //open flags
&hNote))
{
return (ERR(error));
}

error = NSFNoteUnsign(hNote);
error = NSFNoteSignHotspots(hNote, 0, &retfSigned);
printf("%i\n", retfSigned);
if (error = NSFNoteSign(hNote))
{
goto Exit0;
}

if (error = NSFNoteUpdate(hNote, UPDATE_FORCE))
return (ERR(error));

Exit0:

//close note
if (error = NSFNoteClose(hNote))
return (ERR(error));

return error;
}
 
T

turumbay

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">sign hotspots</div></div><div class="sp-body"><div class="sp-content">
Код:
Declare Function NSFNoteSignHotspots Lib "nnotes.dll" ( Byval hNote As Long, Byval dwFlags As Long , Byval retfSigned As Integer) As Integer
Declare Function NSFNoteUpdate Lib "nnotes.dll" (Byval hNote As Long, Byval flags As Integer) As Integer

''	USAGE:
''	Dim signer As New HotSpotSigner(doc)
''	Call signer.sign()
Class HotSpotSigner

Private t_doc As NotesDocument
Private t_db As NotesDatabase
Private t_unid As String

Sub new( i_doc As NotesDocument )
Set t_doc = i_doc
Set t_db = i_doc.ParentDatabase
t_unid = i_doc.UniversalID
End Sub


Sub sign()
' сбрасываем подписи, выполняя экспорт-импорт в DXL
Call reexport() 
' собственно подписывам хотспоты
Call signHotSpots()

'** a little trick to avoid this message on recompiled forms:
'** This document has been altered since the last time it was signed! Intentional tampering may have occurred.
Call reopenDocFromFromDisk()		
Call t_doc.Sign()
Call t_doc.Save(True, False)
End Sub

' экспорт, и тут же импорт документа. сбрасывает подписи в хотспотах.
Private Sub reexport()
Dim session As New NotesSession
Dim stream As NotesStream
Set stream = session.CreateStream

Dim exporter As NotesDXLExporter
Set exporter = session.CreateDXLExporter
Call exporter.SetInput( t_doc)
Call exporter.SetOutput(stream)
Call exporter.Process

Dim importer As NotesDXLImporter
Set importer = session.CreateDXLImporter(stream, t_db )
importer.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
Call importer.Process

Call reopenDocFromFromDisk()
End Sub

Private Sub signHotSpots
If NSFNoteSignHotspots( t_doc.Handle , 0 , False ) <> 0 Then
Error 1001 , "Cannot sign: "
End If
If NSFNoteUpdate( t_doc.Handle , 0) <> 0 Then
Error 1001 , "Cannot save: "
End If
End Sub

' update in-memory reference to document
Private Sub reopenDocFromFromDisk()
Delete t_doc
Set t_doc = t_db.GetDocumentByUNID(t_unid)
End Sub
End Class
winxp32, клиент 703. полет нормальный.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
turumbay там код на Сях... (должен быть)
потому вопрос несколько сложнее :)
 
V

Vvv

turumbay большое спасибо за помощь
код работает

основная ошибка после error = NSFNoteUnsign(hNote); надо переоткрыть Note
как допилю код сюда напишу - с подписями в help есть ошибка в примере и пару неточностей которые делают примеры нерабочими для общего случая подписи базы (на LS вы эти грабли обшли тк писали часть кода на LS)
вообщем Notes он такой Notes блин
 
T

turumbay

turumbay там код на Сях... (должен быть)
потому вопрос несколько сложнее :)
в сях я не копенгаген.
но подозреваю, что реальный сишник разберется как переписать: суть происходящего в целом понятна.
 
V

Vvv

DXL export/import на Си не глобальная проблемма я делал до этого (мы делали через dxl экспорт из Notes в Word 2003)
у меня с этой библиотекой возникла проблемма примерно у 3 из 25 документов HotSpot не подписываються корректно (те всеравно появляеться диалог доверять автору а не пользователю кем я подписываю)
криминала с этими документами не вижу

это агент с которым я эксперментирую
колекция ломаеться тк документы пересоздаються поэтому сделал два цикла

%REM
Agent Sign
Created Mar 25, 2011 by superuser/pts
Description: Comments for Agent
%END REM
Option Public
Option Declare

Declare Function NSFNoteSignHotspots Lib "nnotes.dll" ( ByVal hNote As Long, ByVal dwFlags As Long , ByVal retfSigned As Integer) As Integer
Declare Function NSFNoteUpdate Lib "nnotes.dll" (ByVal hNote As Long, ByVal flags As Integer) As Integer

'' USAGE:
'' Dim signer As New HotSpotSigner(doc)
'' Call signer.sign()
Class HotSpotSigner

Private t_doc As NotesDocument
Private t_db As NotesDatabase
Private t_unid As String

Sub New( i_doc As NotesDocument )
Set t_doc = i_doc
Set t_db = i_doc.ParentDatabase
t_unid = i_doc.UniversalID
End Sub


Sub sign()
' сбрасываем подписи, выполняя экспорт-импорт в DXL
Call reexport()
' собственно подписывам хотспоты
Call signHotSpots()

'** a little trick to avoid this message on recompiled forms:
'** This document has been altered since the last time it was signed! Intentional tampering may have occurred.
Call reopenDocFromFromDisk()
Call t_doc.Sign()
Call t_doc.Save(True, False)
End Sub

' экспорт, и тут же импорт документа. сбрасывает подписи в хотспотах.
Private Sub reexport()
Dim session As New NotesSession
Dim stream As NotesStream
Set stream = session.CreateStream

Dim exporter As NotesDXLExporter
Set exporter = session.CreateDXLExporter
Call exporter.SetInput( t_doc)
Call exporter.SetOutput(stream)
Call exporter.Process

Dim importer As NotesDXLImporter
Set importer = session.CreateDXLImporter(stream, t_db )
importer.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
Call importer.Process

Call reopenDocFromFromDisk()
End Sub

Private Sub signHotSpots
If NSFNoteSignHotspots( t_doc.Handle , 0 , False ) <> 0 Then
MsgBox "Cannot sign: "
End If
If NSFNoteUpdate( t_doc.Handle , 0) <> 0 Then
MsgBox "Cannot save: "
End If
End Sub

' update in-memory reference to document
Private Sub reopenDocFromFromDisk()
Delete t_doc
Set t_doc = t_db.GetDocumentByUNID(t_unid)
End Sub
End Class
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim unidArr() As String
Dim i As integer

i = 0

Set db = session.CurrentDatabase
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
ReDim Preserve unidArr(i)
unidArr(i) = doc.Universalid
i = i + 1
Set doc = collection.GetNextDocument(doc)
Wend

forAll unid In unidArr
Dim hss As HotSpotSigner
Set doc = db.Getdocumentbyunid(unid)
Set hss = New HotSpotSigner(doc)
Call hss.sign()
End ForAll

MsgBox "Test"

End Sub
 
T

turumbay

у меня с этой библиотекой возникла проблемма примерно у 3 из 25 документов HotSpot не подписываються корректно (те всеравно появляеться диалог доверять автору а не пользователю кем я подписываю)
криминала с этими документами не вижу
после dxl импорта существующие подписи должны слетать. наличие диалога "доверять автору" - признак того, что не прошел импорт... м.б. поиграть опциями импортера?
updated а чтоб коллекция не ломалась - нужно сразу получать ссылку на следующий док
Код:
while not doc is nothing
Set nextDoc = collection.getNextDocument(doc )
'' any operation with doc
Set doc = nextDoc
wend
 
Мы в соцсетях:

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