// spView.cpp : implementation of the CSpView class // #include "stdafx.h" #include "sp.h" #include "spDoc.h" #include "spView.h" #include "UsersDlg.h" #include "mailreaderdlg.h" #include "LoginDlg.h" #include "kd.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //memory leak debugging help #define _CRTDBG_MAP_ALLOC #include #include //#define PRERELEASE 1 //<--to show build number #define BUILD "supersecret" #define LICENSE_SINGLESITE 0x0001 #define LICENSE_MULTISITE 0x0002 #define LICENSE_OTHERSITE1 0x0004 #define LICENSE_OTHERSITE2 0x0008 #define LICENSE_STANDARDEVAL 0x0010 #define LICENSE_REGISTERED 0x0020 #define LICENSE_TIMELIMITEDEVAL 0x0040 #define LICENSE_METEREDEVAL 0x0080 #define LICENSE_FEATUREH 0x0100 #define LICENSE_FEATUREI 0x0200 #define LICENSE_FEATUREJ 0x0400 #define LICENSE_FEATUREK 0x0800 #define LICENSE_FEATUREL 0x1000 #define LICENSE_FEATUREM 0x2000 ///////////////////////////////////////////////////////////////////////////// // CSpView IMPLEMENT_DYNCREATE(CSpView, CFormView) BEGIN_MESSAGE_MAP(CSpView, CFormView) //{{AFX_MSG_MAP(CSpView) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSpView construction/destruction CSpView::CSpView() : CFormView(CSpView::IDD) { //{{AFX_DATA_INIT(CSpView) //}}AFX_DATA_INIT // TODO: add construction code here m_pApp = (CSpApp*)AfxGetApp(); cryp=new GZK; //Initialize recordset pointer rs=m_pApp->rsPool->GetRS("CSpView"); //cryp=NULL; } CSpView::~CSpView() { if(cryp!=NULL) delete cryp; m_pApp->rsPool->ReleaseRS(&rs->m_nID); } void CSpView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSpView) //}}AFX_DATA_MAP } BOOL CSpView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow(cs); } //Get some defaults void CSpView::OnInitialUpdate() { CString q; CWaitCursor wait; //ShowWindow(SW_HIDE); CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); //ShowWindow(SW_HIDE); //CLoginDlg d; //d.DoModal(); if(GetDocument()->LocateData()==false) PostMessage(WM_QUIT); //********************************** // THIS was THE VERY FIRST DATABASE CALL: q.Format("%s",cryp->InLineDecrypt("ASBscFrPeDOdk63cGRQwSVwgfPwTW0us6jTVaZsfmxydRtOj3AluIN+W3gAV4sey")); //"SELECT defaults.* FROM defaults;" rs->QueryReadOnly(q); q.Format("%s",cryp->InLineDecrypt("UkE2VWO4IP1iPPW/1bcXCg")); //regto rs->FetchField(q,&m_pApp->m_strRegCompany); rs->FetchField("versioninfo",&m_pApp->m_strDataVersion); //key rs->FetchField(cryp->InLineDecrypt("tZdFFwoDiLT3GHdRbvLevw"),&m_pApp->m_strRegKey); GetDocument()->Validate(); //bad key? if(m_pApp->m_strRegCompany.IsEmpty()) { cryp->gzMsgBox( "E0Qxm433ualSGnhTriy52OTWuirg5m9cqRVOsY7MqbC1uSkBnYV3hHkQL2ssNydxQS1z9c+K" "HP37LiJT5snfjpZpm5trQY3D2V0Bqa5r+TrMONyI+W6ntAzCPWwfuYSKwkaFvYh9q9I4OqpL" "gTQFxwQleoR2QSU7PPB5vK2tieDC7sHSt8bbAbvAfzeEuICviXNdKzqu59lhvh/oeFxnmo3C" "J+QoRzHdUk0lDpGt+AzK/jAeSfTwlIKne3VbxOu+dd8yY/DB+Hsn9E7UozIpV0BgVbJhyvHU" "ZEeWhW/ngsBZOgggYfWdeiTMywqJjRKcAnqFQCvLMF+NUejOsWCYPW4i7YHAc0tJtxXDl0u0" "ddbC0Uc1e7FN8Remjn5kb6M2ha04yUO6U52KnGJsvV4xj1RDi+kZhO9mfTl436BBdqjvdw5O" "/TK8zlc7SJ/nxsFjfUJF7YTYHMfLoc4m0DJsfKy+MnDU7vq4+8UIkkzenZYNENEa9Dar/Y+A" "9QEd4ENnUygVhRqAy359nicmlaO9o6xbaP87mSTYVYSbmXFsDgvLcl7eaxd052ibw/BNDsR7" "pD4T1v6cT6bZWDcRHPsRWzGno68oYqTrPiZAatqXbHSyGZmYS8lXRHzUDnqepD7Ef8e43V1y" "67A6eaDEffxiCkjaxT/8GkQEhfbzJnWZV/EaIByTR4rz6QCnhWs1f3HgDPsIlErn6qU3JdVa" "k5cira/FDAzC/q611qUcHhujWSwoZd+PEe5PhyJWcHyzjRNCab2YntuBZsy7dwRwDcoSGa8e" "kvERCHl9dcwQlvwm7B9upzt+F8lfO82lfpe+M4LOv+P2Fbhs2opHCgfk9PI/F6emPVCXrms+" "nGeJh9QrqOZFMOj2f67QuWK54nMOoeS/AI4w7lEg2srb/ZTU/nM6A4IUhwykQ6OXLreeCzyc" "68BhpZ3G29VNrrO68eDORBjZC0oHtOYNxzmxCYWMNAbOvvFLxfRdglCP8kcUvbV6cbUrSgyI" "4gF+s1cmEBChQVC6RFbvwnlwVWScLRcYfSmiglroYuJwmTWsog0nWogcJo8Y4a+0ZCEBkX7L" "fnFGWHjAEui6pbUYLR0LibcZnbf1QMNKwlIuJncCWjttMkbmp2KhMpdAlFWdw+XQIN1wQyrZ" "a+MBI8C/8JRBdmyQAtLGLXWpn0+vqie33fZ6fekuCprB6falnm87F22t6UKt1SpTkiKGmUjZ" "8whRq2G2TWd7drKyPHg7TnJ1CdtE7IM6HoIfBiBYWQsmNVi5VsghxpiVKvnoXhnADrmvYWWD" "aZ/CKuxHPUNPzJNnFAiRRKv7SV0NST58e54SAWRmT+CQsP8NRm4bZ5CBb2Zkjl+eDEHqBfy4" "Mr045Rf/H7x0PXbdrZnQxBMG7XKYokr6w0kupUNRLJlr03ObshrS4rzHA0awAFSONUxvqVC/" "sMRB9LUPBRGxC+5QANOEDpvYIwjdk8ZoC8krcW3j5vDBEAjo9SAxoDtk4N+R6N51fDs7M2ec" "z+yUrSIISnVLHULWaK6C9wdbbpp+V2sa62N+EGbGXuG+HHxGK2Uw5MXPejo1C/sol6uEpG0k" "rYZp6Y4nr7GDIxO/x8vXJS84cXASf9T4ALTlOgvuhwtZtd+DtBcobif9gzU=",190); /*INVALID LICENSE KEY! -=-=-=-=-=-=-=-=-=-=-=-=-=- This is generally caused by a license being revoked for non-payment in which case you must make payment before the license can be re-instated by AyaNova technical support. If there are no outstanding payment issues this is likely a result of someone trying to gain more features than you are licensed for by directly editing the database or attempting to patch the program. If the database was manipulated manually to attempt to gain more features than were paid for there are three ways to fix this problem: 1) Restore all data files from a known good backup before the "problem" occured. If this does not fix the problem, the program file may have been patched, try re-installing the program. 2) Contact technical support for assistance in fixing this problem. We can fix nearly anything as long as your data is still there. Email support@ayanova.com 3) Un-install the current program, delete all your data and start fresh by reinstalling the program and creating a new database. Re-enter all your data manually. The registration key entry form will now be displayed to give you an opportunity to re-enter your registration information.*/ rs->Close(); CKD d; d.DoModal(); PostMessage(WM_QUIT); AccessDenied(); return; } //CHECK TECH COUNT TO ENSURE USERS HAVEN'T //BEEN MESSING WITH THE DATA FILES rs->QueryReadOnly(cryp->InLineDecrypt("XpylqTv5lEq+juZqFsgPyAVSmUOGVLDsocm9oZgee2/mIjMRlv2TS316MSGQMsmuHX1ppj3c" "ZrD43F0e389I+mzl/GsUEHkotG514U3f+pv+lP9dfajHrbEVFar/B9qlo0KQq85/xnOnUiod" "yqeCvQ")); //SELECT Count(users.id) AS techcount FROM users WHERE (((users.tech)=True) AND ((users.active)=True)); long tc; rs->FetchField(cryp->InLineDecrypt("Yz02r2k2ZHlf2ywDwrlqsA"),&tc); //Is someone trying to !@#$ us by activating more techs //than they are licensed for if(tc>m_pApp->m_lRegLicCount) { //OOPS! I guess they are, Cheap bastards. //lets just wipe their activation key and popup a strongly worded message: rs->Ex(cryp->InLineDecrypt("gR3jWcuUWuSOJYVmhT88M/7v+kys87i4FDB/fSlJv1ATm/AcJUrT2R8cpBF6HXNXz3lD94SW" "TRzOsGy/UNcp5RgZ58m2XAejElB3p4KXenrRhdPh5fLf27jlf1Kf7nXGjQ9+6wl9rd969+gT" "fYfebg")); //UPDATE defaults SET defaults.regto = "SECURITY VIOLATION", defaults.[key] = "SECURITY VIOLATION"; cryp->gzMsgBox("zlyPKFMRD9CyVpuEU0q4vvHVHzT5EPPtbp4SuEG/awid1hK3UKonEJAO8nkqKtXg7flGr1L6" "VL4qwS63HA4zohplz496ZmAKyqV9Ya3nC5l7qcgsmQL/DQ/0ByIp8ZH63fmlfmOZdW86MZ/U" "mn7UPGs3qkb2i3WD0G/mqXyjsj/oV23LEFI44H9uau9GYXz8VQ7CdeB/AOT260BX1c/ELS21" "J5+4D6gNsr64FonMvsQMs50PkdF7sDod606zshgVl6DjFNH4Y2pp7tImHpEwxv0LEq8Q6Igg" "yScrrfSHbT7r6P6n8cIBT/dWPftrC4HJ/aqqUIu11CgazfYnz/9Lu6sActaaZPkMrjXm3LiI" "dCGj+LvZAmCc6ukatQT1+W1Sq6GIyskKtuDutQDoHug70r3ggm6lCNysZyzQNXHqBtPUGh+n" "71jSIZabWWSOpEioHD/EkCrZoqf5zhVZDTrkW6ZDJmh1eCpr4zYVuJfFjd7oko73VBfJtg0B" "w9gUKF0PK/m4QmrOSnkKp+rt2lRX4BRj08n1IqZLc/TGFvHK4lf06OkiSheDg5wczO4ygtLN" "pangCH/eoigdjjuq7umRlnARCrBiaLA3YwJavDtmwjqcnDL2QKo/mmfMuK8b2Nf0Q9hga0zP" "5LX4yLZiZGQtwnJ4C92jl/xKQFeLcnFWKHysWBigIeCLuqd/ET3t7kmZWkDv+qtSSS1MccNs" "4heIJtY2RSf3Y1ssrDoiDQJk89mFyc0yZp71FtXuxMqgP/sTjZjR9E1Zc4okVd7Nw5atX9Qv" "lNAEIZ5f7y6MiL2VcnXzTA9mjm1TccnpaOgYUCx0dRRb3xVlkbp382kFxuUqA1GYkVt616QA" "hSgzObUSMsh9faccp7y+KJYJEbS3RKbNjg5qVIXNYXNHvzPkTkztiQS5TpGJkoSmc6cHiPQT" "jwG7uMXFNgp9UYVK+MrIjbPfNvcEtrKP1uSzhbykI8wRui22lyKRSoDuSw052j5kBY2hF9i2" "HhTMlhmsCd4w2rqKo2DFIYqlOM1HL6RCRq3TGA==",260); /* SECURITY VIOLATION - LICENSE COUNT EXCEEDED! =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Someone may have attempted to activate more technicians than you are licensed for by directly editing the database. To protect the integrity of your data your license key has been temporarily disabled. Restoring from backup will fix this problem. If you do not have a backup contact us for help support@ayanova.com =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Our clients have told us again an again that our licensing policy and tech support policy are more than generous and our prices are very reasonable for our product. You can purchase more licenses in minutes through our website at http://www.ayanova.com/purchase.htm */ rs->Close(); PostMessage(WM_QUIT); AccessDenied(); return; } rs->Close(); SetAvailableOptions(true); // //if(ProcessLogin()) // ShowWindow(SW_SHOW); AccessGranted(); //m_pApp->SwitchView(1); } ///////////////////////////////////////////////////////////////////////////// // CSpView diagnostics #ifdef _DEBUG void CSpView::AssertValid() const { CFormView::AssertValid(); } void CSpView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CSpDoc* CSpView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSpDoc))); return (CSpDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CSpView message handlers //***************************************************** void CSpView::SetAvailableOptions(bool NoOptions) { CWnd* pMain = AfxGetMainWnd(); CMenu* mmenu = pMain->GetMenu(); CMenu* submenu = mmenu->GetSubMenu(0); CString q; if(NoOptions) { mmenu->EnableMenuItem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(2, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(3, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(4, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); } else { mmenu->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED); mmenu->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED); mmenu->EnableMenuItem(2, MF_BYPOSITION | MF_ENABLED); mmenu->EnableMenuItem(3, MF_BYPOSITION | MF_ENABLED); mmenu->EnableMenuItem(4, MF_BYPOSITION | MF_ENABLED); mmenu->EnableMenuItem(5, MF_BYPOSITION | MF_ENABLED); #ifdef _WTF_ AfxMessageBox("CSpView::SetAvailableOptions"); #endif //read the m_strRights string and set the available //options if(m_pApp->Allowed(RSTAT,true)!=0) mmenu->EnableMenuItem(ID_VIEW_WORKORDERS, MF_ENABLED); else mmenu->EnableMenuItem(ID_VIEW_WORKORDERS, MF_DISABLED | MF_GRAYED); //schedule view if(m_pApp->Allowed(RSCHEDULE,true)!=0) mmenu->EnableMenuItem(ID_VISUAL_SCHEDULE, MF_ENABLED); else mmenu->EnableMenuItem(ID_VISUAL_SCHEDULE, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RSEARCH,false)!=0) mmenu->EnableMenuItem(ID_SEARCH, MF_ENABLED); else mmenu->EnableMenuItem(ID_SEARCH, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RSECURITY,false)!=0) mmenu->EnableMenuItem(ID_TOOLS_SECURITY, MF_ENABLED); else mmenu->EnableMenuItem(ID_TOOLS_SECURITY, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RSNR,false)!=0) mmenu->EnableMenuItem(ID_VIEW_SHIPPINGRECEIVING, MF_ENABLED); else mmenu->EnableMenuItem(ID_VIEW_SHIPPINGRECEIVING, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(REMAIL,false)!=0) { //flag menu and flag user record so that they wont //appear as someone that can be emailed - see mail editor for details q.Format("UPDATE users SET users.mail = True " "WHERE (((users.id)=%u));",m_pApp->m_lusrID); rs->Ex(q); mmenu->EnableMenuItem(ID_VIEW_MAIL, MF_ENABLED); } else { //flag menu and flag user record so that they wont //appear as someone that can be emailed - see mail editor for details q.Format("UPDATE users SET users.mail = False " "WHERE (((users.id)=%u));",m_pApp->m_lusrID); rs->Ex(q); mmenu->EnableMenuItem(ID_VIEW_MAIL, MF_DISABLED | MF_GRAYED); } if(m_pApp->Allowed(RLOANERS,false)!=0) mmenu->EnableMenuItem(ID_FILE_LOANERSRENTALS, MF_ENABLED); else mmenu->EnableMenuItem(ID_FILE_LOANERSRENTALS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RDBUTIL,false)!=0) mmenu->EnableMenuItem(ID_VIEW_DATABASE, MF_ENABLED); else mmenu->EnableMenuItem(ID_VIEW_DATABASE, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RPM,false)!=0) mmenu->EnableMenuItem(ID_FILE_PMCHECK, MF_ENABLED); else mmenu->EnableMenuItem(ID_FILE_PMCHECK, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RREPORTS,false)!=1)//special exception: no read only possible mmenu->EnableMenuItem(ID_REPORTS, MF_DISABLED | MF_GRAYED); else mmenu->EnableMenuItem(ID_REPORTS, MF_ENABLED); if(m_pApp->Allowed(RPRINTSETUP,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_REPORTS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_REPORTS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RCLIENTS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_CLIENTS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_CLIENTS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RUSERS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_USERS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_USERS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RRATES,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_RATES, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_RATES, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RZONES,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ZONES, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ZONES, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RUNITS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_UNITS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_UNITS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RMODELS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_UNITMODELS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_UNITMODELS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RPARTS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_PARTS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_PARTS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RTASKS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_TASKS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_TASKS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RPROJECTS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_PROJECTS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_PROJECTS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RCATEGORIES,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_WORKORDERTYPES, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_WORKORDERTYPES, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RNONCLIENTS,false)!=0) { mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_SUBCONTRACTORS, MF_ENABLED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_COURIERSSHIPPERS, MF_ENABLED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_MANUFACTURERSSUPPLIERS, MF_ENABLED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_RESELLERSCOMPETITORS, MF_ENABLED); } else { mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_SUBCONTRACTORS, MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_COURIERSSHIPPERS, MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_MANUFACTURERSSUPPLIERS, MF_DISABLED | MF_GRAYED); mmenu->EnableMenuItem(ID_OPTIONS_EDIT_ADDRESSBOOK_RESELLERSCOMPETITORS, MF_DISABLED | MF_GRAYED); } if(m_pApp->Allowed(RUSERPREFS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_USER, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_USER, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RSCHEDGROUPS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_SCHEDGRPS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_SCHEDGRPS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RSCHEDMARKERS,false)!=0) mmenu->EnableMenuItem(ID_OPTIONS_EDIT_SCHEDMARKERS, MF_ENABLED); else mmenu->EnableMenuItem(ID_OPTIONS_EDIT_SCHEDMARKERS, MF_DISABLED | MF_GRAYED); if(m_pApp->Allowed(RARASREQUESTS,false)!=0) mmenu->EnableMenuItem(ID_VIEW_ARAS_SERVICE_REQUESTS, MF_ENABLED); else mmenu->EnableMenuItem(ID_VIEW_ARAS_SERVICE_REQUESTS, MF_DISABLED | MF_GRAYED); #ifdef AYQB mmenu->EnableMenuItem(ID_VIEW_ARAS_SERVICE_REQUESTS, MF_DISABLED | MF_GRAYED); #endif } pMain->DrawMenuBar(); } //check for mail, not really startup void CSpView::DoStartup() { if(m_pApp->Allowed(REMAIL,false)==0) return; CString q,str,plural,plural2; long lData; //Check mail messages q.Format("SELECT Count(mailroute.remind) AS NewMessageCount " "FROM mailroute LEFT JOIN mail ON mailroute.maillink = mail.id " "WHERE (((mailroute.recipient)=%u) AND ((mailroute.remind)=True) AND ((mail.deliverydate)m_lusrID); rs->QueryReadOnly(q); if(rs->IsEmpty()) return; rs->FetchField("NewMessageCount",&lData); if(lData!=0) { if(lData==1) { plural=""; plural2="it"; } else { plural="s"; plural2="them"; } q.Format("You have %u unread message%s.\r\nRead %s now?",lData,plural,plural2); if(AfxMessageBox(q,MB_YESNO)==IDYES) { CMailReaderDlg d; d.DoModal(); } } } void CSpView::Activate() { /* CFrameWnd* pFrame; pFrame=GetActiveFrame(); pFrame->ShowWindow(SW_HIDE); if(ProcessLogin()) { pFrame->ShowWindow(SW_SHOW); //if has rights to stat screen: int x=m_pApp->Allowed(RSTAT); if(x!=0) m_pApp->SwitchView(2); } */ } void CSpView::DeActivate() { //AfxMessageBox("DeActivate"); } void CSpView::Logout() { m_pApp->m_lusrID=0; SetAvailableOptions(true); m_pApp->SetMainCaption("Log in"); } void CSpView::AccessDenied() { AfxMessageBox("Access denied.",MB_ICONSTOP); m_pApp->m_lusrID=0; rs->Close(); if(cryp!=NULL) delete cryp; cryp=NULL; PostQuitMessage(-1); } //NOT ONLY ACCESS GRANTED BUT SETS PROGRAM DEFAULTS AS WELL. //IF MANY MORE DEFAULTS ARE ADDED HERE, IT SHOULD BE MOVED OVER //TO CSPAPP AS A DEDICATED FUNCTION void CSpView::AccessGranted() { //get user settings from user record and set them in the document CString strData,secActual,secHidden,strHashActual,strHashHidden,secHash; CString q; long lData; bool bData; q.Format("SELECT users.* FROM users WHERE (((users.id)=%u));",m_pApp->m_lusrID); rs->QueryReadOnly(q); CString strWelcome; //GROUP ID VALUE rs->FetchField("c",&lData); m_pApp->m_lGroupID=lData;//set group id for spapp->allowed function secActual.Format("%u\\",lData); //USER ID rs->FetchField("id",&lData); m_pApp->m_lusrID=lData; strData.Format("%u",lData); secActual+=strData; rs->FetchField("first",&strData); secActual+=strData; strWelcome="AyaNovaź - " + strData; m_pApp->m_strCurrentUserName = strData; rs->FetchField("last",&strData); secActual+=strData; strWelcome=strWelcome + " " + strData; m_pApp->m_strCurrentUserName= m_pApp->m_strCurrentUserName + " " + strData; rs->FetchField("initials",&strData); rs->FetchField("tech",&bData); m_pApp->m_bTech=bData; strData=bData ? "TRUE" : "FALSE"; secActual+=strData; rs->FetchField("active",&bData); if(bData==false) { //to do: encrypt this AfxMessageBox("This user is not active"); AccessDenied(); rs->Close(); return; } //kinda pointless but here it is anyway... strData=bData ? "TRUE" : "FALSE"; secActual+=strData; rs->FetchField("a",&secHidden); cryp->GZDecrypt(&secHidden,false); rs->FetchField("b",&secHash); cryp->GZHash(&secActual);//change to hash cryp->GZHash(&secHidden);//change to hash //Now compare all three, if unequal there is a //security violation somewhere if(secHash!=secActual || secHash != secHidden) { cryp->gzMsgBox("zlyPKFMRD9CyVpuEU0q4vs5Bh+TtdFN8kkDahfr3LHxLaarBdTv4fjT1+zEGwU57sdC4wVAf" "nwFSUtPO8ZwB4MloSuCxqIyAw1v3TjAYgAtx8B5xXHz7J/OiWuu/P2UcZMbBr8puNMMDUqg2" "LEs4p/nHAUDJxtaXaa747fKxJa27IchIGhihfglnH6WIx1Qzb5hmRB4+bFtnxc27Yu898Z9R" "BZTcKEyMujFvUH/xkYkrc8fq6vRhkMhPgBv94IS+LrIZeG0l4Dv2D/yC/Rx2k/Dm9sCbidtn" "UZUw5z4yrUqdJeWGjdXFNRqmW8HPFM2wVlGLPmU2L+K8uaGo4hk/4sSetYEOS+8wKSNz5zUO" "nv6XkXaLZDCiECVQJ9kAScZt8I+RDctA8F4Xs5D20EGd9Zso8dgbdxskyS19kREIdOTV647M" "qQrdnlsXqrAjk1r4sj6K5PC+6e/EvP9znzscpA",999); /*SECURITY VIOLATION! =-=-=-=-=-=-=-=-=-=-=-=-=- This user account is corrupt or someone has attempted to circumvent the security system by modifying the user record directly in the database. This account can not be used until it has been re-setup by the system administrator or a user with sufficient rights to modify user accounts.*/ PostMessage(WM_QUIT); AccessDenied(); rs->Close(); return; } m_pApp->SetMainCaption(strWelcome); //************************* GET AND SET DEFAULTS HERE *************** rs->FetchField("defrate",&m_pApp->m_lUsersDefRate); rs->FetchField("deftravelrate",&m_pApp->m_lUsersDefTravelRate); rs->FetchField("defonsite",&m_pApp->m_bDefOnsite); rs->FetchField("schedrnd",&m_pApp->m_bDefSchedRnd); rs->FetchField("schedoneday",&m_pApp->m_bDefSchedOneDay); rs->FetchField("hgrid",&m_pApp->m_bDefShowHGridOnMainScreen); rs->QueryReadOnly("SELECT * FROM defaults;"); rs->FetchField("wonewstat",&m_pApp->m_lDefNewWOStatus); rs->FetchField("woclosestat",&m_pApp->m_lDefClosedWOStatus); rs->FetchField("woreopenstat",&m_pApp->m_lDefReOpenWOStatus); rs->FetchField("schedrfrshsecs",&m_pApp->m_lSchedRefreshSecs); rs->FetchField("schedwindow",&m_pApp->m_lSchedWindowDays); //securenet change rs->FetchField("showprobaction",&m_pApp->m_bShowProblemActionFields); //********************************************************************** SetAvailableOptions(false); DoStartup(); rs->Close(); if(cryp!=NULL) delete cryp; cryp=NULL; } void CSpView::SuperUser(CString user) { COleDateTime dt; dt=COleDateTime::GetCurrentTime(); CString su=dt.Format("%d%m%Y");//"%d%m%Y" cryp->GZHash(&su); //CHECK FOR BACK DOOR if(user.Compare(su)==0) //super user backdoor { m_pApp->SetMainCaption("**************************"); //open up the user editing screen with full rights CUsersDlg d; d.m_bIsBackDoor=true; d.DoModal(); rs->Close(); PostQuitMessage(WM_QUIT); return; //exit program } } void CSpView::ProcessSecurity(CString secure) { } bool CSpView::ProcessLogin() { bool bDone=false; CString q; CString user; CString pass; CString testempty; m_pApp->m_lusrID=0; SetAvailableOptions(true); CLoginDlg d; d.m_strBannerFile=m_pApp->ReportDirectory() + "000"; while(!bDone) { //LOOP here until user logs in or presses Cancel #ifdef WHATTHEFUBAR AfxMessageBox("SPVIEW ProcessLogin() top of loop"); #endif d.password=pass; d.login=user; if(d.DoModal()==IDCANCEL) { PostQuitMessage(-1); return false; } #ifdef WHATTHEFUBAR AfxMessageBox("SPVIEW ProcessLogin() \"if(rs==NULL)\""); #endif //PROCESS A LOG IN // m_ctlLogin.GetWindowText(user); // m_ctlPassword.GetWindowText(pass); if(user.IsEmpty()) { AccessDenied(); } else { #ifdef WHATTHEFUBAR AfxMessageBox("SPVIEW ProcessLogin() \"SuperUser(user);\""); #endif //check for super user account SuperUser(user); //hash entries cryp->GZHash(&user); testempty="@" + user +"gz"; if(pass.IsEmpty()) pass=testempty; cryp->GZHash(&pass); q.Format("SELECT users.* FROM users WHERE (((users.login)=\"%s\") AND ((users.pass)=\"%s\"));",user,pass); #ifdef WHATTHEFUBAR AfxMessageBox("SPVIEW ProcessLogin() about to open users rs"); #endif rs->QueryReadOnly(q); if(rs->IsEmpty()) { AccessDenied(); } else { AccessGranted(); bDone=true; } rs->Close(); }//else not access denied }//while not done loop ShowWindow(SW_MAXIMIZE); #ifdef WHATTHEFUBAR AfxMessageBox("SPVIEW ProcessLogin() bottom, done login"); #endif return true; } //======================= CFrameWnd* CSpView::GetActiveFrame() { CWnd* pMainWnd = AfxGetMainWnd(); ASSERT_VALID(pMainWnd); if(!pMainWnd->IsKindOf(RUNTIME_CLASS( CFrameWnd))) return NULL; return static_cast(pMainWnd)->GetActiveFrame(); }