1# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
2# See LICENSE.txt for complete terms.
3
4from mixbox import fields
5
6import cybox.bindings.win_user_account_object as win_user_binding
7from cybox.common import String
8from cybox.objects.user_account_object import (Group, GroupList, Privilege,
9                                               PrivilegeList, UserAccount)
10
11
12class WinGroup(Group):
13    _binding = win_user_binding
14    _binding_class = win_user_binding.WindowsGroupType
15    _namespace = 'http://cybox.mitre.org/objects#WinUserAccountObject-2'
16    _XSI_TYPE = "WindowsGroupType"
17
18    name = fields.TypedField("Name", String)
19
20
21class WinGroupList(GroupList):
22    group = fields.TypedField("Group", WinGroup, multiple=True)
23
24
25class WinPrivilege(Privilege):
26    _binding = win_user_binding
27    _binding_class = win_user_binding.WindowsPrivilegeType
28    _namespace = 'http://cybox.mitre.org/objects#WinUserAccountObject-2'
29    _XSI_TYPE = "WindowsPrivilegeType"
30
31    user_right = fields.TypedField("User_Right", String)
32
33
34class WinPrivilegeList(PrivilegeList):
35    privilege = fields.TypedField("Privilege", WinPrivilege, multiple=True)
36
37
38class WinUser(UserAccount):
39    _binding = win_user_binding
40    _binding_class = win_user_binding.WindowsUserAccountObjectType
41    _namespace = 'http://cybox.mitre.org/objects#WinUserAccountObject-2'
42    _XSI_NS = "WinUserAccountObj"
43    _XSI_TYPE = "WindowsUserAccountObjectType"
44
45    security_id = fields.TypedField('Security_ID', String)
46    security_type = fields.TypedField('Security_Type', String)
47
48    # Override abstract types
49    group_list = fields.TypedField('Group_List', WinGroupList)
50    privilege_list = fields.TypedField('Privilege_List', WinPrivilegeList)
51