implemented JSON serialization for user DB objects
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 22 May 2017 06:45:19 +0000 (09:45 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 22 May 2017 06:45:19 +0000 (09:45 +0300)
include/nms_util.h
src/libnetxms/Makefile.am
src/libnetxms/json.cpp [deleted file]
src/libnetxms/strmap.cpp
src/server/core/session.cpp
src/server/core/userdb_objects.cpp
src/server/include/nms_users.h

index f8a0b05..3bab0f1 100644 (file)
@@ -831,7 +831,7 @@ public:
    void fillMessage(NXCPMessage *msg, UINT32 sizeFieldId, UINT32 baseFieldId) const;
    void loadMessage(const NXCPMessage *msg, UINT32 sizeFieldId, UINT32 baseFieldId);
 
-   json_t *toJson();
+   json_t *toJson() const;
 };
 
 /**
@@ -1366,6 +1366,19 @@ inline json_t *json_string_a(const char *s)
    return (s != NULL) ? json_string(s) : json_null();
 }
 
+/**
+ * Create JSON string from wide character string
+ */
+inline json_t *json_string_w(const WCHAR *s)
+{
+   if (s == NULL)
+      return json_null();
+   char *us = UTF8StringFromWideString(s);
+   json_t *js = json_string(us);
+   free(us);
+   return js;
+}
+
 #ifdef UNICODE
 #define json_string_t json_string_w
 #else
index 1eae524..0833b45 100644 (file)
@@ -2,7 +2,7 @@ SOURCES = array.cpp base64.cpp bytestream.cpp cc_mb.cpp cc_ucs2.cpp \
           cc_ucs4.cpp cc_utf8.cpp cch.cpp config.cpp crypto.cpp \
          dirw_unix.c geolocation.cpp getopt.c dload.cpp hash.cpp \
          hashmapbase.cpp ice.c icmp.cpp icmp6.cpp iconv.cpp inet_pton.c \
-         inetaddr.cpp json.cpp log.cpp lz4.c main.cpp md5.cpp message.cpp \
+         inetaddr.cpp log.cpp lz4.c main.cpp md5.cpp message.cpp \
          msgrecv.cpp msgwq.cpp net.cpp nxcp.cpp pa.cpp parisc_atomic.cpp \
           qsort.c queue.cpp rwlock.cpp scandir.c serial.cpp sha1.cpp sha2.cpp \
           solaris9_atomic.c spoll.cpp streamcomp.cpp string.cpp \
diff --git a/src/libnetxms/json.cpp b/src/libnetxms/json.cpp
deleted file mode 100644 (file)
index b236bff..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-** NetXMS - Network Management System
-** Utility Library
-** Copyright (C) 2003-2017 Victor Kirhenshtein
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published
-** by the Free Software Foundation; either version 3 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-**
-** File: json.cpp
-**/
-
-#include "libnetxms.h"
-
-/**
- * Create JSON string from wide character string
- */
-json_t LIBNETXMS_EXPORTABLE *json_string_w(const WCHAR *s)
-{
-   if (s == NULL)
-      return json_null();
-   char *us = UTF8StringFromWideString(s);
-   json_t *js = json_string(us);
-   free(us);
-   return js;
-}
index 63ba58d..ba5fbcb 100644 (file)
@@ -193,7 +193,7 @@ void StringMap::loadMessage(const NXCPMessage *msg, UINT32 sizeFieldId, UINT32 b
 /**
  * Serialize as JSON
  */
-json_t *StringMap::toJson()
+json_t *StringMap::toJson() const
 {
    json_t *root = json_array();
    StringMapEntry *entry, *tmp;
index d24293d..8ec4c35 100644 (file)
@@ -2873,7 +2873,7 @@ void ClientSession::createUser(NXCPMessage *pRequest)
          if (dwResult == RCC_SUCCESS)
          {
             msg.setField(VID_USER_ID, dwUserId);   // Send id of new user to client
-            WriteAuditLog(AUDIT_SECURITY, TRUE, m_dwUserId, m_workstation, m_id, dwUserId, _T("%s %s created"), isGroup ? _T("Group") : _T("User"), szUserName);
+            writeAuditLog(AUDIT_SECURITY, true, 0, _T("%s %s created"), isGroup ? _T("Group") : _T("User"), szUserName);
          }
       }
       else
@@ -2916,7 +2916,7 @@ void ClientSession::updateUser(NXCPMessage *pRequest)
          TCHAR name[MAX_DB_STRING];
          UINT32 id = pRequest->getFieldAsUInt32(VID_USER_ID);
          ResolveUserId(id, name, MAX_DB_STRING);
-         WriteAuditLog(AUDIT_SECURITY, TRUE, m_dwUserId, m_workstation, m_id, id,
+         writeAuditLog(AUDIT_SECURITY, true, 0,
             _T("%s %s modified"), (id & GROUP_FLAG) ? _T("Group") : _T("User"), name);
       }
       msg.setField(VID_RCC, result);
@@ -2956,8 +2956,8 @@ void ClientSession::detachLdapUser(NXCPMessage *pRequest)
       {
          TCHAR name[MAX_DB_STRING];
          ResolveUserId(id, name, MAX_DB_STRING);
-         WriteAuditLog(AUDIT_SECURITY, TRUE, m_dwUserId, m_workstation, m_id, id,
-            _T("%s %s modified"), (id & GROUP_FLAG) ? _T("Group") : _T("User"), name);
+         writeAuditLog(AUDIT_SECURITY, true, 0,
+            _T("%s %s detached from LDAP account"), (id & GROUP_FLAG) ? _T("Group") : _T("User"), name);
       }
       msg.setField(VID_RCC, result);
    }
@@ -3004,7 +3004,7 @@ void ClientSession::deleteUser(NXCPMessage *pRequest)
             msg.setField(VID_RCC, rcc);
             if(rcc == RCC_SUCCESS)
             {
-               WriteAuditLog(AUDIT_SECURITY, TRUE, m_dwUserId, m_workstation, m_id, dwUserId,
+               writeAuditLog(AUDIT_SECURITY, true, 0,
                              _T("%s %s [%d] deleted"), (dwUserId & GROUP_FLAG) ? _T("Group") : _T("User"), name, dwUserId);
             }
          }
index e09e62f..00ed9bd 100644 (file)
@@ -362,6 +362,24 @@ void UserDatabaseObject::disable()
    SendUserDBUpdate(USER_DB_MODIFY, m_id, this);
 }
 
+/**
+ * Serialize object to JSON
+ */
+json_t *UserDatabaseObject::toJson() const
+{
+   json_t *root = json_object();
+   json_object_set_new(root, "id", json_integer(m_id));
+   json_object_set_new(root, "guid", m_guid.toJson());
+   json_object_set_new(root, "name", json_string_t(m_name));
+   json_object_set_new(root, "description", json_string_t(m_description));
+   json_object_set_new(root, "systemRights", json_integer(m_systemRights));
+   json_object_set_new(root, "flags", json_integer(m_flags));
+   json_object_set_new(root, "attributes", m_attributes.toJson());
+   json_object_set_new(root, "ldapDn", json_string_t(m_ldapDn));
+   json_object_set_new(root, "ldapId", json_string_t(m_ldapId));
+   return root;
+}
+
 /*****************************************************************************
  **  User
  ****************************************************************************/
@@ -725,6 +743,26 @@ void User::setFullName(const TCHAR *fullName)
    }
 }
 
+/**
+ * Serialize object to JSON
+ */
+json_t *User::toJson() const
+{
+   json_t *root = UserDatabaseObject::toJson();
+   json_object_set_new(root, "fullName", json_string_t(m_fullName));
+   json_object_set_new(root, "graceLogins", json_integer(m_graceLogins));
+   json_object_set_new(root, "authMethod", json_integer(m_authMethod));
+   json_object_set_new(root, "certMappingMethod", json_integer(m_certMappingMethod));
+   json_object_set_new(root, "certMappingData", json_string_t(m_certMappingData));
+   json_object_set_new(root, "disabledUntil", json_integer(m_disabledUntil));
+   json_object_set_new(root, "lastPasswordChange", json_integer(m_lastPasswordChange));
+   json_object_set_new(root, "lastLogin", json_integer(m_lastLogin));
+   json_object_set_new(root, "minPasswordLength", json_integer(m_minPasswordLength));
+   json_object_set_new(root, "authFailures", json_integer(m_authFailures));
+   json_object_set_new(root, "xmppId", json_string_t(m_xmppId));
+   return root;
+}
+
 /*****************************************************************************
  **  Group
  ****************************************************************************/
@@ -1051,3 +1089,13 @@ void Group::modifyFromMessage(NXCPMessage *msg)
                free(members);
        }
 }
+
+/**
+ * Serialize object to JSON
+ */
+json_t *Group::toJson() const
+{
+   json_t *root = UserDatabaseObject::toJson();
+   json_object_set_new(root, "members", json_integer_array(m_members, m_memberCount));
+   return root;
+}
index a6f4b0a..c6291d9 100644 (file)
@@ -206,7 +206,8 @@ public:
 
        virtual void fillMessage(NXCPMessage *msg);
        virtual void modifyFromMessage(NXCPMessage *msg);
-       void detachLdapUser();
+
+       virtual json_t *toJson() const;
 
        UINT32 getId() const { return m_id; }
        const TCHAR *getName() const { return m_name; }
@@ -234,8 +235,10 @@ public:
        void setAttribute(const TCHAR *name, const TCHAR *value) { m_attributes.set(name, value); m_flags |= UF_MODIFIED; }
        void setName(const TCHAR *name);
        void setDescription(const TCHAR *description);
+
        void setDn(const TCHAR *dn);
        void setLdapId(const TCHAR *id);
+   void detachLdapUser();
 };
 
 /**
@@ -298,6 +301,8 @@ public:
        virtual void fillMessage(NXCPMessage *msg);
        virtual void modifyFromMessage(NXCPMessage *msg);
 
+   virtual json_t *toJson() const;
+
        const TCHAR *getFullName() { return m_fullName; }
        int getGraceLogins() { return m_graceLogins; }
        int getAuthMethod() { return m_authMethod; }
@@ -343,6 +348,8 @@ public:
        virtual bool saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
 
+   virtual json_t *toJson() const;
+
        void addUser(UINT32 userId);
        void deleteUser(UINT32 userId);
        bool isMember(UINT32 userId, IntegerArray<UINT32> *searchPath = NULL);