From fedora-directory-commits at redhat.com Mon May 7 23:45:46 2007 From: fedora-directory-commits at redhat.com (Jack Magne (jmagne)) Date: Mon, 7 May 2007 19:45:46 -0400 Subject: [Fedora-directory-commits] esc/src/app/xpcom rhCoolKey.cpp, 1.6, 1.7 rhICoolKey.idl, 1.5, 1.6 Message-ID: <200705072345.l47NjkrM000409@cvs-int.fedora.redhat.com> Author: jmagne Update of /cvs/dirsec/esc/src/app/xpcom In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv388 Modified Files: rhCoolKey.cpp rhICoolKey.idl Log Message: Latest bug fixes. Index: rhCoolKey.cpp =================================================================== RCS file: /cvs/dirsec/esc/src/app/xpcom/rhCoolKey.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- rhCoolKey.cpp 24 Feb 2007 01:59:50 -0000 1.6 +++ rhCoolKey.cpp 7 May 2007 23:45:43 -0000 1.7 @@ -1074,7 +1074,7 @@ char tBuff[56]; PR_LOG( coolKeyLog, PR_LOG_DEBUG, ("%s rhCoolKey::GetCoolKeyIsReallyCoolKey thread: %p \n",GetTStamp(tBuff,56),PR_GetCurrentThread())); - if (ASCCoolKeyIsAvailable(aKeyType, (char *) aKeyID)) { + if (aKeyType && aKeyID && ASCCoolKeyIsAvailable(aKeyType, (char *) aKeyID)) { if (aKeyID) { AutoCoolKey key(aKeyType, aKeyID); PRBool isCool = CoolKeyIsReallyCoolKey(&key); @@ -1164,6 +1164,34 @@ return NS_OK; } +/* string GetCoolKeyTokenName (in unsigned long aKeyType, in string aKeyID); */ + NS_IMETHODIMP rhCoolKey::GetCoolKeyTokenName(PRUint32 aKeyType, const char *aKeyID, char **_retval) +{ + char tBuff[56]; + + *_retval = NULL; + + if(!aKeyType && !aKeyID) + return NS_OK; + + AutoCoolKey key(aKeyType,aKeyID); + + char *tokenName = NULL; + + tokenName = (char *) CoolKeyGetTokenName(&key); + + PR_LOG( coolKeyLog, PR_LOG_DEBUG, ("%s rhCoolKey::GetCoolKeyTokenName %s \n",GetTStamp(tBuff,56),tokenName)); + if(tokenName) + { + char *temp = (char *) nsMemory::Clone(tokenName,sizeof(char) * strlen((char *)tokenName) + 1); + *_retval = temp; + + } + + return NS_OK; + +} + /* string GetCoolKeyIssuerInfo (in unsigned long aKeyType, in string aKeyID); */ NS_IMETHODIMP rhCoolKey::GetCoolKeyIssuerInfo(PRUint32 aKeyType, const char *aKeyID, char **_retval) { char tBuff[56]; @@ -1251,6 +1279,40 @@ return NS_OK; } + +/* string GetCoolKeyIssuer (in unsigned long aKeyType, in string aKeyID); */ +NS_IMETHODIMP rhCoolKey::GetCoolKeyIssuer(PRUint32 aKeyType, const char *aKeyID, char **issuer) +{ + char tBuff[56]; + if (!aKeyID) { + return NS_ERROR_FAILURE; + } + + AutoCoolKey key(aKeyType, ( char *)aKeyID); + + // const char *keyName = CoolKeyGetTokenName(&key); + + char buff[512]; + int bufLength = 512; + buff[0] = 0; + + CoolKeyGetIssuer(&key, (char *) buff, bufLength); + + if(!buff[0]) + { + return NS_OK; + } + + PR_LOG(coolKeyLog,PR_LOG_DEBUG,("%s rhCoolKey::RhGetCoolKeyGetIssuer %s \n",GetTStamp(tBuff,56),(char *) buff)); + + char *temp = (char *) nsMemory::Clone(buff,sizeof(char) * strlen(buff) + 1); + + *issuer = temp; + + return NS_OK; + +} + /* boolean SetCoolKeyConfigValue (in string aName, in string aValue); */ NS_IMETHODIMP rhCoolKey::SetCoolKeyConfigValue(const char *aName, const char *aValue, PRBool *_retval) { Index: rhICoolKey.idl =================================================================== RCS file: /cvs/dirsec/esc/src/app/xpcom/rhICoolKey.idl,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- rhICoolKey.idl 24 Feb 2007 01:58:30 -0000 1.5 +++ rhICoolKey.idl 7 May 2007 23:45:43 -0000 1.6 @@ -66,9 +66,13 @@ string GetCoolKeyCertInfo(in unsigned long aKeyType, in string aKeyID, in string aCertNickname); string GetCoolKeyIssuedTo(in unsigned long aKeyType, in string aKeyID); + + string GetCoolKeyIssuer(in unsigned long aKeyType, in string aKeyID); string GetCoolKeyATR(in unsigned long aKeyType, in string aKeyID); + string GetCoolKeyTokenName(in unsigned long aKeyType, in string aKeyID); + boolean GetCoolKeyRequiresAuthentication(in unsigned long aKeyType,in string aKeyID); boolean GetCoolKeyIsAuthenticated(in unsigned long aKeyType,in string aKeyID); From fedora-directory-commits at redhat.com Mon May 7 23:46:46 2007 From: fedora-directory-commits at redhat.com (Jack Magne (jmagne)) Date: Mon, 7 May 2007 19:46:46 -0400 Subject: [Fedora-directory-commits] esc/src/app/xpcom/tray rhLinuxTray.cpp, 1.4, 1.5 rhTray.h, 1.4, 1.5 Message-ID: <200705072346.l47NkklL000499@cvs-int.fedora.redhat.com> Author: jmagne Update of /cvs/dirsec/esc/src/app/xpcom/tray In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv480 Modified Files: rhLinuxTray.cpp rhTray.h Log Message: Latest bug fixes. Index: rhLinuxTray.cpp =================================================================== RCS file: /cvs/dirsec/esc/src/app/xpcom/tray/rhLinuxTray.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- rhLinuxTray.cpp 24 Feb 2007 02:02:37 -0000 1.4 +++ rhLinuxTray.cpp 7 May 2007 23:46:43 -0000 1.5 @@ -22,11 +22,13 @@ #include #include "notifytray.h" #include "intl/nsIStringBundle.h" +#include NS_IMPL_ISUPPORTS1(rhTray, rhITray) GtkWidget* rhTray::mWnd = NULL; GtkWidget* rhTray::mIconMenu = NULL; +GtkWidget* rhTray::mIconBoxWidget = NULL; int rhTray::mInitialized = 0; @@ -37,6 +39,44 @@ static PRLogModuleInfo *trayLog = PR_NewLogModule("tray"); +static void popup_position(GtkMenu *menu, + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) +{ + + char tBuff[56]; + GtkWidget *icon_box_widget = GTK_WIDGET(user_data); + + if(icon_box_widget) + { + GdkWindow* window = icon_box_widget->window; + + gint width; + gint height; + + gint px; + gint py; + + gdk_drawable_get_size(window,&width,&height); + + gdk_window_get_position(window, + &px, + &py); + + PR_LOG( trayLog, PR_LOG_DEBUG, ("%s popup_position width %d height %d px %d py %d \n",GetTStamp(tBuff,56),width,height,px,py)); + + + gint x_coord = px; + gint y_coord = (py + height); + + *x = x_coord; + *y = y_coord; + + } + +} rhTray::rhTray() { @@ -232,11 +272,12 @@ return E_FAIL; } - GtkWidget *icon_widget = notify_icon_get_box_widget(); + mIconBoxWidget = notify_icon_get_box_widget(); - if(icon_widget) + if(mIconBoxWidget) { - g_signal_connect(G_OBJECT(icon_widget), "button-press-event", G_CALLBACK(rhTray::IconCBProc), NULL); + g_signal_connect(G_OBJECT(mIconBoxWidget), "button-press-event", G_CALLBACK(rhTray::IconCBProc), NULL); + } res = CreateEventWindow(); @@ -352,11 +393,23 @@ GtkWidget *min_item = gtk_menu_item_new_with_label ("Hide"); GtkWidget *max_item = gtk_menu_item_new_with_label ("Manage Keys"); - GtkWidget *exit_item = gtk_menu_item_new_with_label ("Exit"); + GtkWidget *exit_item = gtk_image_menu_item_new_with_label ("Exit"); - gtk_menu_shell_append (GTK_MENU_SHELL (mIconMenu), max_item); + GtkWidget* quit_icon = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_SMALL_TOOLBAR); + + if(max_item) + gtk_menu_shell_append (GTK_MENU_SHELL (mIconMenu), max_item); //gtk_menu_shell_append (GTK_MENU_SHELL (mIconMenu), min_item); - gtk_menu_shell_append (GTK_MENU_SHELL (mIconMenu), exit_item); + if(exit_item) + { + gtk_menu_shell_append (GTK_MENU_SHELL (mIconMenu), exit_item); + + if(quit_icon) + { + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(exit_item), quit_icon); + + } + } g_signal_connect(G_OBJECT (min_item), "activate", G_CALLBACK (rhTray::IconMenuCBProc), @@ -404,8 +457,8 @@ gtk_menu_popup(GTK_MENU(mIconMenu), NULL, NULL, - NULL, - NULL, + (GtkMenuPositionFunc) popup_position, + mIconBoxWidget, event->button, event->time); @@ -725,6 +778,7 @@ if(widget->window) { + gdk_x11_window_set_user_time (widget->window, gdk_x11_get_server_time (widget->window)); if(GTK_WIDGET_VISIBLE(mWnd)) { gdk_window_show(widget->window); Index: rhTray.h =================================================================== RCS file: /cvs/dirsec/esc/src/app/xpcom/tray/rhTray.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- rhTray.h 24 Feb 2007 02:06:23 -0000 1.4 +++ rhTray.h 7 May 2007 23:46:43 -0000 1.5 @@ -263,6 +263,7 @@ // Icon menu related static GtkWidget *mIconMenu; + static GtkWidget *mIconBoxWidget; static void IconMenuCBProc(GtkWidget *widget, gpointer data); HRESULT CreateIconMenu(); From fedora-directory-commits at redhat.com Mon May 7 23:48:10 2007 From: fedora-directory-commits at redhat.com (Jack Magne (jmagne)) Date: Mon, 7 May 2007 19:48:10 -0400 Subject: [Fedora-directory-commits] esc/src/app/xul/esc application.ini, 1.5, 1.6 Message-ID: <200705072348.l47NmAvY000573@cvs-int.fedora.redhat.com> Author: jmagne Update of /cvs/dirsec/esc/src/app/xul/esc In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv555 Modified Files: application.ini Log Message: Bump version no. Index: application.ini =================================================================== RCS file: /cvs/dirsec/esc/src/app/xul/esc/application.ini,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- application.ini 6 Mar 2007 18:22:19 -0000 1.5 +++ application.ini 7 May 2007 23:48:07 -0000 1.6 @@ -25,7 +25,7 @@ Name=ESC ; ; This field specifies your application's version. This field is optional. -Version=1.0.0 +Version=1.0.1 ; ; This field specifies your application's build ID (timestamp). This field is ; required. From fedora-directory-commits at redhat.com Mon May 7 23:49:26 2007 From: fedora-directory-commits at redhat.com (Jack Magne (jmagne)) Date: Mon, 7 May 2007 19:49:26 -0400 Subject: [Fedora-directory-commits] esc/src/app/xul/esc/chrome/content/esc ESC.js, 1.13, 1.14 GenericAuth.xul, 1.3, 1.4 advancedinfo.xul, 1.2, 1.3 config.xul, 1.4, 1.5 esc.css, 1.4, 1.5 esc.png, 1.1, 1.2 esc.xul, 1.5, 1.6 password.js, 1.2, 1.3 security.xul, 1.1, 1.2 settings.xul, 1.5, 1.6 Message-ID: <200705072349.l47NnQvZ000627@cvs-int.fedora.redhat.com> Author: jmagne Update of /cvs/dirsec/esc/src/app/xul/esc/chrome/content/esc In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv602 Modified Files: ESC.js GenericAuth.xul advancedinfo.xul config.xul esc.css esc.png esc.xul password.js security.xul settings.xul Log Message: Latest bug fixes. Index: ESC.js =================================================================== RCS file: /cvs/dirsec/esc/src/app/xul/esc/chrome/content/esc/ESC.js,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ESC.js 5 Apr 2007 18:39:52 -0000 1.13 +++ ESC.js 7 May 2007 23:49:23 -0000 1.14 @@ -229,9 +229,10 @@ var issuer = ""; if(aResult == true) { - issuer = GetCachedIssuer(keyID); + issuer = GetCoolKeyIssuer(keyType,keyID); if(!issuer) issuer = getBundleString("unknownIssuer"); + recordMessage("In DoPhoneHome callback success issuer " + issuer); TraySendNotificationMessage(getBundleString("keyInserted"),"\"" + issuer +"\"" + " " + getBundleString("keyInsertedComputer"),3,4000,GetESCNotifyIconPath(keyType,keyID)); LogKeyInfo(keyType,keyID,"Key Inserted ..."); UpdateRowWithPhoneHomeData(keyType,keyID); @@ -248,7 +249,11 @@ } else { - issuer = getBundleString("unknownIssuer"); + + issuer = GetCoolKeyIssuer(keyType,keyID); + if(!issuer) + issuer = getBundleString("unknownIssuer"); + recordMessage("Phone home callback failed , issuer " + issuer); TraySendNotificationMessage(getBundleString("keyInserted"),"\"" + issuer +"\"" + " " + getBundleString("keyInsertedComputer"),3,4000,GetESCNotifyIconPath(keyType,keyID)); LogKeyInfo(keyType,keyID,"Key Inserted ..."); } @@ -265,7 +270,7 @@ var phoneHomeURI = GetCachedPhoneHomeURL(keyID); recordMessage("Phone home info cached..."); - issuer = GetCachedIssuer(keyID); + issuer = GetCoolKeyIssuer(keyType,keyID); TraySendNotificationMessage(getBundleString("keyInserted"),"\"" + issuer +"\"" + " " + getBundleString("keyInsertedComputer"),3,4000,GetESCNotifyIconPath(keyType,keyID)); LogKeyInfo(keyType,keyID,"Key Inserted ..."); @@ -415,6 +420,11 @@ function InitializePhoneHomeConfigUI() { + var uri_box = document.getElementById("phonehomeuri"); + + if(uri_box) + uri_box.focus(); + window.sizeToContent(); } @@ -666,8 +676,24 @@ issuer = GetCachedIssuer(keyID); - if(!issuer) - issuer = getBundleString("unknownIssuer"); + + // Now try to read off the certs if applicable + + if(!issuer && (GetStatusForKeyID(keyType, keyID) == getBundleString("statusEnrolled"))) + { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + issuer = netkey.GetCoolKeyIssuer(keyType,keyID); + + } catch (e) + { + issuer = null; + } + } + + + if(!issuer) + issuer = getBundleString("unknownIssuer"); return issuer; } @@ -719,11 +745,16 @@ var appletVerMaj = DoGetCoolKeyGetAppletVer(keyType, keyID , true); var appletVerMin = DoGetCoolKeyGetAppletVer(keyType, keyID, false); - var issuer = GetCachedIssuer(keyID); + var issuer = GetCoolKeyIssuer(keyType,keyID); if(!issuer) issuer = getBundleString("unknownIssuer"); - textDump += getBundleString("smartCardU") + " " + i + ":" + "\n\n"; + var cardName = DoCoolKeyGetTokenName(keyType,keyID); + + if(!cardName) + cardName = i; + + textDump += getBundleString("smartCardU") + " " + cardName + ":" + "\n\n"; textDump += " " + getBundleString("appletVersion") + " " + appletVerMaj + "." + appletVerMin + "\n"; @@ -1008,24 +1039,24 @@ { var image_src = ""; - if(observeBusy && (keyStatus == "BUSY" )) + if(observeBusy && (keyStatus == getBundleString("statusBusy"))) { return "throbber-anim5.gif"; } - if(keyStatus == "UNAVAILABLE") + if(keyStatus == getBundleString("statusUnavailable")) { return ""; } - if(keyStatus == "ENROLLED") + if(keyStatus == getBundleString("statusEnrolled")) { image_src = "enrolled-key"; } else { - if(keyStatus == "UNINITIALIZED") + if(keyStatus == getBundleString("statusUninitialized")) image_src = "initializecard"; else - if(keyStatus == "NO APPLET") + if(keyStatus == getBundleString("statusNoApplet")) image_src = "blank-card"; } @@ -1205,6 +1236,7 @@ function UpdateEnrollmentArea(keyType,keyID,inserted,showFullUI,showExternalUI) { + if(!gEnrollmentPage) return; @@ -1215,12 +1247,11 @@ { alreadyEnrolled = true; } - var arr = GetAvailableCoolKeys(); - var numKeys = arr.length; - //alert("inserted " + inserted + " showFulUI " + showFullUI + " showExternalUI " + showExternalUI + " already enrolled " + alreadyEnrolled); + var numUnenrolledKeys = DoGetNumUnenrolledCoolKeys(); + + //alert("inserted " + inserted + " showFulUI " + showFullUI + " showExternalUI " + showExternalUI + " already enrolled " + alreadyEnrolled + " numUnenrolledKeys " + numUnenrolledKeys); - //If we already have external UI and keys left, don't mess it up var ui_id = document.getElementById("esc-ui"); @@ -1232,7 +1263,7 @@ if(!inserted) { - if(!numKeys) + if(!numUnenrolledKeys) { ui_id.setAttribute("src",null); } @@ -1389,6 +1420,9 @@ var pw = document.getElementById("pintf").value; var pwlength = 0; + var qualityMeter = document.getElementById("pass-progress-id"); + + if(pw) pwlength = pw.length; @@ -1422,6 +1456,11 @@ if ( pwstrength > 100 ) { pwstrength = 100; } + if(qualityMeter) + { + qualityMeter.setAttribute("value", pwstrength); + + } if(qualityImage) { if(pwlength==0) @@ -1522,13 +1561,14 @@ break; case 4: // Available case 6: // UnblockInProgress - case 7: // PINResetInProgress case 8: // RenewInProgress keyStatus = PolicyToKeyType(GetCoolKeyPolicy(keyType, keyID)); break; - case 5: // EnrollmentInProgress + case 7: // PINResetInProgress keyStatus = getBundleString("statusBusy"); break; + case 5: // EnrollmentInProgress + keyStatus = getBundleString("statusBusy"); break; case 9: // FormatInProgress keyStatus = getBundleString("statusBusy"); @@ -1604,7 +1644,7 @@ function UpdateCoolKeyAvailabilityForEnrollment() { //Here we only allow ONE key - //Take the first one that shows up. + //Take the first unenrolled one that shows up. var arr = GetAvailableCoolKeys(); @@ -1616,17 +1656,24 @@ var i=0; - for (i=0; i < 1; i++) + for (i=0; i < arr.length; i++) { - var row = InsertCoolKeyIntoEnrollmentPage(arr[i][0],arr[i][1]); + var status = GetStatusForKeyID(arr[i][0],arr[i][1]); - if(row) - gCurrentSelectedRow = row; + if(status != getBundleString("statusEnrolled")) + { + var row = InsertCoolKeyIntoEnrollmentPage(arr[i][0],arr[i][1]); - var keyInserted = 1; - var showFullUI = 0; + if(row) + gCurrentSelectedRow = row; + + var keyInserted = 1; + var showFullUI = 0; - UpdateEnrollmentArea(arr[i][0],arr[i][1],keyInserted,showFullUI); + UpdateEnrollmentArea(arr[i][0],arr[i][1],keyInserted,showFullUI); + + break; + } } UpdateESCSize(); @@ -1660,6 +1707,8 @@ { UpdateESCSize(); } + + window.focus(); } function SetCurrentSelectedRowForEnrollment() @@ -1703,6 +1752,9 @@ DoSetEnrolledBrowserLaunchState(); DoHandleEnrolledBrowserLaunch(); + + window.setTimeout('ShowWindow()',250); + } //Window related functions @@ -2039,11 +2091,15 @@ if(!gAdminPage) return; - var isCool = DoGetCoolKeyIsReallyCoolKey(keyType, keyID); + var isCool = null; + + //alert("blub " + " keyType " + keyType + " keyID " + keyID); + + isCool = DoGetCoolKeyIsReallyCoolKey(keyType, keyID); var noKey = 0; - if(!keyType || !keyID) + if(!keyType && !keyID) { noKey = 1; } @@ -2053,7 +2109,6 @@ if(!noKey) keyStatus = GetStatusForKeyID(keyType, keyID); - recordMessage("No Key: " + noKey + " status " + keyStatus); var passwordArea = document.getElementById("password-area-id"); @@ -2101,11 +2156,6 @@ if(!viewcertsbtn) return; - //hack for CAC cards that now have no CUID reported - - if(!isCool && !noKey) - keyStatus = "ENROLLED"; - var image_src = SelectImageForKeyStatus(keyStatus,1,1); recordMessage("image_src " + image_src); @@ -2116,13 +2166,38 @@ ShowItem(detailsImage); detailsImage.setAttribute("src", image_src); } + + // Now take care of the right click context menu that is + // Invisible at this point + + var adminkeymenu = document.getElementById("adminkeymenu"); + var menu_format = null; + var menu_enroll = null; + var menu_resetpassword = null; + + if(adminkeymenu) + { + menu_format = document.getElementById("menu-format"); + menu_enroll = document.getElementById("menu-enroll"); + menu_resetpassword = document.getElementById("menu-resetpassword"); + + if(!menu_format || !menu_enroll || !menu_resetpassword) + { + menu_format = null; + menu_enroll = null; + menu_resetpassword = null; + adminkeymenu = null; + } + } + + recordMessage("Obtained admin popup menu object."); ShowItem(advancedbtn); EnableItem(advancedbtn); var isBusy = 0; var operationLabel = null; - if(keyStatus == "BUSY" || keyStatus == "UNAVAILABLE") + if(keyStatus == getBundleString("statusBusy") || keyStatus == getBundleString("statusUnavailable")) isBusy = 1; if(isBusy) @@ -2132,9 +2207,15 @@ if(!keyStatus) { - DisableItem(viewcertsbtn); DisableItem(enrollbtn); + if(adminkeymenu) + { + DisableItem(menu_enroll); + DisableItem(menu_resetpassword); + DisableItem(menu_format); + } + DisableItem(resetpinbtn); DisableItem(formatbtn); @@ -2144,21 +2225,44 @@ return; } - if(keyStatus == "ENROLLED") + if(keyStatus == getBundleString("statusEnrolled")) { + var isLoginKey = IsKeyLoginKey(keyType,keyID); EnableItem(viewcertsbtn); DisableItem(enrollbtn); + if(adminkeymenu) + DisableItem(menu_enroll); if(isCool) { + if(adminkeymenu) + EnableItem(menu_resetpassword); + EnableItem(resetpinbtn); - EnableItem(formatbtn); + + if(!isLoginKey) + { + EnableItem(formatbtn); + if(adminkeymenu) + EnableItem(menu_format); + } + else + { + DisableItem(formatbtn); + if(adminkeymenu) + DisableItem(menu_format); + } } else { DisableItem(resetpinbtn); DisableItem(formatbtn); + if(adminkeymenu) + { + DisableItem(menu_format); + DisableItem(menu_resetpassword); + } } if(!isBusy) @@ -2167,51 +2271,75 @@ return; } - if(keyStatus == "UNINITIALIZED") + if(keyStatus == getBundleString("statusUninitialized")) { DisableItem(viewcertsbtn); if(isCool) { EnableItem(enrollbtn); + if(adminkeymenu) + EnableItem(menu_enroll); } else { + if(adminkeymenu) + DisableItem(menu_enroll); + DisableItem(enrollbtn); } DisableItem(resetpinbtn); + if(adminkeymenu) + DisableItem(menu_resetpassword); + if(!isBusy) - detailsKeyLabel.setAttribute("value",getBundleString("uninitializedKey")); + detailsKeyLabel.setAttribute("value",getBundleString("statusUninitialized")); if(isCool) { EnableItem(formatbtn); - + if(adminkeymenu) + EnableItem(menu_format); } else { + if(adminkeymenu) + DisableItem(menu_format); + DisableItem(formatbtn); } return; } - if(keyStatus == "NO APPLET") + if(keyStatus == getBundleString("statusNoApplet")) { DisableItem(viewcertsbtn); DisableItem(enrollbtn); DisableItem(resetpinbtn); + if(adminkeymenu) + { + DisableItem(menu_enroll); + DisableItem(menu_resetpassword); + } + if(!isBusy) - detailsKeyLabel.setAttribute("value",getBundleString("blankKey")); + detailsKeyLabel.setAttribute("value",getBundleString("statusNoApplet")); if(isCool) { + if(adminkeymenu) + EnableItem(menu_format); + EnableItem(formatbtn); } else { + if(adminkeymenu) + DisableItem(menu_format); + DisableItem(formatbtn); } @@ -2229,6 +2357,12 @@ if(operationLabel) detailsKeyLabel.setAttribute("value",operationLabel); + if(adminkeymenu) + { + DisableItem(menu_enroll); + DisableItem(menu_format); + DisableItem(menu_resetpassword); + } } } @@ -2249,7 +2383,6 @@ } function UpdateAdminListRow( keyType, keyID) { - if(!gAdminPage) return; @@ -2262,6 +2395,8 @@ if(!listbox) return; + var isLoginKey = IsKeyLoginKey(keyType,keyID); + var issuer = GetCoolKeyIssuer(keyType,keyID); var issuedTo = GetCoolKeyIssuedTo(keyType,keyID); var keyStatus = GetStatusForKeyID(keyType, keyID); @@ -2278,7 +2413,13 @@ issuedToCell.setAttribute("label",issuedTo); if(statusCell) - statusCell.setAttribute("label",keyStatus); + { + if(!isLoginKey) + statusCell.setAttribute("label",keyStatus); + else + statusCell.setAttribute("label",getBundleString("statusLoggedIn")); + + } if(imageCell) imageCell.setAttribute("image",SelectImageForKeyStatus(keyStatus,1,0)); @@ -2332,7 +2473,13 @@ return null; status.setAttribute("class","rowLabelText"); - status.setAttribute("label",keyStatus); + + var isLoginKey = IsKeyLoginKey(keyType,keyID); + if(!isLoginKey) + status.setAttribute("label",keyStatus); + else + status.setAttribute("label",getBundleString("statusLoggedIn")); + status.setAttribute("id",KeyToCellID(keyType,keyID,"status")); var progressCell = InsertListCell(listrow); @@ -2351,9 +2498,12 @@ progressMeter.setAttribute("value", "0%"); progressMeter.setAttribute("class","progressMeter"); + HideItem(progressMeter); } listrow.setAttribute("onclick","DoSelectAdminListRow(this);"); + listrow.setAttribute("ondblclick","launchCertViewerIfCerts();"); + listrow.setAttribute("context","adminkeymenu"); adminListBox.appendChild(listrow); return listrow; @@ -2396,6 +2546,12 @@ { SetProgressMeterValue(progMeterID, 0); SetProgressMeterStatus(progMeterID, ""); + + var meter = document.getElementById(progMeterID); + if(meter) + HideItem(meter); + + } function KeyToProgressBarID(keyType, keyID) @@ -2504,6 +2660,8 @@ var screennamepwd = null; var tokencode = null; + + var failed = 0; if (type == "userKey") { @@ -2526,6 +2684,7 @@ if (!EnrollCoolKey(keyType, keyID, type, screenname, pin,screennamepwd,tokencode)) { + failed = 1; recordMessage("EnrollCoolKey failed."); } @@ -2533,7 +2692,11 @@ { UpdateAdminListRow(keyType,keyID); UpdateAdminKeyDetailsArea(keyType,keyID); - UpdateAdminKeyAreaDetailsLabel(getBundleString("enrollingToken")); + if(!failed) + { + AdminToggleStatusProgress(1,keyType,keyID); + UpdateAdminKeyAreaDetailsLabel(getBundleString("enrollingToken")); + } } } @@ -2558,16 +2721,20 @@ var pin = GetPINValue(); var screennamepwd = null; + var failed = 0; + if (GetCoolKeyIsEnrolled(keyType, keyID)) { if (!ResetCoolKeyPIN(keyType, keyID, screenname, pin,screennamepwd)) { + failed = 1; recordMessage("ResetCoolKeyPIN failed."); } } else { + failed = 1; MyAlert(getBundleString("errorEnrolledFirst")); } @@ -2575,7 +2742,12 @@ { UpdateAdminListRow(keyType,keyID); UpdateAdminKeyDetailsArea(keyType,keyID); - UpdateAdminKeyAreaDetailsLabel(getBundleString("resettingTokenPIN")); + + if(!failed) + { + AdminToggleStatusProgress(1,keyType,keyID); + UpdateAdminKeyAreaDetailsLabel(getBundleString("resettingTokenPIN")); + } } } @@ -2590,6 +2762,7 @@ var keyType = keyInfo[0]; var keyID = keyInfo[1]; + var failed = 0; var globalType = GetCachedTokenType(keyID); if(!type) @@ -2609,6 +2782,7 @@ if (!FormatCoolKey(keyType, keyID, lType, screenname, pin,screennamepwd,tokencode)) { + failed = 1; recordMessage("FormatCoolKey failed."); } @@ -2616,7 +2790,11 @@ { UpdateAdminListRow(keyType,keyID); UpdateAdminKeyDetailsArea(keyType,keyID); - UpdateAdminKeyAreaDetailsLabel(getBundleString("formatingToken")); + if(!failed) + { + AdminToggleStatusProgress(1,keyType,keyID); + UpdateAdminKeyAreaDetailsLabel(getBundleString("formatingToken")); + } } } function DoCancelOperation() @@ -2677,18 +2855,25 @@ { var phoneHomeSuccess = 1; if(DoGetCoolKeyIsReallyCoolKey(keyType, keyID)) + { phoneHomeSuccess = DoPhoneHome(keyType,keyID); + } + else + { + var issuer = GetCoolKeyIssuer(keyType,keyID); + if(!issuer ) + issuer = getBundleString("unknownIssuer"); + + TraySendNotificationMessage(getBundleString("keyInserted"),"\"" + issuer +"\"" + " " + getBundleString("keyInsertedComputer"),3,4000,GetESCNotifyIconPath(keyType,keyID)); + + } + ShowAllWindows(); if(!CheckForSecurityMode()) { SelectESCPage(keyType,keyID,1 - phoneHomeSuccess); } - var issuer = GetCachedIssuer(keyID); - if(!issuer ) - { - issuer = getBundleString("unknownIssuer"); - } } } @@ -2699,7 +2884,6 @@ var row = GetRowForKey(keyType, keyID); - if(gHiddenPage) { if(curChildWindow) @@ -2707,7 +2891,7 @@ curChildWindow.close(); curChildWindow = null; } - var issuer = GetCachedIssuer(keyID); + var issuer = GetCoolKeyIssuer(keyType,keyID); if(!issuer) issuer = getBundleString("unknownIssuer"); TraySendNotificationMessage(getBundleString("keyRemoved"),"\"" + issuer + "\"" + " " + getBundleString("keyRemovedComputer"),1,4000,GetESCNotifyIconPath(keyType,keyID)); @@ -2723,9 +2907,17 @@ { RemoveAdminRow(row); if (row == gCurrentSelectedRow) + { gCurrentSelectedRow = null; - - UpdateAdminKeyDetailsArea(null,null); + UpdateAdminBindingListAvailability(); + } + else + { + if(DoGetNumCoolKeys() == 0) + { + UpdateAdminKeyDetailsArea(null,null); + } + } } } @@ -2765,6 +2957,7 @@ { UpdateAdminKeyDetailsArea(keyType,keyID); UpdateAdminListRow(keyType,keyID); + AdminToggleStatusProgress(0,keyType,keyID); } ClearProgressBar(KeyToProgressBarID(keyType, keyID)); @@ -2789,6 +2982,7 @@ { UpdateAdminKeyDetailsArea(keyType,keyID); UpdateAdminListRow(keyType,keyID); + AdminToggleStatusProgress(0,keyType,keyID); } } @@ -2812,6 +3006,7 @@ { UpdateAdminKeyDetailsArea(keyType,keyID); UpdateAdminListRow(keyType,keyID); + AdminToggleStatusProgress(0,keyType,keyID); } } @@ -2858,6 +3053,7 @@ { UpdateAdminKeyDetailsArea(keyType,keyID); UpdateAdminListRow(keyType,keyID); + AdminToggleStatusProgress(0,keyType,keyID); } if(!CheckForSecurityMode()) @@ -3319,9 +3515,35 @@ return num; } + +//Return how many unenrolled cards are plugged in. +function DoGetNumUnenrolledCoolKeys() +{ + var num = 0; + var arr = GetAvailableCoolKeys(); + if (arr && arr.length ) + { + for (i=0; i < arr.length; i++) + { + var status = GetStatusForKeyID(arr[i][0],arr[i][1]); + + if(status != getBundleString("statusEnrolled")) + num++; + + } + } + + return num; + +} + + //Is this really a CoolKey and not a CAC card? function DoGetCoolKeyIsReallyCoolKey(keyType,keyID) { + if(!keyType && !keyID) + return 0; + try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var isCool = netkey.GetCoolKeyIsReallyCoolKey(keyType, keyID); @@ -3415,6 +3637,24 @@ return atr; } + +//Get Token Name of card +function DoCoolKeyGetTokenName(keyType,keyID) +{ + if(!keyType && !keyID) + return null; + + var name = null; + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + name = netkey.GetCoolKeyTokenName(keyType, keyID); + } catch (e) { + return name; + } + + return name; +} + //Get applet version of card function DoGetCoolKeyGetAppletVer(keyType, keyID , isMajor) { @@ -3452,6 +3692,13 @@ MyAlert(usageStr); } +function ShowVersion() +{ + var verStr = getBundleString("coolkeyComponentVersion") + "\n\n"; + + MyAlert(verStr + " " + GetCoolKeyVersion()); + +} //Is the security mode up? function CheckForSecurityMode() @@ -3492,6 +3739,33 @@ } } +//Launch cert viewer if key has certs + +function launchCertViewerIfCerts() +{ + var row = null; + + if(gCurrentSelectedRow) + row = gCurrentSelectedRow; + + if(!row) + return; + + var theID = row.getAttribute("id"); + + if (!theID) + return; + + var keyInfo = RowIDToKeyInfo(theID); + + var status = GetStatusForKeyID(keyInfo[0],keyInfo[1]); + + if(status == getBundleString("statusEnrolled")) + { + launchCertViewer(); + } +} + //Launch page to view card's certificates function launchCertViewer() { @@ -3507,7 +3781,6 @@ if(!adminWnd) { var wind = window.open("chrome://esc/content/settings.xul","","chrome,resizable,centerscreen,dialog"); - } else { adminWnd.focus(); @@ -3780,7 +4053,7 @@ function LogKeyInfo(aKeyType,aKeyID,aMessage) { - var issuer = GetCachedIssuer(aKeyID); + var issuer = GetCoolKeyIssuer(aKeyType,aKeyID); var status = GetStatusForKeyID(aKeyType, aKeyID); var atr = DoCoolKeyGetATR(aKeyType,aKeyID); var tpsURI = GetCachedTPSURL(aKeyID); @@ -4130,3 +4403,84 @@ if(consoleService) consoleService.logStringMessage("esc: " + message + "\n"); } + +function GetEnvironmentVar(aVar) +{ + if(!aVar) + return null; + + var environ = Components.classes["@mozilla.org/process/environment;1"] + .getService(Components.interfaces.nsIEnvironment); + + + var retVar = null; + + if(environ) + retVar = environ.get(aVar); + + //alert("var: " + aVar + " value: " + retVar); + + return retVar; +} + +function SetEnvironmentVar(aVar,aValue) +{ + if(!aVar || !aValue) + return ; + + var environ = Components.classes["@mozilla.org/process/environment;1"] + .getService(Components.interfaces.nsIEnvironment); + + if(environ) + retVar = environ.set(aVar,aValue); +} + +function IsKeyLoginKey(keyType,keyID) +{ + var result = 0; + + var token_name = DoCoolKeyGetTokenName(keyType,keyID); + var login_token_name = GetEnvironmentVar("PKCS11_LOGIN_TOKEN_NAME"); + + if(token_name == login_token_name) + { + result = 1; + } + + return result; +} + +function AdminToggleStatusProgress(aOn,keyType,keyID) +{ + if(!gAdminPage) + return; + + var statusCell = document.getElementById(KeyToCellID(keyType,keyID,"status")); + + if(!statusCell) + return; + + var progMeterID = KeyToProgressBarID(keyType, keyID); + if(!progMeterID) + return; + + var meter = document.getElementById(progMeterID); + + if(!meter) + return; + + if(aOn) + { + HideItem(statusCell); + ShowItem(meter); + } + else + { + HideItem(meter); + ShowItem(statusCell); + + var adminList = document.getElementById("AdminBindingList"); + if(adminList) + adminList.focus(); + } +} Index: GenericAuth.xul =================================================================== RCS file: /cvs/dirsec/esc/src/app/xul/esc/chrome/content/esc/GenericAuth.xul,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- GenericAuth.xul 25 Oct 2006 04:03:35 -0000 1.3 +++ GenericAuth.xul 7 May 2007 23:49:23 -0000 1.4 @@ -1,5 +1,4 @@ - - + @@ -132,31 +132,34 @@ -