Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
sources/TASIPKeyPane.cp
// TASIPKeyPane.cp - AppleShare IP Dialog Pane Object |
// |
// Apple Macintosh Developer Technical Support |
// Written by: Vinnie Moscaritolo |
// |
// Copyright (work in progress) Apple Computer, Inc All rights reserved. |
// |
// You may incorporate this sample code into your applications without |
// restriction, though the sample code has been provided "AS IS" and the |
// responsibility for its operation is 100% yours. However, what you are |
// not permitted to do is to redistribute the source as "DSC Sample Code" |
// after having made changes. If you're going to re-distribute the source, |
// we require that you make it clear in the source that the code was |
// descended from Apple Sample Code, but that you've made changes. |
// |
#include <Appearance.h> |
#include <Drag.h> |
#include "TASIPKeyPane.h" |
#include "TPGPException.h" |
static enum{ |
kServerAuthPaneDITL = 140, |
}; |
enum { |
kKeyDragBox = 1 , |
kKeyInfoBox , |
kKeyErrorBox, // 15 |
kKeyDetailsBox, // -- |
kKeyNameTitle, // 36 |
kKeyName, // 27 |
kKeyTypeTitle, // -- |
kKeyTypeData, // 21 |
kKeySizeTitle, // 16 |
kKeySizeData, // 22 |
kTrustBox, // 17 |
kCreateTitle, // 18 |
kCreateDate , // 24 |
kExpiresTitle, // 19 expires |
kExpireDate , |
kValidTitle, |
kValidValue , |
kUnTrustTitle, |
kFPBox, |
kFingerprint, |
kTrustedTitle, |
kInvalidTitle, |
kTrustValue, |
kExpiredIcon |
}; |
#define kKeyStringsID 129 |
static enum { |
kKeyNameStrID =1, |
kKeyIDStrID , |
kKeyTypeStrID, |
kKeySizeStrID, |
kKeyCreatedStrID, |
kKeyExpiresStrID, |
kKeyExpiredStrID, |
kKeyRevokedStrID, |
kKeyInvalidStrID, |
kKeyValidStrID, |
kKeyTrustedStrID, |
kKeyUnTrustedStrID, |
kKeyServerKeyIsEnabled, |
kKeyServerKeyIsDisabled, |
kKeyServerKeyIsRevoked, |
kKeyServerKeyIsExpired, |
kKeyServerKeyNotFound, |
}; |
// --------------------------------------------------------------------------- |
#pragma mark Local Prototypes |
// --------------------------------------------------------------------------- |
static pascal OSErr KeyDragSendDataProc (FlavorType flavorType, void *context, ItemReference itemRef, DragReference dragRef); |
#pragma mark - |
// --------------------------------------------------------------------------- |
TASIPKeyPane::TASIPKeyPane( DialogPtr dialog, SInt16 items, TASIPPGPkey* serverKey) |
: TPane (dialog, items) |
// --------------------------------------------------------------------------- |
// |
{ |
ControlFontStyleRec fontInfo; |
ControlHandle theControl; |
Str255 text; |
fKey = serverKey; |
AppendDialogItemList(dialog, kServerAuthPaneDITL, overlayDITL ); |
fontInfo.just = teJustRight; |
fontInfo.flags = kControlUseFontMask | kControlUseJustMask; |
fontInfo.font = kControlFontSmallBoldSystemFont; |
// Key Name |
GetIndString(text, kKeyStringsID,kKeyNameStrID); |
GetDialogItemAsControl( dialog, items + kKeyNameTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
// Key Type |
GetIndString(text, kKeyStringsID,kKeyTypeStrID); |
GetDialogItemAsControl( dialog, items + kKeyTypeTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
// Key Size |
GetIndString(text, kKeyStringsID,kKeySizeStrID); |
GetDialogItemAsControl( dialog, items + kKeySizeTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
// Key Creation |
GetIndString(text, kKeyStringsID,kKeyCreatedStrID); |
GetDialogItemAsControl( dialog, items + kCreateTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
// Key Expiration |
GetIndString(text, kKeyStringsID, kKeyExpiresStrID); |
GetDialogItemAsControl( dialog, items + kExpiresTitle, &fKeyExpiresTitle ); |
SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( fKeyExpiresTitle, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
fontInfo.font = kControlFontSmallSystemFont; |
// Trust Model |
GetIndString(text, kKeyStringsID,kKeyInvalidStrID); |
GetDialogItemAsControl( dialog, items + kInvalidTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetIndString(text, kKeyStringsID,kKeyUnTrustedStrID); |
GetDialogItemAsControl( dialog, items + kUnTrustTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
fontInfo.just = teJustLeft; |
GetDialogItemAsControl( dialog, items + kKeyErrorBox, &theControl ); |
// SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
HideControl(theControl); |
GetIndString(text, kKeyStringsID,kKeyValidStrID); |
GetDialogItemAsControl( dialog, items + kValidTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetIndString(text, kKeyStringsID,kKeyTrustedStrID); |
GetDialogItemAsControl( dialog, items + kTrustedTitle, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, text[0], (Ptr)(text+1)); |
SetControlData( theControl, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kCreateDate, &fKeyCreateDate ); |
SetControlData( fKeyCreateDate, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kExpireDate, &fKeyExpiredDate ); |
SetControlData( fKeyExpiredDate, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kKeySizeData, &fKeySize ); |
SetControlData( fKeySize, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kKeyTypeData, &fKeyType ); |
SetControlData( fKeyType, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kKeyName, &fKeyName ); |
SetControlData( fKeyName, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
fontInfo.just = teJustCenter; |
GetDialogItemAsControl( dialog, items + kFingerprint, &fFingerPrint ); |
SetControlData( fFingerPrint, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
fontInfo.font = kControlFontSmallSystemFont; |
fontInfo.flags = kControlUseFontMask; |
GetDialogItemAsControl( dialog, items + kValidValue, &fKeyValidValue ); |
SetControlMinimum(fKeyValidValue, 0); |
SetControlMaximum(fKeyValidValue, 2); |
GetDialogItemAsControl( dialog, items + kTrustValue, &fKeyTrustValue ); |
SetControlMinimum(fKeyTrustValue, 0); |
SetControlMaximum(fKeyTrustValue, 2); |
fontInfo.font = kControlFontSmallBoldSystemFont; |
fontInfo.flags = kControlUseFontMask; |
GetDialogItemAsControl( dialog, items + kKeyInfoBox, &fKeyInfoBox ); |
SetControlData( fKeyInfoBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kTrustBox, &fKeyTrustBox ); |
SetControlData( fKeyTrustBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kFPBox, &fKeyFPBox ); |
SetControlData( fKeyFPBox, 0, kControlStaticTextStyleTag, sizeof fontInfo, (Ptr)&fontInfo); |
GetDialogItemAsControl( dialog, items + kExpiredIcon, &fKeyExpiredIcon ); |
GetDialogItemAsControl( dialog, items + kKeyDetailsBox, &fKeyDetailsBox ); |
GetDialogItemAsControl( dialog, items + kKeyDragBox, &fKeyDragBox ); |
} |
// --------------------------------------------------------------------------- |
TASIPKeyPane::~TASIPKeyPane() |
// --------------------------------------------------------------------------- |
// |
{ |
ShortenDITL( fDialog, CountDITL(fDialog) - fOrigItems); |
} |
// --------------------------------------------------------------------------- |
void TASIPKeyPane::Idle(void) |
// --------------------------------------------------------------------------- |
// |
{ |
} |
// --------------------------------------------------------------------------- |
void TASIPKeyPane::Refresh(void) |
// --------------------------------------------------------------------------- |
// |
{ |
ControlFontStyleRec fontInfo; |
Size theSize; |
Str255 buffer; |
if( fKey->IsOperational() ) |
{ |
// Hide Error Message |
// GetDialogItemAsControl( fDialog, kKeyErrorBox, &theControl ); |
// HideControl(theControl); |
// Key User Name |
fKey->GetPrimaryUserNamePString( (StringPtr)buffer); |
SetControlData( fKeyName, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
// key Fingerprint |
fKey->GetFingerprintPString( (StringPtr)buffer); |
SetControlData( fFingerPrint, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
// Key type |
fKey->GetPublicKeyAlgorithmPstring ( (StringPtr)buffer); |
SetControlData( fKeyType, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
// Key Size |
NumToString(fKey->GetKeySize(), buffer); |
SetControlData( fKeySize, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
// created |
DateString( fKey->GetCreateDate() , shortDate, buffer, nil); |
SetControlData( fKeyCreateDate, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
// expiration |
if( fKey->IsRevoked() ) |
{ |
// revoked |
SetControlVisibility(fKeyExpiredIcon,true, true); |
GetIndString(buffer, kKeyStringsID, kKeyRevokedStrID); |
SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
HideControl(fKeyExpiredDate); |
} |
else |
{ |
// expired |
SetControlVisibility(fKeyExpiredIcon, fKey->IsExpired() , true); |
GetIndString(buffer, kKeyStringsID, fKey->IsExpired() ?kKeyExpiredStrID:kKeyExpiresStrID); |
SetControlData( fKeyExpiresTitle, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
if( fKey->GetExpireDate() != kPGPExpirationTime_Never) |
DateString(fKey->GetExpireDate() , shortDate, buffer, nil); |
else |
PLstrcpy(buffer, "\pnever"); |
SetControlData( fKeyExpiredDate, 0, kControlStaticTextTextTag, buffer[0], (Ptr)(buffer+1)); |
ShowControl(fKeyExpiredDate); |
} |
// key validity |
switch(fKey->GetValidity()) |
{ |
default: |
case kPGPValidity_Unknown: |
case kPGPValidity_Invalid: |
SetControlValue(fKeyValidValue, 0 ); |
break; |
case kPGPValidity_Marginal: |
SetControlValue(fKeyValidValue, 1 ); |
break; |
case kPGPValidity_Complete: |
SetControlValue(fKeyValidValue, 2 ); |
break; |
} |
// key trust |
SetControlValue(fKeyTrustValue, fKey->IsAxiomatic() ? 3 : fKey->GetTrustLevel()); |
// set the server key title Info |
GetIndString(buffer, kKeyStringsID, |
fKey->IsRevoked() ? kKeyServerKeyIsRevoked: |
fKey->IsExpired() ? kKeyServerKeyIsExpired: |
fKey->IsDisabled()? kKeyServerKeyIsDisabled:kKeyServerKeyIsEnabled); |
SetControlTitle(fKeyInfoBox, buffer); |
ShowControl(fKeyDetailsBox); |
ShowControl(fKeyFPBox); |
ShowControl(fKeyTrustBox); |
// if key is disabled grey out the boxes |
if( fKey->IsDisabled()) |
{ |
DeactivateControl(fKeyInfoBox); |
DeactivateControl(fKeyFPBox); |
} |
else |
{ |
ActivateControl(fKeyInfoBox); |
ActivateControl(fKeyFPBox); |
} |
// if key is expired or revoked then the trust is meaningless. |
if( fKey->IsExpired() | fKey->IsRevoked() | fKey->IsDisabled()) |
DeactivateControl(fKeyTrustBox); |
else ActivateControl(fKeyTrustBox); |
} |
else |
{ |
GetIndString(buffer, kKeyStringsID, kKeyServerKeyNotFound); |
SetControlTitle(fKeyInfoBox, buffer); |
DeactivateControl(fKeyInfoBox); |
ShowControl(fKeyFPBox); |
DeactivateControl(fKeyFPBox); |
HideControl(fKeyTrustBox); |
// HideControl(fFingerPrint); |
// HideControl(fKeyFPBox); |
// DeactivateControl(fKeyDetailsBox); |
/* Str255 errorMsg, errorMsg2; |
Str63 keyName ; |
fKey->GetKeyNamePString(keyName); |
GetDialogItemAsControl( fDialog, kKeyName, &theControl ); |
HideControl(theControl); |
GetDialogItemAsControl( fDialog, kKeyDetailsBox, &theControl ); |
HideControl(theControl); |
GetIndString(errorMsg, kDialogStringsID, kServerKeyNotFoundErrorMsg1); |
PLstrcat(errorMsg, keyName); |
GetIndString(errorMsg2, kDialogStringsID, kServerKeyNotFoundErrorMsg2); |
PLstrcat(errorMsg, errorMsg2); |
GetDialogItemAsControl( fDialog, kKeyErrorBox, &theControl ); |
SetControlData( theControl, 0, kControlStaticTextTextTag, errorMsg[0], (Ptr)(errorMsg+1)); |
ShowControl(theControl); |
*/ |
} |
} |
// --------------------------------------------------------------------------- |
Boolean TASIPKeyPane::HandleMouseDown(EventRecord *event) |
// --------------------------------------------------------------------------- |
// |
{ |
OSErr err = noErr; |
Point here = event->where; |
Boolean handled; |
GlobalToLocal(&here); |
if( (handled = PtInRect (here , &(**fKeyDragBox).contrlRect)) // is it in our space |
&& ( NewDrag != nil) // check if drag supported? |
&&( fKey && fKey->IsOperational()) // its a good key |
&& (WaitMouseMoved (event->where))) // user has moved out of drag box |
{ |
DragSendDataUPP dragSendDataProcUPP = NewDragSendDataProc (KeyDragSendDataProc); |
DragReference dragRef; |
if (!(err = NewDrag (&dragRef))) |
{ |
Point globalPoint = {0,0}; |
RgnHandle dragRgn = NewRgn(); |
RgnHandle tempRgn = NewRgn(); |
LocalToGlobal (&globalPoint); |
SetDragSendProc (dragRef,dragSendDataProcUPP,fKey); |
AddDragItemFlavor(dragRef, 0, 'TEXT', nil ,0 , nil); |
AddDragItemFlavor(dragRef, 0, kFlavorTypeClippingName, nil ,0 , nil); |
RectRgn(tempRgn, &(**fKeyDragBox).contrlRect); |
CopyRgn(tempRgn,dragRgn); |
InsetRgn(tempRgn,1,1); |
DiffRgn(dragRgn,tempRgn, dragRgn); |
OffsetRgn(dragRgn, globalPoint.h, globalPoint.v); |
TrackDrag (dragRef,event,dragRgn); |
DisposeRgn (tempRgn); |
DisposeRgn (dragRgn); |
DisposeDrag (dragRef); |
} |
DisposeRoutineDescriptor(dragSendDataProcUPP); |
} |
return handled; |
} |
// --------------------------------------------------------------------------- |
void TASIPKeyPane::ItemHit(SInt16 item) |
// --------------------------------------------------------------------------- |
// |
{ |
SInt16 localItem; |
OSErr err = noErr; |
localItem = item - fOrigItems; |
switch ( localItem ) |
{ |
case kKeyDragBox: |
break; |
} |
} |
// --------------------------------------------------------------------------- |
static pascal OSErr KeyDragSendDataProc (FlavorType flavorType, void *context, ItemReference itemRef, DragReference dragRef) |
// --------------------------------------------------------------------------- |
// |
{ |
TPGPkey* theKey = (TPGPkey*)context; |
OSErr err = noErr; |
switch(flavorType) |
{ |
case 'TEXT': |
{ |
Str255 keyName; |
void* buf = nil; |
PGPSize bufSize; |
theKey->Export(&buf,&bufSize); |
theKey->GetPrimaryUserNamePString(keyName); |
SetDragItemFlavorData(dragRef, itemRef, 'TEXT', buf ,bufSize , nil); |
SetDragItemFlavorData(dragRef, itemRef, kFlavorTypeClippingName, (Ptr)(keyName+1) , keyName[0], nil); |
PGPFreeData(buf); |
} |
break; |
default: |
break; |
} |
return err; |
} |
#pragma mark - |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-07-22