diff --git a/.gitignore b/.gitignore index 727e3341c94de3d886c601a123c4e66c4f83fa98..3e570128ab22d1f73dd5f4e053894a3b4547dd65 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +erl_crash.dump + deps/ log/ **/*.java @@ -17,39 +19,13 @@ workspace.xml .DS_Store _build -# Excessive for iOS models -apps/roster/priv/macbert/Model/PublishService.swift -apps/roster/priv/macbert/Model/Whitelist.swift -apps/roster/priv/macbert/Model/feed.swift -apps/roster/priv/macbert/Spec/PublishService_Spec.swift -apps/roster/priv/macbert/Spec/Whitelist_Spec.swift -apps/roster/priv/macbert/Spec/feed_Spec.swift - .applist 0.3 -priv/protobuf/service_friend/Contact.proto -priv/protobuf/service_friend/Friend.proto -priv/protobuf/service_friend/Roster.proto -priv/protobuf/service_friend/contactStatus.proto -priv/protobuf/service_friend/friendStatus.proto -priv/protobuf/service_friend/muc.proto -priv/protobuf/service_friend/p2p.proto -priv/protobuf/service_friend/rosterStatus.proto -priv/protobuf/service_room/History.proto -priv/protobuf/service_room/Job.proto -priv/protobuf/service_room/Message.proto -priv/protobuf/service_room/act.proto -priv/protobuf/service_room/historyType.proto -priv/protobuf/service_room/jobType.proto -priv/protobuf/service_room/messageEvent.proto -priv/protobuf/service_room/messageStatus.proto -priv/protobuf/service_room/messageType.proto -apps/roster/priv/macbert/Model/FakeNumbers.swift -apps/roster/priv/macbert/Model/Presence.swift -apps/roster/priv/macbert/Model/cx.swift -apps/roster/priv/macbert/Model/load.swift -apps/roster/priv/macbert/Spec/FakeNumbers_Spec.swift -apps/roster/priv/macbert/Spec/Presence_Spec.swift -apps/roster/priv/macbert/Spec/cx_Spec.swift -apps/roster/priv/macbert/Spec/load_Spec.swift -apps/service/priv/ +rebar.lock + +priv/protobuf/* +apps/roster/src/roster_validator.erl + +apps/roster/priv/* +apps/service/priv/* +.tool-versions diff --git a/apps/rebar.config b/apps/rebar.config index c337a9c61111b599156aff4ca5e7b7e0d4ea6787..0993ff0156d9be80bf55ec75947298fc8a44e466 100644 --- a/apps/rebar.config +++ b/apps/rebar.config @@ -1,2 +1,2 @@ -{sub_dirs, [ "roster", "service" ]}. +{sub_dirs, [ "roster" ]}. {deps_dir, ["../deps"]}. diff --git a/apps/roster/include/rest_static.hrl b/apps/roster/include/rest_static.hrl index dcc94d45d4f366049822715fd8d38187f10ac6a6..537e16c2bc352a94cab5a0ace9f01e8ad7532e2e 100644 --- a/apps/roster/include/rest_static.hrl +++ b/apps/roster/include/rest_static.hrl @@ -24,7 +24,7 @@ feed_id = [] :: [] | binary(), call_id = [] :: [] | binary(), type = [] :: [] | binary(), - recipients = [] :: [] | binary(), + recipients = [] :: [] | list(), duration = 0 :: [] | integer(), start_time = 0 :: [] | integer(), status = [] :: [] | binary(), diff --git a/apps/roster/include/roster.hrl b/apps/roster/include/roster.hrl index 4d5755c576724d8c34a495757eeb861e74031e1c..19385eb44bc0e48541d381997ae3f0dfb88c2ff3 100644 --- a/apps/roster/include/roster.hrl +++ b/apps/roster/include/roster.hrl @@ -57,7 +57,7 @@ sound = [] :: [] | binary()}). -record('Search', {id = [] :: integer() | binary(), - ref = [] :: binary(), + ref = [] :: [] | binary(), field = [] :: binary(), type = [] :: '==' | '!=' | 'like', value = [] :: list(term() | binary()), @@ -75,8 +75,8 @@ -record('Feature', {id = [] :: [] | binary(), key = [] :: binary(), - value = <<>> :: binary(), - group = ?DUMMY_GROUP :: binary()}). + value = <<>> :: [] | integer() | binary() | true, + group = ?DUMMY_GROUP :: [] | binary()}). -record('Service', {id = [] :: [] | binary(), type = [] :: email | vox | aws | wallet, @@ -87,8 +87,8 @@ status = [] :: [] | verified | added | add | remove}). -record('Member', {id = [] :: [] | integer(), - container = chain :: chain | cur | [], - feed_id = [] :: #muc{} | #p2p{} | [] , + container = chain :: [] | chain | cur, + feed_id = [] :: [] | #muc{} | #p2p{}, prev = [] :: [] | integer(), next = [] :: [] | integer(), feeds = [] :: list(), @@ -96,8 +96,8 @@ avatar = [] :: [] | binary(), names = [] :: [] | binary(), surnames = [] :: [] | binary(), - alias = [] :: [] | binary(), - reader = 0 :: [] | integer(), + alias = [] :: [] | binary() | list(), + reader = 0 :: [] | integer() | #reader{}, update = 0 :: [] | integer(), settings = [] :: [] | list(#'Feature'{}), services = [] :: [] | list(#'Service'{}), @@ -122,7 +122,7 @@ -record('Message', {id = [] :: [] | integer(), container = chain :: chain | cur | [], - feed_id = [] :: #muc{} | #p2p{}, + feed_id = [] :: [] | #muc{} | #p2p{}, prev = [] :: [] | integer(), next = [] :: [] | integer(), msg_id = [] :: [] | binary(), @@ -149,10 +149,10 @@ name = [] :: [] | binary(), links = [] :: [] | list(#'Link'{}), description = [] :: [] | binary(), - settings = [] :: list(#'Feature'{}), - members = [] :: list(#'Member'{}), - admins = [] :: list(#'Member'{}), - data = [] :: list(#'Desc'{}), + settings = [] :: [] | list(#'Feature'{}), + members = [] :: [] | list(#'Member'{}), + admins = [] :: [] | list(#'Member'{}), + data = [] :: [] | list(#'Desc'{}), type = [] :: [] | group | channel | call, tos = [] :: [] | binary(), tos_update = 0 :: [] | integer(), @@ -192,23 +192,25 @@ created = 0 :: [] | integer(), settings = [] :: list(#'Feature'{}), services = [] :: list(#'Service'{}), - presence = [] :: [] | online | offline | binary(), + presence = [] :: [] | online | offline | binary(), status = [] :: [] | request | authorization | ignore | internal - | friend | last_msg | ban | banned | deleted }). + | friend | last_msg | ban | banned | deleted | not_existence | draft}). --record('ExtendedStar', {star = [] :: #'Star'{} | [], - from = [] :: #'Contact'{} | #'Room'{} | []}). +-record('ExtendedStar', {star = [] :: [] | #'Star'{} | #'Message'{}, + from = [] :: [] | #'Contact'{} | #'Room'{} | []}). -record('Auth', {client_id = [] :: [] | binary(), dev_key = [] :: [] | binary(), user_id = [] :: [] | binary(), phone = [] :: [] | binary() | {fake, binary()}, token = [] :: [] | binary(), - type = [] :: [] | atom(), + type = [] :: [] | update | clear | delete | deleted | logout + | verify | verified | expired | reg | resend + | voice | push | get | {ver | reg, string()} | login, sms_code = [] :: [] | binary(), attempts = [] :: [] | integer(), services = [] :: list(term()), - settings = [] :: [] | list(#'Feature'{}), + settings = [] :: [] | binary() | list(#'Feature'{}), push = [] :: [] | binary(), os = [] :: [] | ios | android | web, created = [] :: [] | integer(), @@ -219,24 +221,25 @@ surnames = [] :: [] | binary(), email = [] :: [] | binary(), nick = [] :: [] | binary(), - userlist = [] :: list(#'Contact'{} | integer()), - roomlist = [] :: list(#'Room'{}), - favorite = [] :: list(#'Star'{}), - tags = [] :: list(#'Tag'{}), + userlist = [] :: [] | {list(), list()} | list(#'Contact'{} | integer()), + roomlist = [] :: [] | {list(), list()} | list(#'Room'{}), + favorite = [] :: [] | {list(), list()} | list(#'Star'{} | #'ExtendedStar'{} ), + tags = [] :: [] | list(#'Tag'{}), phone = [] :: [] | binary(), avatar = [] :: [] | binary(), update = 0 :: [] | integer(), status = [] :: [] | get | create | del | remove | nick - | add | update | list | patch | last_msg }). + | search | contact | add | update + | list | patch | last_msg }). -record('Profile', {phone = [] :: [] | binary(), services = [] :: [] | list(#'Service'{}), - rosters = [] :: [] | list(#'Roster'{} | binary()), + rosters = [] :: [] | list(#'Roster'{} | binary() | integer()), settings = [] :: [] | list(#'Feature'{}), update = 0 :: integer(), balance = 0 :: integer(), presence = [] :: [] | offline | online | binary(), - status = [] :: [] | remove | get | patch | update| delete | create }). + status = [] :: [] | remove | get | patch | update| delete | create | init}). -record('Presence', {uid = <<>> :: binary(), status = [] :: [] | offline | online | binary()}). @@ -285,17 +288,17 @@ -record('Index', {id = [] :: [] | term(), roster = [] :: list(term())}). --record('Whitelist', {phone = [] :: [] | binary(), +-record('Whitelist', {phone = [] :: [] | integer() | binary(), created = 0 :: [] | integer()}). -record(error, {code = [] :: [] | atom()}). --record(ok, {code = [] :: [] | binary()}). +-record(ok, {code = [] :: [] | transcribe | sms_sent | call_in_progress | push | cleared | logout | added | binary()}). -record(error2, {code = [] :: [] | atom(), src=[] :: [] | binary() | integer() }). -record(ok2, {code = [] :: [] | atom(), src=[] :: [] | {binary(), binary()} | binary() }). --record(io, {code = [] :: [] | #ok{} | #error{} | #ok2{} | #error2{} | transcribe, - data = <<>> :: [] | <<>> | #'Roster'{} | { atom(), binary() | integer() }}). +-record(io, {code = [] :: [] | atom() | #ok{} | #error{} | #ok2{} | #error2{}, + data = <<>> :: [] | integer() | #'Message'{} | <<>> | binary() | #'Roster'{} | { atom(), binary() | integer()} | #error{}}). -record('Ack', {table = 'Message' :: atom(), id = [] :: [] | binary()}). @@ -320,8 +323,8 @@ topic = [] :: [] | binary(), qos = 0 :: [] | integer()}). --record('FakeNumbers', {phone = [] :: [] | binary(), - created = 0 :: [] | integer()}). +-record('FakeNumbers', {phone = [] :: [] | integer() | binary(), + created = 0 :: [] | integer() | list()}). -record('Draft', {data=[] :: list(term()), status = update :: update | get | delete }). diff --git a/apps/roster/priv/macbert/Model/Ack.swift b/apps/roster/priv/macbert/Model/Ack.swift deleted file mode 100644 index d5706c4af599455eb9d19c790ce86b94647f1355..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Ack.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class Ack { - var table: StringAtom? - var id: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Auth.swift b/apps/roster/priv/macbert/Model/Auth.swift deleted file mode 100644 index 2352012a18f796494e3cf364274d223aa09c780c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Auth.swift +++ /dev/null @@ -1,17 +0,0 @@ - -class Auth { - var client_id: String? - var dev_key: String? - var user_id: String? - var phone: AnyObject? - var token: String? - var type: StringAtom? - var sms_code: String? - var attempts: Int64? - var services: [AnyObject]? - var settings: [Feature]? - var push: String? - var os: AnyObject? - var created: Int64? - var last_online: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/CDR.swift b/apps/roster/priv/macbert/Model/CDR.swift deleted file mode 100644 index 1c4fc833adef581af598982eb8460da106adb068..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/CDR.swift +++ /dev/null @@ -1,16 +0,0 @@ - -class CDR { - var id: Int64? - var container: StringAtom? - var feed: AnyObject? - var next: Int64? - var prev: Int64? - var from: String? - var to: String? - var start: Int64? - var stop: Int64? - var type: AnyObject? - var desc: String? - var bill: Int64? - var tariff: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Call.swift b/apps/roster/priv/macbert/Model/Call.swift deleted file mode 100644 index b811320fd5dd422db909ab315b5205bbdc2c8f39..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Call.swift +++ /dev/null @@ -1,10 +0,0 @@ - -class Call { - var id: String? - var from: String? - var members: [CallMember]? - var start: Int64? - var stop: Int64? - var vox_url: String? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/CallMember.swift b/apps/roster/priv/macbert/Model/CallMember.swift deleted file mode 100644 index 543a635fa5190a2967b7a40adad8e9f781a75718..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/CallMember.swift +++ /dev/null @@ -1,16 +0,0 @@ - -class CallMember { - var id: Int64? - var feed_id: String? - var prev: Int64? - var next: Int64? - var contact: AnyObject? - var start: Int64? - var stop: Int64? - var type: AnyObject? - var desc: String? - var tariff: String? - var bill: Int64? - var duration: Int64? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Contact.swift b/apps/roster/priv/macbert/Model/Contact.swift deleted file mode 100644 index 89af7d9d36a89fdfa47cfba5f507f4a60abed566..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Contact.swift +++ /dev/null @@ -1,17 +0,0 @@ - -class Contact { - var phone_id: String? - var avatar: String? - var names: String? - var surnames: String? - var nick: String? - var reader: AnyObject? - var unread: Int64? - var last_msg: Message? - var update: Int64? - var created: Int64? - var settings: [Feature]? - var services: [Service]? - var presence: AnyObject? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Cursor.swift b/apps/roster/priv/macbert/Model/Cursor.swift deleted file mode 100644 index 715433bc29800de7e766ec1f7088cf7921844aa2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Cursor.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class Cursor { - var feed: AnyObject? - var roster_id: String? - var position: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Desc.swift b/apps/roster/priv/macbert/Model/Desc.swift deleted file mode 100644 index 05ae37264d1a36a0ee54d79577f2beae207f16c3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Desc.swift +++ /dev/null @@ -1,8 +0,0 @@ - -class Desc { - var id: String? - var mime: String? - var payload: String? - var parentid: String? - var data: [Feature]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/ExtendedStar.swift b/apps/roster/priv/macbert/Model/ExtendedStar.swift deleted file mode 100644 index 773d5ccd2092fd8efe23f0bfb02628109e51590b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/ExtendedStar.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class ExtendedStar { - var star: Star? - var from: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Feature.swift b/apps/roster/priv/macbert/Model/Feature.swift deleted file mode 100644 index 06325ae6e59e9c4ddd2da438cb9f31f503bb3c85..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Feature.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class Feature { - var id: String? - var key: String? - var value: String? - var group: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Friend.swift b/apps/roster/priv/macbert/Model/Friend.swift deleted file mode 100644 index 098158c1a02b9d69b602ca2529ecf356f2ad7028..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Friend.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class Friend { - var phone_id: String? - var friend_id: String? - var settings: [Feature]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/History.swift b/apps/roster/priv/macbert/Model/History.swift deleted file mode 100644 index ab4f1d13cb559de22b2788ab7b275262d3b583d8..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/History.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class History { - var roster_id: String? - var feed: AnyObject? - var size: Int64? - var entity_id: Int64? - var data: [AnyObject]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Index.swift b/apps/roster/priv/macbert/Model/Index.swift deleted file mode 100644 index 4752fe4398560508b7b65b79c5cbe218f7941b90..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Index.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class Index { - var id: AnyObject? - var roster: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Job.swift b/apps/roster/priv/macbert/Model/Job.swift deleted file mode 100644 index 224046c0ae12ea2e69c1715d82774bdd2d9bc3b2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Job.swift +++ /dev/null @@ -1,15 +0,0 @@ - -class Job { - var id: Int64? - var container: AnyObject? - var feed_id: act? - var prev: Int64? - var next: Int64? - var context: AnyObject? - var proc: AnyObject? - var time: Int64? - var data: AnyObject? - var events: [messageEvent]? - var settings: [Feature]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Link.swift b/apps/roster/priv/macbert/Model/Link.swift deleted file mode 100644 index 1b763993dbc8c406cdfad861a9953d9fa7067f38..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Link.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class Link { - var id: String? - var name: String? - var room_id: String? - var created: Int64? - var type: AnyObject? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Loc.swift b/apps/roster/priv/macbert/Model/Loc.swift deleted file mode 100644 index 90a23dec7319125227fc23bed068ea3176ee339b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Loc.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class Loc { - var x: String? - var y: String? - var place_id: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Member.swift b/apps/roster/priv/macbert/Model/Member.swift deleted file mode 100644 index 748d88eca454dc08cdc8136985e510ffc586066f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Member.swift +++ /dev/null @@ -1,20 +0,0 @@ - -class Member { - var id: Int64? - var container: AnyObject? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var feeds: [AnyObject]? - var phone_id: String? - var avatar: String? - var names: String? - var surnames: String? - var alias: String? - var reader: Int64? - var update: Int64? - var settings: [Feature]? - var services: [Service]? - var presence: AnyObject? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Message.swift b/apps/roster/priv/macbert/Model/Message.swift deleted file mode 100644 index 03e9429d3e03b2f81c73704335804feb4c57a5b3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Message.swift +++ /dev/null @@ -1,19 +0,0 @@ - -class Message { - var id: Int64? - var container: AnyObject? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var msg_id: String? - var from: String? - var to: String? - var created: Int64? - var files: [Desc]? - var type: [AnyObject]? - var link: AnyObject? - var seenby: [AnyObject]? - var repliedby: [AnyObject]? - var mentioned: [AnyObject]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Person.swift b/apps/roster/priv/macbert/Model/Person.swift deleted file mode 100644 index abba5ccf384ec651a4a099f416dfe1f1193ec020..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Person.swift +++ /dev/null @@ -1,14 +0,0 @@ - -class Person { - var id: String? - var phonelist: [AnyObject]? - var alias: [AnyObject]? - var localize: [AnyObject]? - var NotificationSettings: [AnyObject]? - var SoundSettings: [AnyObject]? - var ThemeID: String? - var BlockUsers: [AnyObject]? - var balance: Int64? - var isParticipants: [String]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Profile.swift b/apps/roster/priv/macbert/Model/Profile.swift deleted file mode 100644 index f32b4e5522d1be5709136313372c02226f065a73..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Profile.swift +++ /dev/null @@ -1,11 +0,0 @@ - -class Profile { - var phone: String? - var services: [Service]? - var rosters: [AnyObject]? - var settings: [Feature]? - var update: Int64? - var balance: Int64? - var presence: AnyObject? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/PushService.swift b/apps/roster/priv/macbert/Model/PushService.swift deleted file mode 100644 index b51d8ef0ec9bafa801d225647f4d9cf3a93e1c12..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/PushService.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class PushService { - var recipients: [AnyObject]? - var id: String? - var ttl: Int64? - var module: String? - var priority: String? - var payload: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Room.swift b/apps/roster/priv/macbert/Model/Room.swift deleted file mode 100644 index 5ecb7eed3c4b2c55580607e6e00104023a763bdd..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Room.swift +++ /dev/null @@ -1,21 +0,0 @@ - -class Room { - var id: String? - var name: String? - var links: [Link]? - var description: String? - var settings: [Feature]? - var members: [Member]? - var admins: [Member]? - var data: [Desc]? - var type: AnyObject? - var tos: String? - var tos_update: Int64? - var unread: Int64? - var mentions: [AnyObject]? - var readers: [AnyObject]? - var last_msg: AnyObject? - var update: Int64? - var created: Int64? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Roster.swift b/apps/roster/priv/macbert/Model/Roster.swift deleted file mode 100644 index d9ff48490012ddced1d8e209165f77b38e06bc82..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Roster.swift +++ /dev/null @@ -1,16 +0,0 @@ - -class Roster { - var id: AnyObject? - var names: String? - var surnames: String? - var email: String? - var nick: String? - var userlist: [AnyObject]? - var roomlist: [Room]? - var favorite: [Star]? - var tags: [Tag]? - var phone: String? - var avatar: String? - var update: Int64? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Schedule.swift b/apps/roster/priv/macbert/Model/Schedule.swift deleted file mode 100644 index 465c7719643588cb12588b90cd1894a074c415aa..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Schedule.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class Schedule { - var id: Int64? - var proc: Int64? - var data: [AnyObject]? - var state: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Search.swift b/apps/roster/priv/macbert/Model/Search.swift deleted file mode 100644 index daeafd5c6afba2ad34555d2680518ffe57458def..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Search.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class Search { - var id: Int64? - var ref: String? - var field: String? - var type: AnyObject? - var value: [AnyObject]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Service.swift b/apps/roster/priv/macbert/Model/Service.swift deleted file mode 100644 index 40de56080cbe8446df1a402c4705ce7811493c06..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Service.swift +++ /dev/null @@ -1,10 +0,0 @@ - -class Service { - var id: String? - var type: AnyObject? - var data: AnyObject? - var login: String? - var password: String? - var expiration: Int64? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Star.swift b/apps/roster/priv/macbert/Model/Star.swift deleted file mode 100644 index bd39a44cad7c629aefee9521e8a9872592751bcd..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Star.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class Star { - var id: Int64? - var client_id: String? - var roster_id: Int64? - var message: Message? - var tags: [Tag]? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/StickerPack.swift b/apps/roster/priv/macbert/Model/StickerPack.swift deleted file mode 100644 index fe47f7ecfbb57fcae7aece309f169bfcebb42c37..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/StickerPack.swift +++ /dev/null @@ -1,12 +0,0 @@ - -class StickerPack { - var id: Int64? - var name: String? - var keywords: [AnyObject]? - var description: String? - var author: String? - var stickers: [Desc]? - var created: Int64? - var updated: Int64? - var downloaded: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Tag.swift b/apps/roster/priv/macbert/Model/Tag.swift deleted file mode 100644 index 207ca20951f7526aeafa0a6b0802ff8bf65dd77b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Tag.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class Tag { - var roster_id: String? - var name: String? - var color: String? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Test.swift b/apps/roster/priv/macbert/Model/Test.swift deleted file mode 100644 index 5fc1cf03d309bd5efc3e5ea009ed29b3123e008e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Test.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class Test { - var type: AnyObject? - var count: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Typing.swift b/apps/roster/priv/macbert/Model/Typing.swift deleted file mode 100644 index f37b1826744e18814b877285cb2192b3f194f42f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Typing.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class Typing { - var phone_id: String? - var comments: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/Vox.swift b/apps/roster/priv/macbert/Model/Vox.swift deleted file mode 100644 index 613a7ec150221fe6b1d1dc7d500f21f65545eb93..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/Vox.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class Vox { - var id: String? - var login: String? - var password: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/act.swift b/apps/roster/priv/macbert/Model/act.swift deleted file mode 100644 index aeaa79c8d0adfa5a10fe97d0fb73f61a87744395..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/act.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class act { - var name: String? - var data: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/amend.swift b/apps/roster/priv/macbert/Model/amend.swift deleted file mode 100644 index 0d08c444e4fe27748c3b740b9757d8b064985a9d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/amend.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class amend { - var id: Int64? - var docs: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/beginEvent.swift b/apps/roster/priv/macbert/Model/beginEvent.swift deleted file mode 100644 index af7d4531b927e95955ca35797437ff6f7baef214..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/beginEvent.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class beginEvent { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/boundaryEvent.swift b/apps/roster/priv/macbert/Model/boundaryEvent.swift deleted file mode 100644 index 006afe0fbc2a3f96211e0518ba042edffde66824..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/boundaryEvent.swift +++ /dev/null @@ -1,11 +0,0 @@ - -class boundaryEvent { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var payload: String? - var timeout: [AnyObject]? - var timeDate: String? - var timeDuration: String? - var timeCycle: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/chain.swift b/apps/roster/priv/macbert/Model/chain.swift deleted file mode 100644 index 14aea4f57041dc8ddac9ecd9d1d1e90da9cb52a2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/chain.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class chain { - var id: Int64? - var top: Int64? - var rear: Int64? - var count: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/complete.swift b/apps/roster/priv/macbert/Model/complete.swift deleted file mode 100644 index 80eb9dce609c3d571228886496db8fc2c9c485f7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/complete.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class complete { - var id: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/container.swift b/apps/roster/priv/macbert/Model/container.swift deleted file mode 100644 index 1ef7e86019fbd1c7ac6f7086a3236d1abc27574c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/container.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class container { - var id: Int64? - var top: Int64? - var rear: Int64? - var count: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/create.swift b/apps/roster/priv/macbert/Model/create.swift deleted file mode 100644 index a55abc4aff4f6b0fd70e479fc8f40a8dd11d3221..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/create.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class create { - var proc: AnyObject? - var docs: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/cur.swift b/apps/roster/priv/macbert/Model/cur.swift deleted file mode 100644 index 0ada6dd4d3618df8cddce166e64e6bdb1e228248..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/cur.swift +++ /dev/null @@ -1,10 +0,0 @@ - -class cur { - var id: AnyObject? - var top: Int64? - var bot: Int64? - var dir: AnyObject? - var reader: [AnyObject]? - var writer: [AnyObject]? - var args: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/endEvent.swift b/apps/roster/priv/macbert/Model/endEvent.swift deleted file mode 100644 index 7e0f2b03eefdadec595db419586e723d5fbb9d5d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/endEvent.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class endEvent { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/error.swift b/apps/roster/priv/macbert/Model/error.swift deleted file mode 100644 index 0bed537277858ae99456dc728e90c5dfc69230c7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/error.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class error { - var code: StringAtom? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/error2.swift b/apps/roster/priv/macbert/Model/error2.swift deleted file mode 100644 index 12818a9ed0ceb4db43172c8142096db3e9cc22c7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/error2.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class error2 { - var code: StringAtom? - var src: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/errors.swift b/apps/roster/priv/macbert/Model/errors.swift deleted file mode 100644 index 690f3d3ef2baa68d8950e0c2638a4da07ab3f1fa..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/errors.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class errors { - var code: [AnyObject]? - var data: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/hist.swift b/apps/roster/priv/macbert/Model/hist.swift deleted file mode 100644 index f46c4d04da34c4202bef75aacd9fefe81c250acb..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/hist.swift +++ /dev/null @@ -1,13 +0,0 @@ - -class hist { - var id: Int64? - var container: StringAtom? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var feeds: [AnyObject]? - var name: String? - var task: StringAtom? - var docs: [AnyObject]? - var time: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/histo.swift b/apps/roster/priv/macbert/Model/histo.swift deleted file mode 100644 index 8e47f43d730301ac6e81ab8a64ccaf469b5976b7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/histo.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class histo { - var id: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/io.swift b/apps/roster/priv/macbert/Model/io.swift deleted file mode 100644 index 942786a265079202d7996f5448720d7e518dbfaa..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/io.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class io { - var code: AnyObject? - var data: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/iter.swift b/apps/roster/priv/macbert/Model/iter.swift deleted file mode 100644 index 9dc2533f7218d9428ea18acaa0c484718219b202..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/iter.swift +++ /dev/null @@ -1,8 +0,0 @@ - -class iter { - var id: Int64? - var container: StringAtom? - var feed: AnyObject? - var next: Int64? - var prev: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/iterator.swift b/apps/roster/priv/macbert/Model/iterator.swift deleted file mode 100644 index 81dfcdfdd75f67ef97a88848992fac91a8821cc3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/iterator.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class iterator { - var id: Int64? - var container: StringAtom? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var feeds: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/join_application.swift b/apps/roster/priv/macbert/Model/join_application.swift deleted file mode 100644 index 1f859babad463fd70c9e261372fdcf4e5dfba9ab..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/join_application.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class join_application { - var id: Int64? - var name: String? - var data: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/log.swift b/apps/roster/priv/macbert/Model/log.swift deleted file mode 100644 index 5edb7154a92f89ff63202d1f1fdc2306eed9efeb..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/log.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class log { - var id: Int64? - var top: Int64? - var rear: Int64? - var count: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/max_tour.swift b/apps/roster/priv/macbert/Model/max_tour.swift deleted file mode 100644 index e34af7549734e2827332a9279af3c6b8d4207f1f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/max_tour.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class max_tour { - var count: Int64? - var joined: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/messageEvent.swift b/apps/roster/priv/macbert/Model/messageEvent.swift deleted file mode 100644 index 6dc3793443066623ada6623e3b5aa617af25e01f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/messageEvent.swift +++ /dev/null @@ -1,8 +0,0 @@ - -class messageEvent { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var payload: String? - var timeout: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/mqi.swift b/apps/roster/priv/macbert/Model/mqi.swift deleted file mode 100644 index 66aebc73220bc7d3289da7004491ab4d21d857c7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/mqi.swift +++ /dev/null @@ -1,6 +0,0 @@ - -class mqi { - var feed_id: muc? - var query: String? - var status: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/muc.swift b/apps/roster/priv/macbert/Model/muc.swift deleted file mode 100644 index 2316494748c79fc42d24aed5b73cba9e37242b54..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/muc.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class muc { - var name: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/ok.swift b/apps/roster/priv/macbert/Model/ok.swift deleted file mode 100644 index 935a071b5b40b4fd62091ece517ee162f2d96ed2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/ok.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class ok { - var code: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/ok2.swift b/apps/roster/priv/macbert/Model/ok2.swift deleted file mode 100644 index 2f2c76cbd07180c4d25cdefe7d11a28a6a45fe25..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/ok2.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class ok2 { - var code: StringAtom? - var src: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/operation.swift b/apps/roster/priv/macbert/Model/operation.swift deleted file mode 100644 index 5525550ed3b03df34cfc477f360aa416465207bd..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/operation.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class operation { - var id: Int64? - var container: StringAtom? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var feeds: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/p2p.swift b/apps/roster/priv/macbert/Model/p2p.swift deleted file mode 100644 index 326162f9e955f4eed25faa26bf5917efc79092e8..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/p2p.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class p2p { - var from: String? - var to: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/proc.swift b/apps/roster/priv/macbert/Model/proc.swift deleted file mode 100644 index 91b8f6462c59251b1bf79041f57015578501db6b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/proc.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class proc { - var id: Int64? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/process.swift b/apps/roster/priv/macbert/Model/process.swift deleted file mode 100644 index 0069d0df142f5b2c523cbc5f0c4f6c0ec491b8f2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/process.swift +++ /dev/null @@ -1,25 +0,0 @@ - -class process { - var id: Int64? - var container: StringAtom? - var feed_id: AnyObject? - var prev: Int64? - var next: Int64? - var feeds: [AnyObject]? - var name: String? - var roles: [AnyObject]? - var tasks: [AnyObject]? - var events: [AnyObject]? - var hist: AnyObject? - var flows: [sequenceFlow]? - var rules: AnyObject? - var docs: [AnyObject]? - var options: AnyObject? - var task: StringAtom? - var timer: String? - var notifications: AnyObject? - var result: String? - var started: [AnyObject]? - var beginEvent: StringAtom? - var endEvent: StringAtom? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/push.swift b/apps/roster/priv/macbert/Model/push.swift deleted file mode 100644 index 15ffd0257ce9af131070a91c2a4c10a852107ff7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/push.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class push { - var model: AnyObject? - var type: String? - var title: String? - var alert: String? - var badge: Int64? - var sound: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/reader.swift b/apps/roster/priv/macbert/Model/reader.swift deleted file mode 100644 index b1e34c1dba1401b4012a651a09c148b3125efbcc..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/reader.swift +++ /dev/null @@ -1,9 +0,0 @@ - -class reader { - var id: AnyObject? - var pos: Int64? - var cache: Int64? - var args: AnyObject? - var feed: AnyObject? - var dir: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/receiveTask.swift b/apps/roster/priv/macbert/Model/receiveTask.swift deleted file mode 100644 index bdb436a8e596c213c7fccfd4a6dca1ff7f0c871b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/receiveTask.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class receiveTask { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var roles: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/sequenceFlow.swift b/apps/roster/priv/macbert/Model/sequenceFlow.swift deleted file mode 100644 index 2a0e73d3bb04b43e25c018807bba3b3cd1e4f2ae..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/sequenceFlow.swift +++ /dev/null @@ -1,5 +0,0 @@ - -class sequenceFlow { - var source: StringAtom? - var target: AnyObject? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/serviceTask.swift b/apps/roster/priv/macbert/Model/serviceTask.swift deleted file mode 100644 index 6927e6da445ff90b66dce59c1b1b4d0ddbd840e2..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/serviceTask.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class serviceTask { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var roles: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/task.swift b/apps/roster/priv/macbert/Model/task.swift deleted file mode 100644 index b14868fa77c253ac2641ea11d349359cb52b6f3a..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/task.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class task { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var roles: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/timeoutEvent.swift b/apps/roster/priv/macbert/Model/timeoutEvent.swift deleted file mode 100644 index 422e1c9bd079feb755c23e631929d35307d3845f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/timeoutEvent.swift +++ /dev/null @@ -1,11 +0,0 @@ - -class timeoutEvent { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var payload: String? - var timeout: [AnyObject]? - var timeDate: String? - var timeDuration: String? - var timeCycle: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/tour_list.swift b/apps/roster/priv/macbert/Model/tour_list.swift deleted file mode 100644 index a1d556b228797af46be383e04389cc99e084c8f5..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/tour_list.swift +++ /dev/null @@ -1,4 +0,0 @@ - -class tour_list { - var users: [join_application]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/userTask.swift b/apps/roster/priv/macbert/Model/userTask.swift deleted file mode 100644 index ba5eb207eda371d28c2b08ab3ce4647d9c1e2173..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/userTask.swift +++ /dev/null @@ -1,7 +0,0 @@ - -class userTask { - var name: StringAtom? - var module: StringAtom? - var prompt: [AnyObject]? - var roles: String? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Model/writer.swift b/apps/roster/priv/macbert/Model/writer.swift deleted file mode 100644 index 2aece090e6d3650cf441eb40b044365432367761..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Model/writer.swift +++ /dev/null @@ -1,8 +0,0 @@ - -class writer { - var id: AnyObject? - var count: Int64? - var cache: [AnyObject]? - var args: AnyObject? - var first: [AnyObject]? -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Source/Bert.swift b/apps/roster/priv/macbert/Source/Bert.swift deleted file mode 100644 index f8311775217111c28f26f2255f14e13e897c2235..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Source/Bert.swift +++ /dev/null @@ -1,693 +0,0 @@ -// -// AppDelegate.swift -// Nynja -// -// Created by Anton Makarov on 15.05.17. -// Copyright © 2017 TecSynt Solutions. All rights reserved. -// - -import Foundation - -enum BertError: Error { - case NotValidBertObject - case NotValidErlangTerm - case UnexpectedErlangType - case IntegerValueToLarge - case AtomLengthToLarge -} - -enum BertType: UInt8 { - case Version = 131 - case SmallAtom = 115 - case Atom = 100 - case Binary = 109 - case SmallInteger = 97 - case Integer = 98 - case SmallBig = 110 - // case LargetBig = 111 - // case Float = 99 - case NewFloat = 70 - case String = 107 - // case Port = 102 - // case Pid = 103 - case SmallTuple = 104 - case LargeTuple = 105 - case List = 108 - // case Reference = 101 - // case NewReference = 114 - case Nil = 106 -} - -class BertObject{ - var type: UInt8 = 0 - - var description : String { - get { - return "BertObject" - } - } -} - -class BertAtom: BertObject { - var value = "" - - init (fromString string: String) { - value = string - } - - override var description : String { - get { - if value == "" { - return "[]" - } - return value - } - } -} - -class BertBool: BertObject { - var value: Bool - - init (fromBool b: Bool) { - value = b - } - override var description : String { - get { - if value.description == "" { - return "[]" - } - return value.description - } - } -} - -class BertUndefined: BertAtom { - init () { - super.init(fromString: "undefined") - } - - override var description : String { - get { - if value.description == "" { - return "[]" - } - return value.description - } - } -} - -class BertBinary: BertObject { - var value: NSData - - init (fromNSData d: NSData) { - value = d - } - - override var description : String { - get { - let d = String(data: value as Data, encoding: String.Encoding.utf8) - return d ?? "__Can't GET data__" - } - } -} - -class BertNumber: BertObject { - var value: Int64 - - init (fromUInt8 i: UInt8) { - value = Int64(i) - } - - init (fromInt32 i: Int32) { - value = Int64(i) - } - - init (fromInt64 i: Int64) { - value = i - } - - override var description : String { - get { - return value.description - } - } -} - -class BertFloat: BertObject { - var value: Double - - init (fromDouble d: Double) { - value = d - } - override var description : String { - get { - return value.description - } - } -} - -class BertNil: BertObject { - - override var description : String { - get { - return "NIL" - } - } -} - -class BertString: BertObject { - var value: String - - init (fromString s: String) { - value = s - } - - override var description : String { - get { - return value - } - } -} - -class BertTuple: BertObject { - var elements: [BertObject] - - override var description : String { - get { - var res = "{" - for i in 0.. NSData { - let length = try getEncodeSize(object: object) - var offset: Int = 0 - var data = [UInt8](repeating: 0, count: length + 1) - - data[offset] = BertType.Version.rawValue - offset += 1 - try encodeInner(object: object, data: &data, offset: &offset) - - return NSData(bytes: data, length: length + 1) - } - - class func getObjectClassName(object: BertObject) -> String { - let className = NSStringFromClass(object_getClass(object)!) - let classNameArr = className.components(separatedBy: ".") - - return classNameArr.last! - } - - class func getEncodeSize (object: BertObject) throws -> Int { - switch getObjectClassName(object: object) { - case "BertBool": - let bool = (object as! BertBool) - return 1 + 2 + (bool.value ? 4 : 5) - case "BertUndefined": - return 1 + 2 + 9 - case "BertAtom": - let atom = (object as! BertAtom) - return 1 + 2 + atom.value.characters.count - case "BertBinary": - let binary = (object as! BertBinary) - return 1 + 4 + binary.value.length - case "BertNil": - return 1 - case "BertNumber": - let number = (object as! BertNumber) - if number.value >= 0 && number.value <= 255 { - return 1 + 1 - } - if number.value >= -2147483648 && number.value <= 2147483647 { - return 1 + 4 - } - return 1 + 1 + 8 - case "BertFloat": - return 1 + 8 - case "BertString": - // TODO: implement encoding for length > 0xFF - let string = (object as! BertString) - return 1 + 2 + string.value.characters.count - case "BertTuple": - let tuple = (object as! BertTuple) - var n = 0 - for element in tuple.elements { - n += try getEncodeSize(object: element) - } - return 1 + (tuple.elements.count <= 255 ? 1 : 4) + n - case "BertList": - let list = (object as! BertList) - var n = 0 - for element in list.elements { - n += try getEncodeSize(object: element) - } - return 1 + 4 + 1 + n - default: - throw BertError.UnexpectedErlangType - } - } - - class func encodeInner(object: BertObject, data: inout [UInt8], offset: inout Int) throws { - switch getObjectClassName(object: object) { - case "BertAtom": encodeAtom(atom: object as! BertAtom, data: &data, offset: &offset) - case "BertBool": encodeBool(bool: object as! BertBool, data: &data, offset: &offset) - case "BertUndefined": encodeAtom(atom: object as! BertUndefined, data: &data, offset: &offset) - case "BertBinary": encodeBinary(binary: object as! BertBinary, data: &data, offset: &offset) - case "BertNumber": encodeNumber(number: object as! BertNumber, data: &data, offset: &offset) - case "BertFloat": encodeFloat(float: object as! BertFloat, data: &data, offset: &offset) - case "BertString": encodeString(string: object as! BertString, data: &data, offset: &offset) - case "BertTuple": try encodeTuple(tuple: object as! BertTuple, data: &data, offset: &offset) - case "BertList": try encodeList(list: object as! BertList, data: &data, offset: &offset) - case "BertNil": encodeNil(data: &data, offset: &offset) - default: - throw BertError.UnexpectedErlangType - } - } - - class func encodeAtom(atom: BertAtom, data: inout [UInt8], offset: inout Int) { - let length = UInt16(atom.value.characters.count) - data[offset] = BertType.Atom.rawValue - offset += 1 - writeUInt16(i: length, data: &data, offset: &offset) - - memcpy(&data[offset], (atom.value as NSString).utf8String, Int(length)) - offset += Int(length) - } - - class func encodeBool(bool: BertBool, data: inout [UInt8], offset: inout Int) { - let atom = BertAtom(fromString: (bool.value ? "true" : "false")) - encodeAtom(atom: atom, data: &data, offset: &offset) - } - - class func encodeNil(data: inout [UInt8], offset: inout Int) { - data[offset] = BertType.Nil.rawValue - offset += 1 - // writeUInt16(i: 2, data: &data, offset: &offset) - - //memcpy(&data[offset], (atom.value as NSString).utf8String, 1) - //offset += 1 - } - - class func encodeBinary(binary: BertBinary, data: inout [UInt8], offset: inout Int) { - data[offset] = BertType.Binary.rawValue - offset += 1 - let length = UInt32(binary.value.length) - - writeUInt32(i: length, data: &data, offset: &offset) - - memcpy(&data[offset], binary.value.bytes, Int(length)) - offset += Int(length) - } - - class func encodeNumber(number: BertNumber, data: inout [UInt8], offset: inout Int) { - if number.value >= 0 && number.value <= 255 { - data[offset] = BertType.SmallInteger.rawValue - offset += 1 - data[offset] = UInt8(number.value) - offset += 1 - } else if number.value >= -2147483648 && number.value <= 2147483647 { - data[offset] = BertType.Integer.rawValue - offset += 1 - writeUInt32(i: UInt32(number.value), data: &data, offset: &offset) - } else { - data[offset] = BertType.SmallBig.rawValue - offset += 1 - var i: UInt64 = UInt64(number.value < 0 ? -number.value : number.value) - var n = 0 - var pos = offset + 2 //arity, sign - - while (i > 0) { - data[pos] = UInt8(i % 256) - pos += 1 - i = UInt64(floor(Double(i / 256))) - n += 1 - } - data[offset] = UInt8(n) - offset += 1 - data[offset] = UInt8(Int(number.value < 0 ? 1:0)) - offset += n - } - } - - class func encodeFloat(float: BertFloat, data: inout [UInt8], offset: inout Int) { - data[offset] = BertType.NewFloat.rawValue - offset += 1 - let bytes = withUnsafePointer(to: &float.value) { - $0.withMemoryRebound(to: UInt8.self, capacity: 1, { - Array(UnsafeBufferPointer(start: $0, count: MemoryLayout.size)) - }) - } - var i = UnsafePointer(bytes).withMemoryRebound(to: UInt64.self, capacity: 1) { - $0.pointee - }.bigEndian - - memcpy(&data[offset],&i,MemoryLayout.size) - - offset += 8 - } - - class func encodeString(string: BertString, data: inout [UInt8], offset: inout Int) { - data[offset] = BertType.String.rawValue - offset += 1 - writeUInt16(i: UInt16(string.value.characters.count), data: &data, offset: &offset) - - memcpy(&data[offset], (string.value as NSString).utf8String, string.value.characters.count) - offset += string.value.characters.count - } - - class func encodeTuple(tuple: BertTuple, data: inout [UInt8], offset: inout Int) throws { - if tuple.elements.count <= 255 { - data[offset] = BertType.SmallTuple.rawValue - offset += 1 - data[offset] = UInt8(tuple.elements.count) - offset += 1 - } else { - data[offset] = BertType.LargeTuple.rawValue - offset += 1 - writeUInt32(i: UInt32(tuple.elements.count), data: &data, offset: &offset) - } - - for element in tuple.elements { - try encodeInner(object: element, data: &data, offset: &offset) - } - } - - class func encodeList(list: BertList, data: inout [UInt8], offset: inout Int) throws { - data[offset] = BertType.List.rawValue - offset += 1 - writeUInt32(i: UInt32(list.elements.count), data: &data, offset: &offset) - - for element in list.elements { - try encodeInner(object: element, data: &data, offset: &offset) - } - data[offset] = BertType.Nil.rawValue - offset += 1 - } - - class func writeUInt16(i: UInt16, data: inout [UInt8], offset: inout Int) { - data[offset] = UInt8((i & 0xFF00) >> 8) - offset += 1 - data[offset] = UInt8(i & 0xFF) - offset += 1 - } - - class func writeUInt32(i: UInt32, data: inout [UInt8], offset: inout Int) { - data[offset] = UInt8((i & 0xFF000000) >> 24) - offset += 1 - data[offset] = UInt8((i & 0xFF0000) >> 16) - offset += 1 - data[offset] = UInt8((i & 0xFF00) >> 8) - offset += 1 - data[offset] = UInt8(i & 0xFF) - offset += 1 - } - - class func decode (data: NSData) throws -> BertObject { - if data.length == 0 { - return BertUndefined() - } - - var offset = 0 - var buffer = [UInt8](repeating: 0, count: 1) - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let header = buffer[0] - - if header != BertType.Version.rawValue { - throw BertError.NotValidErlangTerm - } - - var printBuffer = [UInt8](repeating: 0, count: data.length) - data.getBytes(&printBuffer, length: data.length) - - return try decodeInner(data: data, offset: &offset) - } - - class func decodeInner (data: NSData, offset: inout Int) throws -> BertObject { - var buffer = [UInt8](repeating: 0, count: 1) - - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - let type = buffer[0] - - switch type { - case BertType.Atom.rawValue: return try decodeAtom(data: data, offset: &offset) - case BertType.SmallAtom.rawValue: return try decodeAtom(data: data, offset: &offset) - case BertType.Binary.rawValue: return decodeBinary(data: data, offset: &offset) - case BertType.SmallInteger.rawValue: return try decodeNumber(data: data, offset: &offset) - case BertType.Integer.rawValue: return try decodeNumber(data: data, offset: &offset) - case BertType.SmallBig.rawValue: return try decodeNumber(data: data, offset: &offset) - case BertType.NewFloat.rawValue: return decodeDouble(data: data, offset: &offset) - case BertType.String.rawValue: return decodeString(data: data, offset: &offset) - case BertType.SmallTuple.rawValue: return try decodeTuple(data: data, offset: &offset) - case BertType.LargeTuple.rawValue: return try decodeTuple(data: data, offset: &offset) - case BertType.List.rawValue: return try decodeList(data: data, offset: &offset) - case BertType.Nil.rawValue: return decodeNil(data: data, offset: &offset) - default: - throw BertError.UnexpectedErlangType - } - } - - class func decodeAtom(data: NSData, offset: inout Int) throws -> BertObject { - var buffer = [UInt8](repeating: 0, count: 2) - - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let type = buffer[0] - var n: Int - - switch type { - case BertType.Atom.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 2)) - offset += 2 - let u16 = UnsafePointer(buffer).withMemoryRebound(to: UInt16.self, capacity: 1) { - $0.pointee - } - n = Int(u16.bigEndian) - case BertType.SmallAtom.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - n = Int(buffer[0]) - default: - throw BertError.UnexpectedErlangType - } - - var buffer1 = [UInt8](repeating: 0, count: n) - data.getBytes(&buffer1, range: NSMakeRange(offset, n)) - offset += n - - let value = NSString(bytes: buffer1, length: n, encoding: String.Encoding.utf8.rawValue)! as String - - switch value { - case "true": return BertBool(fromBool: true) - case "false": return BertBool(fromBool: false) - case "undefined": return BertUndefined() - default: return BertAtom(fromString: value) - } - } - - class func decodeBinary(data: NSData, offset: inout Int) -> BertObject { - offset += 1 - - var buffer = [UInt8](repeating: 0, count: 4) - - data.getBytes(&buffer, range: NSMakeRange(offset, 4)) - offset += 4 - let u16 = UnsafePointer(buffer).withMemoryRebound(to: UInt32.self, capacity: 1) { - $0.pointee - } - let length = Int(u16.bigEndian) - var dataBuffer = [UInt8](repeating: 0, count: length) - data.getBytes(&dataBuffer, range: NSMakeRange(offset, length)) - offset += length - - return BertBinary(fromNSData: NSData(bytes: dataBuffer, length: length)) - } - - class func decodeNumber(data: NSData, offset: inout Int) throws -> BertObject { - var buffer = [UInt8](repeating: 0, count: 10) - - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let type = buffer[0] - - switch type { - case BertType.SmallInteger.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let value = buffer[0] - return BertNumber(fromUInt8: value) - case BertType.Integer.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 4)) - offset += 4 - let u16 = UnsafePointer(buffer).withMemoryRebound(to: UInt32.self, capacity: 1) { - $0.pointee - } - let value = Int32(u16.bigEndian) - return BertNumber(fromInt32: value) - case BertType.SmallBig.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let arity = buffer[0] - if (arity > 7) { - throw BertError.IntegerValueToLarge - } - - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let sign = buffer[0] - - var value: Int64 = 0 - var n: Int64 = 1 - for i in 0...arity-1 { - data.getBytes(&buffer, range:NSMakeRange(offset, 1)) - offset += 1 - let v = Int64(buffer[0]) - value += v * n - if i+1 != arity { - n *= 256 - } - } - - if sign > 0 { - value = -value - } - return BertNumber(fromInt64: Int64(value)) - default: - throw BertError.UnexpectedErlangType - } - } - - class func decodeDouble(data: NSData, offset: inout Int) -> BertObject { - offset += 1 - var buffer = [UInt8](repeating: 0, count: 8) - data.getBytes(&buffer, range: NSMakeRange(offset, 8)) - offset += 8 - var i = Int64(UnsafePointer(buffer).withMemoryRebound(to: UInt64.self, capacity: 1) { - $0.pointee - }.bigEndian) - var d: Double = 0 - memcpy(&d, &i, MemoryLayout.size) - return BertFloat(fromDouble: d) - } - - class func decodeString(data: NSData, offset: inout Int) -> BertObject { - offset += 1 - - var buffer = [UInt8](repeating: 0, count: 2) - data.getBytes(&buffer, range: NSMakeRange(offset, 2)) - offset += 2 - let length = Int(UnsafePointer(buffer).withMemoryRebound(to: UInt16.self, capacity: 1) { - $0.pointee - }.bigEndian) - - var stringBuffer = [UInt8](repeating: 0, count: length) - - data.getBytes(&stringBuffer, range: NSMakeRange(offset, length)) - offset += length - - return BertString(fromString: String(bytes: stringBuffer, encoding: String.Encoding.utf8)!) - } - - class func decodeTuple(data: NSData, offset: inout Int) throws -> BertObject { - var buffer = [UInt8](repeating: 0, count: 4) - var n: Int - - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - let type = buffer[0] - - switch type { - case BertType.SmallTuple.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - offset += 1 - n = Int(buffer[0]) - case BertType.LargeTuple.rawValue: - data.getBytes(&buffer, range: NSMakeRange(offset, 4)) - offset += 4 - n = Int(UnsafePointer(buffer).withMemoryRebound(to: UInt32.self, capacity: 1) { - $0.pointee - }.bigEndian) - default: - throw BertError.UnexpectedErlangType - } - - var elements = [BertObject]() - if n > 0 { - for _ in 0...n-1 { - elements.append(try decodeInner(data: data, offset: &offset)) - } - } - - return BertTuple(fromElements: elements) - } - - class func decodeList(data: NSData, offset: inout Int) throws -> BertObject { - offset+=1 - - var buffer = [UInt8](repeating: 0, count: 4) - - data.getBytes(&buffer, range: NSMakeRange(offset, 4)) - offset += 4 - let n = Int(UnsafePointer(buffer).withMemoryRebound(to: UInt32.self, capacity: 1) { - $0.pointee - }.bigEndian) - var elements = [BertObject]() - if n > 0 { - for _ in 0...n-1 { - elements.append(try decodeInner(data: data, offset: &offset)) - } - } - - if data.length > offset { - data.getBytes(&buffer, range: NSMakeRange(offset, 1)) - if (buffer[0] == BertType.Nil.rawValue) { - offset += 1 - } - } - - return BertList(fromElements: elements) - } - - class func decodeNil(data: NSData, offset: inout Int) -> BertObject { - offset += 1 - return BertNil() - } -} diff --git a/apps/roster/priv/macbert/Source/Decoder.swift b/apps/roster/priv/macbert/Source/Decoder.swift deleted file mode 100644 index 7f92a585e4da7c9578c4cdd64fcc33755dd9b851..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Source/Decoder.swift +++ /dev/null @@ -1,364 +0,0 @@ -func parseObject(name: String, body:[Model], tuple: BertTuple) -> AnyObject? -{ - switch name { - case "chain": - if body.count != 6 { return nil } - let a_chain = chain() - a_chain.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_chain.top = body[1].parse(bert: tuple.elements[2]) as? Int64 - a_chain.rear = body[2].parse(bert: tuple.elements[3]) as? Int64 - a_chain.count = body[3].parse(bert: tuple.elements[4]) as? Int64 - return a_chain - case "push": - if body.count != 6 { return nil } - let a_push = push() - a_push.model = body[0].parse(bert: tuple.elements[1]) as? AnyObject - a_push.type = body[1].parse(bert: tuple.elements[2]) as? String - a_push.title = body[2].parse(bert: tuple.elements[3]) as? String - a_push.alert = body[3].parse(bert: tuple.elements[4]) as? String - a_push.badge = body[4].parse(bert: tuple.elements[5]) as? Int64 - a_push.sound = body[5].parse(bert: tuple.elements[6]) as? String - return a_push - case "Search": - if body.count != 6 { return nil } - let a_Search = Search() - a_Search.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_Search.ref = body[1].parse(bert: tuple.elements[2]) as? String - a_Search.field = body[2].parse(bert: tuple.elements[3]) as? String - a_Search.type = body[3].parse(bert: tuple.elements[4]) as? AnyObject - a_Search.value = body[4].parse(bert: tuple.elements[5]) as? [AnyObject] - a_Search.status = body[5].parse(bert: tuple.elements[6]) as? AnyObject - return a_Search - case "p2p": - if body.count != 2 { return nil } - let a_p2p = p2p() - a_p2p.from = body[0].parse(bert: tuple.elements[1]) as? String - a_p2p.to = body[1].parse(bert: tuple.elements[2]) as? String - return a_p2p - case "muc": - if body.count != 1 { return nil } - let a_muc = muc() - a_muc.name = body[0].parse(bert: tuple.elements[1]) as? String - return a_muc - case "mqi": - if body.count != 3 { return nil } - let a_mqi = mqi() - a_mqi.feed_id = body[0].parse(bert: tuple.elements[1]) as? muc - a_mqi.query = body[1].parse(bert: tuple.elements[2]) as? String - a_mqi.status = body[2].parse(bert: tuple.elements[3]) as? AnyObject - return a_mqi - case "Feature": - if body.count != 4 { return nil } - let a_Feature = Feature() - a_Feature.id = body[0].parse(bert: tuple.elements[1]) as? String - a_Feature.key = body[1].parse(bert: tuple.elements[2]) as? String - a_Feature.value = body[2].parse(bert: tuple.elements[3]) as? String - a_Feature.group = body[3].parse(bert: tuple.elements[4]) as? String - return a_Feature - case "Service": - if body.count != 7 { return nil } - let a_Service = Service() - a_Service.id = body[0].parse(bert: tuple.elements[1]) as? String - a_Service.type = body[1].parse(bert: tuple.elements[2]) as? AnyObject - a_Service.data = body[2].parse(bert: tuple.elements[3]) as? AnyObject - a_Service.login = body[3].parse(bert: tuple.elements[4]) as? String - a_Service.password = body[4].parse(bert: tuple.elements[5]) as? String - a_Service.expiration = body[5].parse(bert: tuple.elements[6]) as? Int64 - a_Service.status = body[6].parse(bert: tuple.elements[7]) as? AnyObject - return a_Service - case "Member": - if body.count != 17 { return nil } - let a_Member = Member() - a_Member.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_Member.container = body[1].parse(bert: tuple.elements[2]) as? AnyObject - a_Member.feed_id = body[2].parse(bert: tuple.elements[3]) as? AnyObject - a_Member.prev = body[3].parse(bert: tuple.elements[4]) as? Int64 - a_Member.next = body[4].parse(bert: tuple.elements[5]) as? Int64 - a_Member.feeds = body[5].parse(bert: tuple.elements[6]) as? [AnyObject] - a_Member.phone_id = body[6].parse(bert: tuple.elements[7]) as? String - a_Member.avatar = body[7].parse(bert: tuple.elements[8]) as? String - a_Member.names = body[8].parse(bert: tuple.elements[9]) as? String - a_Member.surnames = body[9].parse(bert: tuple.elements[10]) as? String - a_Member.alias = body[10].parse(bert: tuple.elements[11]) as? String - a_Member.reader = body[11].parse(bert: tuple.elements[12]) as? Int64 - a_Member.update = body[12].parse(bert: tuple.elements[13]) as? Int64 - a_Member.settings = body[13].parse(bert: tuple.elements[14]) as? [Feature] - a_Member.services = body[14].parse(bert: tuple.elements[15]) as? [Service] - a_Member.presence = body[15].parse(bert: tuple.elements[16]) as? AnyObject - a_Member.status = body[16].parse(bert: tuple.elements[17]) as? AnyObject - return a_Member - case "Desc": - if body.count != 5 { return nil } - let a_Desc = Desc() - a_Desc.id = body[0].parse(bert: tuple.elements[1]) as? String - a_Desc.mime = body[1].parse(bert: tuple.elements[2]) as? String - a_Desc.payload = body[2].parse(bert: tuple.elements[3]) as? String - a_Desc.parentid = body[3].parse(bert: tuple.elements[4]) as? String - a_Desc.data = body[4].parse(bert: tuple.elements[5]) as? [Feature] - return a_Desc - case "StickerPack": - if body.count != 9 { return nil } - let a_StickerPack = StickerPack() - a_StickerPack.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_StickerPack.name = body[1].parse(bert: tuple.elements[2]) as? String - a_StickerPack.keywords = body[2].parse(bert: tuple.elements[3]) as? [AnyObject] - a_StickerPack.description = body[3].parse(bert: tuple.elements[4]) as? String - a_StickerPack.author = body[4].parse(bert: tuple.elements[5]) as? String - a_StickerPack.stickers = body[5].parse(bert: tuple.elements[6]) as? [Desc] - a_StickerPack.created = body[6].parse(bert: tuple.elements[7]) as? Int64 - a_StickerPack.updated = body[7].parse(bert: tuple.elements[8]) as? Int64 - a_StickerPack.downloaded = body[8].parse(bert: tuple.elements[9]) as? Int64 - return a_StickerPack - case "Message": - if body.count != 16 { return nil } - let a_Message = Message() - a_Message.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_Message.container = body[1].parse(bert: tuple.elements[2]) as? AnyObject - a_Message.feed_id = body[2].parse(bert: tuple.elements[3]) as? AnyObject - a_Message.prev = body[3].parse(bert: tuple.elements[4]) as? Int64 - a_Message.next = body[4].parse(bert: tuple.elements[5]) as? Int64 - a_Message.msg_id = body[5].parse(bert: tuple.elements[6]) as? String - a_Message.from = body[6].parse(bert: tuple.elements[7]) as? String - a_Message.to = body[7].parse(bert: tuple.elements[8]) as? String - a_Message.created = body[8].parse(bert: tuple.elements[9]) as? Int64 - a_Message.files = body[9].parse(bert: tuple.elements[10]) as? [Desc] - a_Message.type = body[10].parse(bert: tuple.elements[11]) as? [AnyObject] - a_Message.link = body[11].parse(bert: tuple.elements[12]) as? AnyObject - a_Message.seenby = body[12].parse(bert: tuple.elements[13]) as? [AnyObject] - a_Message.repliedby = body[13].parse(bert: tuple.elements[14]) as? [AnyObject] - a_Message.mentioned = body[14].parse(bert: tuple.elements[15]) as? [AnyObject] - a_Message.status = body[15].parse(bert: tuple.elements[16]) as? AnyObject - return a_Message - case "Link": - if body.count != 6 { return nil } - let a_Link = Link() - a_Link.id = body[0].parse(bert: tuple.elements[1]) as? String - a_Link.name = body[1].parse(bert: tuple.elements[2]) as? String - a_Link.room_id = body[2].parse(bert: tuple.elements[3]) as? String - a_Link.created = body[3].parse(bert: tuple.elements[4]) as? Int64 - a_Link.type = body[4].parse(bert: tuple.elements[5]) as? AnyObject - a_Link.status = body[5].parse(bert: tuple.elements[6]) as? AnyObject - return a_Link - case "Room": - if body.count != 18 { return nil } - let a_Room = Room() - a_Room.id = body[0].parse(bert: tuple.elements[1]) as? String - a_Room.name = body[1].parse(bert: tuple.elements[2]) as? String - a_Room.links = body[2].parse(bert: tuple.elements[3]) as? [Link] - a_Room.description = body[3].parse(bert: tuple.elements[4]) as? String - a_Room.settings = body[4].parse(bert: tuple.elements[5]) as? [Feature] - a_Room.members = body[5].parse(bert: tuple.elements[6]) as? [Member] - a_Room.admins = body[6].parse(bert: tuple.elements[7]) as? [Member] - a_Room.data = body[7].parse(bert: tuple.elements[8]) as? [Desc] - a_Room.type = body[8].parse(bert: tuple.elements[9]) as? AnyObject - a_Room.tos = body[9].parse(bert: tuple.elements[10]) as? String - a_Room.tos_update = body[10].parse(bert: tuple.elements[11]) as? Int64 - a_Room.unread = body[11].parse(bert: tuple.elements[12]) as? Int64 - a_Room.mentions = body[12].parse(bert: tuple.elements[13]) as? [AnyObject] - a_Room.readers = body[13].parse(bert: tuple.elements[14]) as? [AnyObject] - a_Room.last_msg = body[14].parse(bert: tuple.elements[15]) as? AnyObject - a_Room.update = body[15].parse(bert: tuple.elements[16]) as? Int64 - a_Room.created = body[16].parse(bert: tuple.elements[17]) as? Int64 - a_Room.status = body[17].parse(bert: tuple.elements[18]) as? AnyObject - return a_Room - case "Tag": - if body.count != 4 { return nil } - let a_Tag = Tag() - a_Tag.roster_id = body[0].parse(bert: tuple.elements[1]) as? String - a_Tag.name = body[1].parse(bert: tuple.elements[2]) as? String - a_Tag.color = body[2].parse(bert: tuple.elements[3]) as? String - a_Tag.status = body[3].parse(bert: tuple.elements[4]) as? AnyObject - return a_Tag - case "Star": - if body.count != 6 { return nil } - let a_Star = Star() - a_Star.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_Star.client_id = body[1].parse(bert: tuple.elements[2]) as? String - a_Star.roster_id = body[2].parse(bert: tuple.elements[3]) as? Int64 - a_Star.message = body[3].parse(bert: tuple.elements[4]) as? Message - a_Star.tags = body[4].parse(bert: tuple.elements[5]) as? [Tag] - a_Star.status = body[5].parse(bert: tuple.elements[6]) as? AnyObject - return a_Star - case "Typing": - if body.count != 2 { return nil } - let a_Typing = Typing() - a_Typing.phone_id = body[0].parse(bert: tuple.elements[1]) as? String - a_Typing.comments = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_Typing - case "Contact": - if body.count != 14 { return nil } - let a_Contact = Contact() - a_Contact.phone_id = body[0].parse(bert: tuple.elements[1]) as? String - a_Contact.avatar = body[1].parse(bert: tuple.elements[2]) as? String - a_Contact.names = body[2].parse(bert: tuple.elements[3]) as? String - a_Contact.surnames = body[3].parse(bert: tuple.elements[4]) as? String - a_Contact.nick = body[4].parse(bert: tuple.elements[5]) as? String - a_Contact.reader = body[5].parse(bert: tuple.elements[6]) as? AnyObject - a_Contact.unread = body[6].parse(bert: tuple.elements[7]) as? Int64 - a_Contact.last_msg = body[7].parse(bert: tuple.elements[8]) as? Message - a_Contact.update = body[8].parse(bert: tuple.elements[9]) as? Int64 - a_Contact.created = body[9].parse(bert: tuple.elements[10]) as? Int64 - a_Contact.settings = body[10].parse(bert: tuple.elements[11]) as? [Feature] - a_Contact.services = body[11].parse(bert: tuple.elements[12]) as? [Service] - a_Contact.presence = body[12].parse(bert: tuple.elements[13]) as? AnyObject - a_Contact.status = body[13].parse(bert: tuple.elements[14]) as? AnyObject - return a_Contact - case "ExtendedStar": - if body.count != 2 { return nil } - let a_ExtendedStar = ExtendedStar() - a_ExtendedStar.star = body[0].parse(bert: tuple.elements[1]) as? Star - a_ExtendedStar.from = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_ExtendedStar - case "Auth": - if body.count != 14 { return nil } - let a_Auth = Auth() - a_Auth.client_id = body[0].parse(bert: tuple.elements[1]) as? String - a_Auth.dev_key = body[1].parse(bert: tuple.elements[2]) as? String - a_Auth.user_id = body[2].parse(bert: tuple.elements[3]) as? String - a_Auth.phone = body[3].parse(bert: tuple.elements[4]) as? AnyObject - a_Auth.token = body[4].parse(bert: tuple.elements[5]) as? String - a_Auth.type = body[5].parse(bert: tuple.elements[6]) as? StringAtom - a_Auth.sms_code = body[6].parse(bert: tuple.elements[7]) as? String - a_Auth.attempts = body[7].parse(bert: tuple.elements[8]) as? Int64 - a_Auth.services = body[8].parse(bert: tuple.elements[9]) as? [AnyObject] - a_Auth.settings = body[9].parse(bert: tuple.elements[10]) as? [Feature] - a_Auth.push = body[10].parse(bert: tuple.elements[11]) as? String - a_Auth.os = body[11].parse(bert: tuple.elements[12]) as? AnyObject - a_Auth.created = body[12].parse(bert: tuple.elements[13]) as? Int64 - a_Auth.last_online = body[13].parse(bert: tuple.elements[14]) as? Int64 - return a_Auth - case "Roster": - if body.count != 13 { return nil } - let a_Roster = Roster() - a_Roster.id = body[0].parse(bert: tuple.elements[1]) as? AnyObject - a_Roster.names = body[1].parse(bert: tuple.elements[2]) as? String - a_Roster.surnames = body[2].parse(bert: tuple.elements[3]) as? String - a_Roster.email = body[3].parse(bert: tuple.elements[4]) as? String - a_Roster.nick = body[4].parse(bert: tuple.elements[5]) as? String - a_Roster.userlist = body[5].parse(bert: tuple.elements[6]) as? [AnyObject] - a_Roster.roomlist = body[6].parse(bert: tuple.elements[7]) as? [Room] - a_Roster.favorite = body[7].parse(bert: tuple.elements[8]) as? [Star] - a_Roster.tags = body[8].parse(bert: tuple.elements[9]) as? [Tag] - a_Roster.phone = body[9].parse(bert: tuple.elements[10]) as? String - a_Roster.avatar = body[10].parse(bert: tuple.elements[11]) as? String - a_Roster.update = body[11].parse(bert: tuple.elements[12]) as? Int64 - a_Roster.status = body[12].parse(bert: tuple.elements[13]) as? AnyObject - return a_Roster - case "Profile": - if body.count != 8 { return nil } - let a_Profile = Profile() - a_Profile.phone = body[0].parse(bert: tuple.elements[1]) as? String - a_Profile.services = body[1].parse(bert: tuple.elements[2]) as? [Service] - a_Profile.rosters = body[2].parse(bert: tuple.elements[3]) as? [AnyObject] - a_Profile.settings = body[3].parse(bert: tuple.elements[4]) as? [Feature] - a_Profile.update = body[4].parse(bert: tuple.elements[5]) as? Int64 - a_Profile.balance = body[5].parse(bert: tuple.elements[6]) as? Int64 - a_Profile.presence = body[6].parse(bert: tuple.elements[7]) as? AnyObject - a_Profile.status = body[7].parse(bert: tuple.elements[8]) as? AnyObject - return a_Profile - case "Presence": - if body.count != 2 { return nil } - let a_Presence = Presence() - a_Presence.uid = body[0].parse(bert: tuple.elements[1]) as? String - a_Presence.status = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_Presence - case "Friend": - if body.count != 4 { return nil } - let a_Friend = Friend() - a_Friend.phone_id = body[0].parse(bert: tuple.elements[1]) as? String - a_Friend.friend_id = body[1].parse(bert: tuple.elements[2]) as? String - a_Friend.settings = body[2].parse(bert: tuple.elements[3]) as? [Feature] - a_Friend.status = body[3].parse(bert: tuple.elements[4]) as? AnyObject - return a_Friend - case "act": - if body.count != 2 { return nil } - let a_act = act() - a_act.name = body[0].parse(bert: tuple.elements[1]) as? String - a_act.data = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_act - case "Job": - if body.count != 12 { return nil } - let a_Job = Job() - a_Job.id = body[0].parse(bert: tuple.elements[1]) as? Int64 - a_Job.container = body[1].parse(bert: tuple.elements[2]) as? AnyObject - a_Job.feed_id = body[2].parse(bert: tuple.elements[3]) as? act - a_Job.prev = body[3].parse(bert: tuple.elements[4]) as? Int64 - a_Job.next = body[4].parse(bert: tuple.elements[5]) as? Int64 - a_Job.context = body[5].parse(bert: tuple.elements[6]) as? AnyObject - a_Job.proc = body[6].parse(bert: tuple.elements[7]) as? AnyObject - a_Job.time = body[7].parse(bert: tuple.elements[8]) as? Int64 - a_Job.data = body[8].parse(bert: tuple.elements[9]) as? AnyObject - a_Job.events = body[9].parse(bert: tuple.elements[10]) as? [messageEvent] - a_Job.settings = body[10].parse(bert: tuple.elements[11]) as? [Feature] - a_Job.status = body[11].parse(bert: tuple.elements[12]) as? AnyObject - return a_Job - case "History": - if body.count != 6 { return nil } - let a_History = History() - a_History.roster_id = body[0].parse(bert: tuple.elements[1]) as? String - a_History.feed = body[1].parse(bert: tuple.elements[2]) as? AnyObject - a_History.size = body[2].parse(bert: tuple.elements[3]) as? Int64 - a_History.entity_id = body[3].parse(bert: tuple.elements[4]) as? Int64 - a_History.data = body[4].parse(bert: tuple.elements[5]) as? [AnyObject] - a_History.status = body[5].parse(bert: tuple.elements[6]) as? AnyObject - return a_History - case "error": - if body.count != 1 { return nil } - let a_error = error() - a_error.code = body[0].parse(bert: tuple.elements[1]) as? StringAtom - return a_error - case "ok": - if body.count != 1 { return nil } - let a_ok = ok() - a_ok.code = body[0].parse(bert: tuple.elements[1]) as? String - return a_ok - case "error2": - if body.count != 2 { return nil } - let a_error2 = error2() - a_error2.code = body[0].parse(bert: tuple.elements[1]) as? StringAtom - a_error2.src = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_error2 - case "ok2": - if body.count != 2 { return nil } - let a_ok2 = ok2() - a_ok2.code = body[0].parse(bert: tuple.elements[1]) as? StringAtom - a_ok2.src = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_ok2 - case "io": - if body.count != 2 { return nil } - let a_io = io() - a_io.code = body[0].parse(bert: tuple.elements[1]) as? AnyObject - a_io.data = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_io - case "Ack": - if body.count != 2 { return nil } - let a_Ack = Ack() - a_Ack.table = body[0].parse(bert: tuple.elements[1]) as? StringAtom - a_Ack.id = body[1].parse(bert: tuple.elements[2]) as? String - return a_Ack - case "errors": - if body.count != 2 { return nil } - let a_errors = errors() - a_errors.code = body[0].parse(bert: tuple.elements[1]) as? [AnyObject] - a_errors.data = body[1].parse(bert: tuple.elements[2]) as? AnyObject - return a_errors - case "PushService": - if body.count != 6 { return nil } - let a_PushService = PushService() - a_PushService.recipients = body[0].parse(bert: tuple.elements[1]) as? [AnyObject] - a_PushService.id = body[1].parse(bert: tuple.elements[2]) as? String - a_PushService.ttl = body[2].parse(bert: tuple.elements[3]) as? Int64 - a_PushService.module = body[3].parse(bert: tuple.elements[4]) as? String - a_PushService.priority = body[4].parse(bert: tuple.elements[5]) as? String - a_PushService.payload = body[5].parse(bert: tuple.elements[6]) as? String - return a_PushService - case "PublishService": - if body.count != 3 { return nil } - let a_PublishService = PublishService() - a_PublishService.message = body[0].parse(bert: tuple.elements[1]) as? String - a_PublishService.topic = body[1].parse(bert: tuple.elements[2]) as? String - a_PublishService.qos = body[2].parse(bert: tuple.elements[3]) as? Int64 - return a_PublishService - default: return nil - } -} \ No newline at end of file diff --git a/apps/roster/priv/macbert/Source/Encoder.swift b/apps/roster/priv/macbert/Source/Encoder.swift deleted file mode 100644 index ab1e97b3bfcd8d8e09006a4a32ad928f342ec017..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Source/Encoder.swift +++ /dev/null @@ -1,382 +0,0 @@ -// -// Serializer.swift -// NynjaParser -// -// Created by Anton Makarov on 18.07.2017. -// Copyright © 2017 TecSynt Solutions. All rights reserved. -// - -import Foundation - -func serialize(bert: BertObject?) -> [UInt8]? { - if bert != nil { - do { - let bytes = try Bert.encode(object: bert!) - var result = [UInt8](repeating: 0, count: bytes.length) - bytes.getBytes(&result, length: bytes.length) - return result - } catch { - return nil - } - } - return nil -} - -func stringToBertBinary(input: String?) -> BertObject { - if let data = input?.data(using: String.Encoding.utf8) { - let bert = BertBinary(fromNSData: data as NSData) - return bert - } - return BertNil() -} - -func stringToBertAtom(input: StringAtom?) -> BertObject { - if let str = input?.string { - let bert = BertAtom(fromString: str) - return bert - } - return BertNil() -} - -func listFromObjects(input: [T]?) -> BertObject { - if input == nil { - return BertNil() - } else { - if input!.count == 0 { - return BertNil() - } else { - var result = [BertObject]() - for i in input! { - result.append(serialize(object: i as AnyObject)) - } - return BertList(fromElements: result) - } - } -} - -func numberFromInt64(input: Int64?) -> BertObject { - if let id = input { - return BertNumber(fromInt64: Int64(id)) - } else { - return BertNil() - } -} - - -func serialize(object: AnyObject) -> BertTuple { - var items = [BertObject]() - if let instanse = object as? Approve { - items.append(BertAtom(fromString: "Approve")) - items.append(stringToBertBinary(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.user)) - items.append(stringToBertBinary(input: instanse.room)) - } - if let instanse = object as? ok2 { - items.append(BertAtom(fromString: "ok2")) - if let s = instanse.src { - items.append(BertAtom(fromString: s)) - } else { - items.append(BertNil()) - } - items.append(stringToBertAtom(input: instanse.code)) - } - if let instanse = object as? error2 { - items.append(BertAtom(fromString: "error2")) - if let s = instanse.src { - items.append(BertAtom(fromString: s)) - } else { - items.append(BertNil()) - } - items.append(stringToBertAtom(input: instanse.code)) - } - if let instanse = object as? Auth { - items.append(BertAtom(fromString: "Auth")) - items.append(stringToBertBinary(input: instanse.token)) - items.append(stringToBertBinary(input: instanse.dev_key)) - items.append(stringToBertBinary(input: instanse.user_id)) - items.append(stringToBertBinary(input: instanse.phone)) - items.append(stringToBertBinary(input: instanse.client_id)) - items.append(stringToBertAtom(input: instanse.type)) - items.append(stringToBertBinary(input: instanse.sms_code)) - if let atempts = instanse.attempts { - items.append(BertNumber(fromInt64: Int64(atempts))) - } else { - items.append(BertNil()) - } - if let service = instanse.services { - var result = [BertAtom]() - for i in service { - let atom = BertAtom(fromString: i) - result.append(atom) - } - items.append(BertList(fromElements: result)) - } else { - items.append(BertNil()) - } - } - if let instanse = object as? Confirm { - items.append(BertAtom(fromString: "Confirm")) - items.append(stringToBertBinary(input: instanse.id)) - if let rosterId = instanse.roster_id { - items.append(BertNumber(fromInt64: Int64(rosterId))) - } else { - items.append(BertNil()) - } - items.append(stringToBertBinary(input: instanse.friend_id)) - if let atom = instanse.status as? StringAtom { - items.append(stringToBertAtom(input: atom)) - } else { - items.append(BertNil()) - } - } - if let instanse = object as? Contact { - items.append(BertAtom(fromString: "Contact")) - items.append(stringToBertBinary(input: instanse.phone_id)) - items.append(stringToBertBinary(input: instanse.avatar)) - items.append(stringToBertBinary(input: instanse.names)) - items.append(stringToBertBinary(input: instanse.surnames)) - items.append(stringToBertBinary(input: instanse.person_id)) - if let atom = instanse.status as? StringAtom { - items.append(stringToBertAtom(input: atom)) - } else { - items.append(BertNil()) - } - - } - if let instanse = object as? error { - items.append(BertAtom(fromString: "error")) - if let string = instanse.code as? String { - items.append(stringToBertBinary(input: string)) - } else if let string = instanse.code as? StringAtom { - items.append(stringToBertAtom(input: string)) - } else { - items.append(BertNil()) - } - } - if let instanse = object as? Friend { - items.append(BertAtom(fromString: "Friend")) - items.append(stringToBertBinary(input: instanse.id)) - if let rosterId = instanse.roster_id { - items.append(BertNumber(fromInt64: Int64(rosterId))) - } else { - items.append(BertNil()) - } - items.append(stringToBertBinary(input: instanse.friend_id)) - if let atom = instanse.status as? StringAtom { - items.append(stringToBertAtom(input: atom)) - } else { - items.append(BertNil()) - } - - } - if let instanse = object as? History { - items.append(BertAtom(fromString: "History")) - items.append(stringToBertBinary(input: instanse.roster_id)) - items.append(BertNil()) - if let msgs = instanse.data { - if msgs.count == 0 { - items.append(BertNil()) - } else { - var result = [BertTuple]() - for i in msgs { - result.append(serialize(object: i)) - } - items.append(BertList(fromElements: result)) - } - } else { - items.append(BertNil()) - } - if let atom = instanse.status as? StringAtom { - items.append(stringToBertAtom(input: atom)) - } else { - items.append(BertNil()) - } - - } - if let instanse = object as? io { - items.append(BertAtom(fromString: "io")) - if let o = instanse.code as? ok { - items.append(serialize(object: o)) - } else if let err = instanse.code as? error { - items.append(serialize(object: err)) - } else if let o2 = instanse.code as? ok2 { - items.append(serialize(object: o2)) - } else if let err2 = instanse.code as? error2 { - items.append(serialize(object: err2)) - } else { - items.append(BertNil()) - } - if let o = instanse.data as? String { - items.append(stringToBertBinary(input: o)) - /* //TODO: Model(value:Tuple(name:"",body:[ - Model(value:Atom()), - Model(value:Chain(types:[ - Model(value:Binary()), - Model(value:Number())]))]))]))]))} */ - } else { - items.append(BertNil()) - } - } - if let instanse = object as? Join { - items.append(BertAtom(fromString: "Join")) - items.append(stringToBertBinary(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.user)) - items.append(stringToBertBinary(input: instanse.room)) - } - if let instanse = object as? Leave { - items.append(BertAtom(fromString: "Leave")) - items.append(stringToBertBinary(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.user)) - items.append(stringToBertBinary(input: instanse.room)) - } - if let instanse = object as? Message { - //TODO: - items.append(BertAtom(fromString: "Message")) - items.append(numberFromInt64(input: instanse.id)) - items.append(stringToBertAtom(input: instanse.container)) - items.append(BertNil()) - items.append(numberFromInt64(input: instanse.prev)) - items.append(numberFromInt64(input: instanse.next)) - items.append(BertNil()) - items.append(stringToBertBinary(input: instanse.msg_id)) - items.append(stringToBertBinary(input: instanse.from)) - items.append(stringToBertBinary(input: instanse.to)) - items.append(BertNil()) - items.append(BertNil()) - items.append(BertNil()) - items.append(BertNil()) - if let atom = instanse.status as? StringAtom { - items.append(stringToBertAtom(input: atom)) - } else { - items.append(BertNil()) - } - - } - if let instanse = object as? ok { - items.append(BertAtom(fromString: "ok")) - if let string = instanse.code as? String { - items.append(stringToBertBinary(input: string)) - } else if let string = instanse.code as? StringAtom { - items.append(stringToBertAtom(input: string)) - } else { - items.append(BertNil()) - } - } - if let instanse = object as? Person { - //TODO: - items.append(BertAtom(fromString: "Person")) - items.append(stringToBertBinary(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.names)) - items.append(stringToBertBinary(input: instanse.surnames)) - items.append(stringToBertBinary(input: instanse.username)) - items.append(BertNil()) - items.append(BertNil()) - items.append(stringToBertBinary(input: instanse.avatar)) - items.append(BertNil()) - items.append(BertNil()) - items.append(BertNil()) - items.append(stringToBertBinary(input: instanse.ThemeID)) - items.append(stringToBertBinary(input: instanse.voxImplantID)) - items.append(BertNil()) - items.append(numberFromInt64(input: instanse.balance)) - if let isParticipants = instanse.isParticipants { - if isParticipants.count == 0 { - items.append(BertNil()) - } else { - var result = [BertObject]() - for i in isParticipants { - if let j = stringToBertBinary(input: i) as? BertBinary { - result.append(j) - } - } - items.append(BertList(fromElements: result)) - } - } else { - items.append(BertNil()) - } - items.append(stringToBertAtom(input: instanse.status)) - } - if let instanse = object as? Profile { - items.append(BertAtom(fromString: "Profile")) - items.append(stringToBertBinary(input: instanse.phone)) - items.append(stringToBertBinary(input: instanse.data)) - items.append(stringToBertBinary(input: instanse.person_id)) - if let accounts = instanse.accounts as? [Roster] { - if accounts.count == 0 { - items.append(BertNil()) - } else { - var result = [BertTuple]() - for i in accounts { - result.append(serialize(object: i)) - } - items.append(BertList(fromElements: result)) - } - } else if let accounts = instanse.accounts as? [Int64] { - if accounts.count == 0 { - items.append(BertNil()) - } else { - var result = [BertNumber]() - for i in accounts { - if let n = numberFromInt64(input: i) as? BertNumber { - result.append(n) - } - } - items.append(BertList(fromElements: result)) - } - } else { - items.append(BertNil()) - } - items.append(stringToBertAtom(input: instanse.status)) - } - if let instanse = object as? Revoke { - items.append(BertAtom(fromString: "Revoke")) - items.append(stringToBertBinary(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.user)) - items.append(stringToBertAtom(input: instanse.status)) - } - if let instanse = object as? Room { - items.append(BertAtom(fromString: "Room")) - items.append(stringToBertBinary(input: instanse.desc)) - items.append(listFromObjects(input: instanse.acl)) - items.append(listFromObjects(input: instanse.settings)) - } - if let instanse = object as? Roster { - items.append(BertAtom(fromString: "Roster")) - items.append(numberFromInt64(input: instanse.id)) - items.append(stringToBertBinary(input: instanse.names)) - items.append(stringToBertBinary(input: instanse.surnames)) - items.append(numberFromInt64(input: instanse.size)) - if let userlist = instanse.userlist { - if userlist.count == 0 { - items.append(BertNil()) - } else { - var result = [BertTuple]() - for i in userlist { - result.append(serialize(object: i)) - } - items.append(BertList(fromElements: result)) - } - } else { - items.append(BertNil()) - } - if let roomlist = instanse.roomlist { - if roomlist.count == 0 { - items.append(BertNil()) - } else { - var result = [BertTuple]() - for i in roomlist { - result.append(serialize(object: i)) - } - items.append(BertList(fromElements: result)) - } - } else { - items.append(BertNil()) - } - items.append(BertNil()) //TODO - - } - if let instanse = object as? Typing { - - } - return BertTuple(fromElements: items) -} diff --git a/apps/roster/priv/macbert/Source/StringAtom.swift b/apps/roster/priv/macbert/Source/StringAtom.swift deleted file mode 100644 index 916adf2e575b35fddca2b3354c34d5f431c7c872..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Source/StringAtom.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// StringAtom.swift -// macbert -// -// Created by Anton Makarov on 19.07.2017. -// Copyright © 2017 TecSynt Solutions. All rights reserved. -// - -import Foundation - -class StringAtom { - var string: String? = nil - init(string: String) { - self.string = string - } -} diff --git a/apps/roster/priv/macbert/Source/TypeSpec.swift b/apps/roster/priv/macbert/Source/TypeSpec.swift deleted file mode 100644 index 1c9fc6a90e1c6139eff9ad7efa59420f8740065e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Source/TypeSpec.swift +++ /dev/null @@ -1,376 +0,0 @@ -// -// Model.swift -// Nynja -// -// Created by Anton Makarov on 11.07.2017. -// Copyright © 2017 TecSynt Solutions. All rights reserved. -// - -import Foundation -protocol Parsable { func parse(bert: BertObject) -> Any? } - -enum SelectType { - case chain - case tuple - case binary - case atom - case number - case list - case boolean -} - -class Model: Parsable { - var chain: Chain? - var tuple: Tuple? - var binary: Binary? - var number: Number? - var atom: Atom? - var list: List? - var boolean: Boolean? - var select: SelectType! - - init(value: Chain) { self.select = .chain; self.chain = value; } - init(value: Tuple) { self.select = .tuple; self.tuple = value; } - init(value: Atom) { self.select = .atom; self.atom = value; } - init(value: Binary) { self.select = .binary; self.binary = value; } - init(value: Number) { self.select = .number; self.number = value; } - init(value: List) { self.select = .list; self.list = value; } - init(value: Boolean){ self.select = .boolean;self.boolean = value;} - - var description : String { - get { - switch select! { - case .atom: - return atom!.description - case .binary: - return binary!.description - case .chain: - return chain!.description - case .number: - return number!.description - case .tuple: - return tuple!.description - case .list: - return list!.description - case .boolean: - return boolean!.description - } - } - } - func parse(bert: BertObject) -> Any? { - switch select! { - case .atom: - return atom!.parse(bert:bert) - case .binary: - return binary!.parse(bert:bert) - case .chain: - return chain!.parse(bert:bert) - case .number: - return number!.parse(bert:bert) - case .tuple: - return tuple!.parse(bert:bert) - case .list: - return list!.parse(bert: bert) - case .boolean: - return boolean!.parse(bert:bert) - } - } -} - -class Boolean: Parsable { - - func parse(bert: BertObject) -> Any? { - if let bool = bert as? BertBool { - return bool.value - } - return nil - } - - var description : String { - get { - return "Bool()" - } - } -} - - -func parse(bert: BertObject) -> Any? -{ - if let object = bert as? BertAtom { - return object.value - } - if let object = bert as? BertTuple { - var result = [Any]() - for i in object.elements { - if let any = parse(bert: i) { - result.append(any) - } - } - return result - } - if let _ = bert as? BertNil { - return [Any]() - } - if let object = bert as? BertBool { - return object.value as AnyObject - } - if let object = bert as? BertList { - var result = [Any]() - for i in object.elements { - if let any = parse(bert: i) { - result.append(any) - } - } - return result - } - if let object = bert as? BertString { - return object.value - } - if let object = bert as? BertBinary { - return object.value - } - if let object = bert as? BertNumber { - return object.value - } - if let object = bert as? BertFloat { - return object.value - } - return nil -} - - -class Tuple: Parsable { - var name: String? - var body: [Model]? - init(name: String? = nil , body: [Model]? = nil) { self.name = name; self.body = body;} - - func parse(bert: BertObject) -> Any? { - if let tuple = bert as? BertTuple { - if body == nil { - var result = [Any]() - for i in 0.. Any? { - if let const = constant { - if let string = bert as? BertString { - if string.value == const { - return const - } - } - } else { - if let list = bert as? BertList { - if let result = self.addToList(list: list) { - return result - } - } - } - return nil - } - - func addToList(list: BertList) -> [Any]? { - var result = [Any]() - if let mod = model { - for i in list.elements { - if let value = mod.parse(bert: i) { - result.append(value) - } else { - return nil - } - } - } else { - var result = [Any]() - for i in 0.. Any? { - if let atom = bert as? BertAtom { - if let const = constant { - if atom.value == const { - return StringAtom(string:atom.value) - } - } else { - return StringAtom(string:atom.value) - } - } - return nil - } - - var description : String { - get { - return constant ?? "Atom()" - } - } -} - - -class Binary: Parsable { - var constant: String? - init() { constant = nil } - init(constant: String) { self.constant = constant } - func parse(bert: BertObject) -> Any? { - if let bin = bert as? BertBinary { - if let const = constant { - let dataString = String(data: bin.value as Data, encoding: String.Encoding.utf8) - if dataString == const { - return String(data: bin.value as Data, encoding: String.Encoding.utf8) - } - } else { - - return String(data: bin.value as Data, encoding: String.Encoding.utf8) - } - } - return nil - } - var description : String { - get { - return constant ?? "Binary()" - } - } -} - -class Number: Parsable { - var constant: String? - init() { constant = nil } - init(constant: String) { self.constant = constant } - func parse(bert: BertObject) -> Any? { - if let num = bert as? BertNumber { - if let const = constant { - if const == "\(num.value)" { - return Int64(num.value) - } - } else { - return Int64(num.value) - } - } - return nil - } - var description : String { - get { - return constant ?? "Number()" - } - } -} - - -class Chain: Parsable { - var types: [Model]! - init(types: [Model]) { self.types = types } - - func parse(bert: BertObject) -> Any? { - for model in types { - if let obj = model.parse(bert: bert) { - return obj - } - } - return nil - } - - - var description : String { - get { - var text = "" - for i in 0.. Model { - return Model(value:Tuple(name:"Ack",body:[ - Model(value:Atom()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/Auth_Spec.swift b/apps/roster/priv/macbert/Spec/Auth_Spec.swift deleted file mode 100644 index 44b108bb905da016c4efa160cdbf1aba13857490..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Auth_Spec.swift +++ /dev/null @@ -1,47 +0,0 @@ -func get_Auth() -> Model { - return Model(value:Tuple(name:"Auth",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary()), - Model(value:Tuple(name:nil,body:[ - Model(value:Atom(constant:"fake")), - Model(value:Binary())]))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Feature()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"ios")), - Model(value:Atom(constant:"android")), - Model(value:Atom(constant:"web"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/CDR_Spec.swift b/apps/roster/priv/macbert/Spec/CDR_Spec.swift deleted file mode 100644 index 1e714c03cba7422224c27371f1350bbe90806670..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/CDR_Spec.swift +++ /dev/null @@ -1,38 +0,0 @@ -func get_CDR() -> Model { - return Model(value:Tuple(name:"CDR",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"pstn")), - Model(value:Atom(constant:"inet"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/CallMember_Spec.swift b/apps/roster/priv/macbert/Spec/CallMember_Spec.swift deleted file mode 100644 index 8eb9ab14145c58ee6574d7b19697fcdc45ede6ed..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/CallMember_Spec.swift +++ /dev/null @@ -1,48 +0,0 @@ -func get_CallMember() -> Model { - return Model(value:Tuple(name:"CallMember",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - get_Contact(), - get_Member()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"pstn")), - Model(value:Atom(constant:"inet"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"new")), - Model(value:Atom(constant:"join")), - Model(value:Atom(constant:"leave")), - Model(value:Atom(constant:"miss")), - Model(value:Atom(constant:"cancel")), - Model(value:Atom(constant:"active")), - Model(value:Atom(constant:"finish"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Call_Spec.swift b/apps/roster/priv/macbert/Spec/Call_Spec.swift deleted file mode 100644 index d827f117d5af18f3fcb8a0dd873398dcbdb1564b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Call_Spec.swift +++ /dev/null @@ -1,24 +0,0 @@ -func get_Call() -> Model { - return Model(value:Tuple(name:"Call",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil,model:get_CallMember())), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"start")), - Model(value:Atom(constant:"cancel")), - Model(value:Atom(constant:"active")), - Model(value:Atom(constant:"finish"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Contact_Spec.swift b/apps/roster/priv/macbert/Spec/Contact_Spec.swift deleted file mode 100644 index 5271e6a07758b82e81dba77a9fa3a139f23c2b25..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Contact_Spec.swift +++ /dev/null @@ -1,51 +0,0 @@ -func get_Contact() -> Model { - return Model(value:Tuple(name:"Contact",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number()), - Model(value:List(constant:nil, model:Model(value:Number())))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - get_Message()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil,model:get_Feature())), - Model(value:List(constant:nil,model:get_Service())), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"online")), - Model(value:Atom(constant:"offline")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"request")), - Model(value:Atom(constant:"authorization")), - Model(value:Atom(constant:"ignore")), - Model(value:Atom(constant:"internal")), - Model(value:Atom(constant:"friend")), - Model(value:Atom(constant:"last_msg")), - Model(value:Atom(constant:"ban")), - Model(value:Atom(constant:"banned")), - Model(value:Atom(constant:"deleted"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Cursor_Spec.swift b/apps/roster/priv/macbert/Spec/Cursor_Spec.swift deleted file mode 100644 index 8cadac0445e4af9d4e57171fab0b9ca53fffb5d7..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Cursor_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_Cursor() -> Model { - return Model(value:Tuple(name:"Cursor",body:[ - Model(value:Chain(types:[ - get_muc(), - get_p2p()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/Desc_Spec.swift b/apps/roster/priv/macbert/Spec/Desc_Spec.swift deleted file mode 100644 index 94175146742523b628fd951c15b983c4fdf9f07a..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Desc_Spec.swift +++ /dev/null @@ -1,13 +0,0 @@ -func get_Desc() -> Model { - return Model(value:Tuple(name:"Desc",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Binary()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil,model:get_Feature()))]))} diff --git a/apps/roster/priv/macbert/Spec/ExtendedStar_Spec.swift b/apps/roster/priv/macbert/Spec/ExtendedStar_Spec.swift deleted file mode 100644 index 45d891a2a3c4667dd53a80c965d92cee014bc5fd..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/ExtendedStar_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_ExtendedStar() -> Model { - return Model(value:Tuple(name:"ExtendedStar",body:[ - Model(value:Chain(types:[ - get_Star(), - Model(value:List(constant:""))])), - Model(value:Chain(types:[ - get_Contact(), - get_Room(), - Model(value:List(constant:""))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Feature_Spec.swift b/apps/roster/priv/macbert/Spec/Feature_Spec.swift deleted file mode 100644 index eaf569a31d7ed3653735a15a511b3e1138bea43e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Feature_Spec.swift +++ /dev/null @@ -1,8 +0,0 @@ -func get_Feature() -> Model { - return Model(value:Tuple(name:"Feature",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Binary()), - Model(value:Binary()), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/Friend_Spec.swift b/apps/roster/priv/macbert/Spec/Friend_Spec.swift deleted file mode 100644 index 34ced364e40bbffe7d68e37f173de4c7f6e5ef6b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Friend_Spec.swift +++ /dev/null @@ -1,14 +0,0 @@ -func get_Friend() -> Model { - return Model(value:Tuple(name:"Friend",body:[ - Model(value:Binary()), - Model(value:Binary()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Feature()))])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"ban")), - Model(value:Atom(constant:"unban")), - Model(value:Atom(constant:"request")), - Model(value:Atom(constant:"confirm")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"ignore"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/History_Spec.swift b/apps/roster/priv/macbert/Spec/History_Spec.swift deleted file mode 100644 index 879fccf916b18e3b23b905c1d9423a7a43baa47d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/History_Spec.swift +++ /dev/null @@ -1,38 +0,0 @@ -func get_History() -> Model { - return Model(value:Tuple(name:"History",body:[ - Model(value:Binary()), - Model(value:Chain(types:[ - get_p2p(), - get_muc(), - get_act(), - get_StickerPack(), - Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - get_Message(), - get_Job(), - get_StickerPack()]))))])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"updated")), - Model(value:Atom(constant:"get")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"last_loaded")), - Model(value:Atom(constant:"last_msg")), - Model(value:Atom(constant:"get_reply")), - Model(value:Atom(constant:"double_get")), - Model(value:Atom(constant:"delete")), - Model(value:Atom(constant:"image")), - Model(value:Atom(constant:"video")), - Model(value:Atom(constant:"file")), - Model(value:Atom(constant:"link")), - Model(value:Atom(constant:"audio")), - Model(value:Atom(constant:"contact")), - Model(value:Atom(constant:"location")), - Model(value:Atom(constant:"text"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Index_Spec.swift b/apps/roster/priv/macbert/Spec/Index_Spec.swift deleted file mode 100644 index 9f7e4a1f6642ac38be619d89f6ad9ed9992ca399..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Index_Spec.swift +++ /dev/null @@ -1,6 +0,0 @@ -func get_Index() -> Model { - return Model(value:Tuple(name:"Index",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))))]))} diff --git a/apps/roster/priv/macbert/Spec/Job_Spec.swift b/apps/roster/priv/macbert/Spec/Job_Spec.swift deleted file mode 100644 index 68ba975da3613e9e14c578b0895bea92a24dbf14..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Job_Spec.swift +++ /dev/null @@ -1,45 +0,0 @@ -func get_Job() -> Model { - return Model(value:Tuple(name:"Job",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"chain")), - Model(value:List(constant:""))])), - get_act(), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number()), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number()), - get_process()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary()), - Model(value:List(constant:nil,model:get_Message()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_messageEvent()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Feature()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"init")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"delete")), - Model(value:Atom(constant:"pending")), - Model(value:Atom(constant:"stop")), - Model(value:Atom(constant:"complete")), - Model(value:Atom(constant:"restart"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Link_Spec.swift b/apps/roster/priv/macbert/Spec/Link_Spec.swift deleted file mode 100644 index 35c091face953fb8e14bab7d63506b4912d75641..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Link_Spec.swift +++ /dev/null @@ -1,27 +0,0 @@ -func get_Link() -> Model { - return Model(value:Tuple(name:"Link",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"group")), - Model(value:Atom(constant:"channel"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"gen")), - Model(value:Atom(constant:"check")), - Model(value:Atom(constant:"add")), - Model(value:Atom(constant:"get")), - Model(value:Atom(constant:"join")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"delete"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Loc_Spec.swift b/apps/roster/priv/macbert/Spec/Loc_Spec.swift deleted file mode 100644 index 561dadfc15117e41737ac79c6290779daf759937..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Loc_Spec.swift +++ /dev/null @@ -1,11 +0,0 @@ -func get_Loc() -> Model { - return Model(value:Tuple(name:"Loc",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/Member_Spec.swift b/apps/roster/priv/macbert/Spec/Member_Spec.swift deleted file mode 100644 index cf7a14112b72773544df3cee76816aff9444f03b..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Member_Spec.swift +++ /dev/null @@ -1,58 +0,0 @@ -func get_Member() -> Model { - return Model(value:Tuple(name:"Member",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"chain")), - Model(value:Atom(constant:"cur")), - Model(value:List(constant:""))])), - Model(value:Chain(types:[ - get_muc(), - get_p2p(), - Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil)), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Feature()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Service()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"online")), - Model(value:Atom(constant:"offline"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"admin")), - Model(value:Atom(constant:"member")), - Model(value:Atom(constant:"removed")), - Model(value:Atom(constant:"patch")), - Model(value:Atom(constant:"owner"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Message_Spec.swift b/apps/roster/priv/macbert/Spec/Message_Spec.swift deleted file mode 100644 index 7cde1159f3dd5316ef64d98ee75bd9259fa1947d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Message_Spec.swift +++ /dev/null @@ -1,60 +0,0 @@ -func get_Message() -> Model { - return Model(value:Tuple(name:"Message",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"chain")), - Model(value:Atom(constant:"cur")), - Model(value:List(constant:""))])), - Model(value:Chain(types:[ - get_muc(), - get_p2p()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil,model:get_Desc())), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - Model(value:Atom(constant:"sys")), - Model(value:Atom(constant:"reply")), - Model(value:Atom(constant:"forward")), - Model(value:Atom(constant:"read")), - Model(value:Atom(constant:"edited")), - Model(value:Atom(constant:"cursor"))])))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number()), - get_Message()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - Model(value:Binary()), - Model(value:Number())]))))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Number())))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Number())))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"async")), - Model(value:Atom(constant:"delete")), - Model(value:Atom(constant:"clear")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"edit"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Person_Spec.swift b/apps/roster/priv/macbert/Spec/Person_Spec.swift deleted file mode 100644 index c72d2314adf06d613017480264977356154beed4..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Person_Spec.swift +++ /dev/null @@ -1,15 +0,0 @@ -func get_Person() -> Model { - return Model(value:Tuple(name:"Person",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil, model:Model(value:Binary()))), - Model(value:List(constant:nil)), - Model(value:List(constant:nil)), - Model(value:List(constant:nil)), - Model(value:List(constant:nil)), - Model(value:Binary()), - Model(value:List(constant:nil, model:Model(value:Binary()))), - Model(value:Number()), - Model(value:List(constant:nil, model:Model(value:Atom()))), - Model(value:List(constant:""))]))} diff --git a/apps/roster/priv/macbert/Spec/Profile_Spec.swift b/apps/roster/priv/macbert/Spec/Profile_Spec.swift deleted file mode 100644 index 06394285590c0d79535608d71818536894fec8cb..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Profile_Spec.swift +++ /dev/null @@ -1,31 +0,0 @@ -func get_Profile() -> Model { - return Model(value:Tuple(name:"Profile",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Service()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - get_Roster(), - Model(value:Binary())]))))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Feature()))])), - Model(value:Number()), - Model(value:Number()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"offline")), - Model(value:Atom(constant:"online")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"remove")), - Model(value:Atom(constant:"get")), - Model(value:Atom(constant:"patch")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"delete")), - Model(value:Atom(constant:"create"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/PushService_Spec.swift b/apps/roster/priv/macbert/Spec/PushService_Spec.swift deleted file mode 100644 index 02fe4dd8f6cbba06c9608caf7df459281c762835..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/PushService_Spec.swift +++ /dev/null @@ -1,18 +0,0 @@ -func get_PushService() -> Model { - return Model(value:Tuple(name:"PushService",body:[ - Model(value:List(constant:nil, model:Model(value:Binary()))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/Room_Spec.swift b/apps/roster/priv/macbert/Spec/Room_Spec.swift deleted file mode 100644 index a84bb1410d745c1d0f0dcb7b6e92d5168f7efcdb..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Room_Spec.swift +++ /dev/null @@ -1,60 +0,0 @@ -func get_Room() -> Model { - return Model(value:Tuple(name:"Room",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_Link()))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil,model:get_Feature())), - Model(value:List(constant:nil,model:get_Member())), - Model(value:List(constant:nil,model:get_Member())), - Model(value:List(constant:nil,model:get_Desc())), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"group")), - Model(value:Atom(constant:"channel")), - Model(value:Atom(constant:"call"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil, model:Model(value:Number()))), - Model(value:List(constant:nil, model:Model(value:Number()))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number()), - get_Message()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"create")), - Model(value:Atom(constant:"leave")), - Model(value:Atom(constant:"add")), - Model(value:Atom(constant:"remove")), - Model(value:Atom(constant:"removed")), - Model(value:Atom(constant:"join")), - Model(value:Atom(constant:"joined")), - Model(value:Atom(constant:"info")), - Model(value:Atom(constant:"patch")), - Model(value:Atom(constant:"get")), - Model(value:Atom(constant:"delete")), - Model(value:Atom(constant:"last_msg")), - Model(value:Atom(constant:"mute")), - Model(value:Atom(constant:"unmute"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Roster_Spec.swift b/apps/roster/priv/macbert/Spec/Roster_Spec.swift deleted file mode 100644 index 9fc58594c9f0cb3dbe0cd5a931395ad49b63a9dc..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Roster_Spec.swift +++ /dev/null @@ -1,45 +0,0 @@ -func get_Roster() -> Model { - return Model(value:Tuple(name:"Roster",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary()), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - get_Contact(), - Model(value:Number())])))), - Model(value:List(constant:nil,model:get_Room())), - Model(value:List(constant:nil,model:get_Star())), - Model(value:List(constant:nil,model:get_Tag())), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"get")), - Model(value:Atom(constant:"create")), - Model(value:Atom(constant:"del")), - Model(value:Atom(constant:"remove")), - Model(value:Atom(constant:"nick")), - Model(value:Atom(constant:"add")), - Model(value:Atom(constant:"update")), - Model(value:Atom(constant:"list")), - Model(value:Atom(constant:"patch")), - Model(value:Atom(constant:"last_msg"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Schedule_Spec.swift b/apps/roster/priv/macbert/Spec/Schedule_Spec.swift deleted file mode 100644 index 09fbf55e61a1b7979fcac466dea67a4c9ac40bef..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Schedule_Spec.swift +++ /dev/null @@ -1,12 +0,0 @@ -func get_Schedule() -> Model { - return Model(value:Tuple(name:"Schedule",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Search_Spec.swift b/apps/roster/priv/macbert/Spec/Search_Spec.swift deleted file mode 100644 index c5be4d12b5fbcc9afdc5c49f6b95477dacdb310c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Search_Spec.swift +++ /dev/null @@ -1,16 +0,0 @@ -func get_Search() -> Model { - return Model(value:Tuple(name:"Search",body:[ - Model(value:Number()), - Model(value:Binary()), - Model(value:Binary()), - Model(value:Chain(types:[ - Model(value:Atom(constant:"==")), - Model(value:Atom(constant:"!=")), - Model(value:Atom(constant:"like"))])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])))), - Model(value:Chain(types:[ - Model(value:Atom(constant:"profile")), - Model(value:Atom(constant:"roster")), - Model(value:Atom(constant:"contact")), - Model(value:Atom(constant:"member")), - Model(value:Atom(constant:"room"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Service_Spec.swift b/apps/roster/priv/macbert/Spec/Service_Spec.swift deleted file mode 100644 index 3360f99552aa92346b686dc8a6f0fa4204574f4c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Service_Spec.swift +++ /dev/null @@ -1,26 +0,0 @@ -func get_Service() -> Model { - return Model(value:Tuple(name:"Service",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:Atom(constant:"email")), - Model(value:Atom(constant:"vox")), - Model(value:Atom(constant:"aws")), - Model(value:Atom(constant:"wallet"))])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"verified")), - Model(value:Atom(constant:"added")), - Model(value:Atom(constant:"add")), - Model(value:Atom(constant:"remove"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Star_Spec.swift b/apps/roster/priv/macbert/Spec/Star_Spec.swift deleted file mode 100644 index a4671f16bf49bf771a6457545763ebe86435c39f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Star_Spec.swift +++ /dev/null @@ -1,17 +0,0 @@ -func get_Star() -> Model { - return Model(value:Tuple(name:"Star",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - get_Message(), - Model(value:List(constant:nil,model:get_Tag())), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"add")), - Model(value:Atom(constant:"remove"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/StickerPack_Spec.swift b/apps/roster/priv/macbert/Spec/StickerPack_Spec.swift deleted file mode 100644 index a37abc69aec3a2d5a97c1eed80cb903b15881522..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/StickerPack_Spec.swift +++ /dev/null @@ -1,19 +0,0 @@ -func get_StickerPack() -> Model { - return Model(value:Tuple(name:"StickerPack",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil, model:Model(value:Binary()))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil,model:get_Desc())), - Model(value:Number()), - Model(value:Number()), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/Tag_Spec.swift b/apps/roster/priv/macbert/Spec/Tag_Spec.swift deleted file mode 100644 index 4f9ae9504f4475b8836c38b9094a93fc69108df3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Tag_Spec.swift +++ /dev/null @@ -1,12 +0,0 @@ -func get_Tag() -> Model { - return Model(value:Tuple(name:"Tag",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Binary()), - Model(value:Binary()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"create")), - Model(value:Atom(constant:"remove")), - Model(value:Atom(constant:"edit"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Test_Spec.swift b/apps/roster/priv/macbert/Spec/Test_Spec.swift deleted file mode 100644 index 08e0dc24b63aa3e57138665c8dbd5e4852e2a9d1..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Test_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_Test() -> Model { - return Model(value:Tuple(name:"Test",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"message")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/Typing_Spec.swift b/apps/roster/priv/macbert/Spec/Typing_Spec.swift deleted file mode 100644 index 41ceda8a5b1b019907e27ad81475ccf598b5e188..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Typing_Spec.swift +++ /dev/null @@ -1,4 +0,0 @@ -func get_Typing() -> Model { - return Model(value:Tuple(name:"Typing",body:[ - Model(value:Binary()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))} diff --git a/apps/roster/priv/macbert/Spec/Vox_Spec.swift b/apps/roster/priv/macbert/Spec/Vox_Spec.swift deleted file mode 100644 index ad63c47cf8855f7d314377d1791d25fbfbd51888..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/Vox_Spec.swift +++ /dev/null @@ -1,11 +0,0 @@ -func get_Vox() -> Model { - return Model(value:Tuple(name:"Vox",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/act_Spec.swift b/apps/roster/priv/macbert/Spec/act_Spec.swift deleted file mode 100644 index 91273021b74e31073eec6072e0e481fc79eca031..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/act_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_act() -> Model { - return Model(value:Tuple(name:"act",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:Binary()), - Model(value:Number()), - Model(value:List(constant:nil, model:Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))))]))]))} diff --git a/apps/roster/priv/macbert/Spec/amend_Spec.swift b/apps/roster/priv/macbert/Spec/amend_Spec.swift deleted file mode 100644 index 7a08766c3fb5e37d5fe4894ee2be30eeb609f8fc..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/amend_Spec.swift +++ /dev/null @@ -1,8 +0,0 @@ -func get_amend() -> Model { - return Model(value:Tuple(name:"amend",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Tuple())))]))]))} diff --git a/apps/roster/priv/macbert/Spec/beginEvent_Spec.swift b/apps/roster/priv/macbert/Spec/beginEvent_Spec.swift deleted file mode 100644 index f7eefc2ee9d998d7c5a1d2e3fd8033851016e374..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/beginEvent_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_beginEvent() -> Model { - return Model(value:Tuple(name:"beginEvent",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple())))]))} diff --git a/apps/roster/priv/macbert/Spec/boundaryEvent_Spec.swift b/apps/roster/priv/macbert/Spec/boundaryEvent_Spec.swift deleted file mode 100644 index e40ced10e38016d46d8ac5d940487592fd2859c6..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/boundaryEvent_Spec.swift +++ /dev/null @@ -1,19 +0,0 @@ -func get_boundaryEvent() -> Model { - return Model(value:Tuple(name:"boundaryEvent",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary()), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Number()), - Model(value:Number())]))])), - Model(value:Binary()), - Model(value:Binary()), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/chain_Spec.swift b/apps/roster/priv/macbert/Spec/chain_Spec.swift deleted file mode 100644 index f492b041ce33dfb1f0a8bdd45d2616536a8a0494..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/chain_Spec.swift +++ /dev/null @@ -1,12 +0,0 @@ -func get_chain() -> Model { - return Model(value:Tuple(name:"chain",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/complete_Spec.swift b/apps/roster/priv/macbert/Spec/complete_Spec.swift deleted file mode 100644 index 3f6ac99bc78a57e01bfe0e6a179615cb3876922e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/complete_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_complete() -> Model { - return Model(value:Tuple(name:"complete",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/container_Spec.swift b/apps/roster/priv/macbert/Spec/container_Spec.swift deleted file mode 100644 index ea52d6cf2d7549f15ba1ca60dde5c17f868fea38..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/container_Spec.swift +++ /dev/null @@ -1,12 +0,0 @@ -func get_container() -> Model { - return Model(value:Tuple(name:"container",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/create_Spec.swift b/apps/roster/priv/macbert/Spec/create_Spec.swift deleted file mode 100644 index 40aeb3b4656736b0447a0b129851c011aaf6cc49..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/create_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_create() -> Model { - return Model(value:Tuple(name:"create",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - get_process(), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Tuple())))]))]))} diff --git a/apps/roster/priv/macbert/Spec/cur_Spec.swift b/apps/roster/priv/macbert/Spec/cur_Spec.swift deleted file mode 100644 index 1594fc906c8dadf623e2fc8d86c78cfa39c0d371..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/cur_Spec.swift +++ /dev/null @@ -1,21 +0,0 @@ -func get_cur() -> Model { - return Model(value:Tuple(name:"cur",body:[ - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:Number(constant:"0")), - Model(value:Number(constant:"1"))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple())])), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - Model(value:Tuple()), - Model(value:Number())]))))]))} diff --git a/apps/roster/priv/macbert/Spec/endEvent_Spec.swift b/apps/roster/priv/macbert/Spec/endEvent_Spec.swift deleted file mode 100644 index 9cd2fe816963c24173d42ca0cccb9ac7ed4cdf24..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/endEvent_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_endEvent() -> Model { - return Model(value:Tuple(name:"endEvent",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple())))]))} diff --git a/apps/roster/priv/macbert/Spec/error2_Spec.swift b/apps/roster/priv/macbert/Spec/error2_Spec.swift deleted file mode 100644 index 1e8be3701590042e1c45bda03604a93794097c8c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/error2_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_error2() -> Model { - return Model(value:Tuple(name:"error2",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary()), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/error_Spec.swift b/apps/roster/priv/macbert/Spec/error_Spec.swift deleted file mode 100644 index 838420e66a78a64020ec832f5df591267ab5dfa3..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/error_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_error() -> Model { - return Model(value:Tuple(name:"error",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())]))]))} diff --git a/apps/roster/priv/macbert/Spec/errors_Spec.swift b/apps/roster/priv/macbert/Spec/errors_Spec.swift deleted file mode 100644 index 4fb43f80a292be355cffd0cde33150deb17fed94..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/errors_Spec.swift +++ /dev/null @@ -1,8 +0,0 @@ -func get_errors() -> Model { - return Model(value:Tuple(name:"errors",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Binary())))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))]))} diff --git a/apps/roster/priv/macbert/Spec/hist_Spec.swift b/apps/roster/priv/macbert/Spec/hist_Spec.swift deleted file mode 100644 index 5859163c680205f71eb5b5538a6a2701b51eae07..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/hist_Spec.swift +++ /dev/null @@ -1,20 +0,0 @@ -func get_hist() -> Model { - return Model(value:Tuple(name:"hist",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil)), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Atom()), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))} diff --git a/apps/roster/priv/macbert/Spec/histo_Spec.swift b/apps/roster/priv/macbert/Spec/histo_Spec.swift deleted file mode 100644 index 1d8c29ee0e8011fb9a13010761cdb1313f8c06fa..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/histo_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_histo() -> Model { - return Model(value:Tuple(name:"histo",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/io_Spec.swift b/apps/roster/priv/macbert/Spec/io_Spec.swift deleted file mode 100644 index 15b4328013cdc742ca6db97549911e735f9c819f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/io_Spec.swift +++ /dev/null @@ -1,17 +0,0 @@ -func get_io() -> Model { - return Model(value:Tuple(name:"io",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - get_ok(), - get_error(), - get_ok2(), - get_error2()])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary()), - get_Roster(), - Model(value:Tuple(name:nil,body:[ - Model(value:Atom()), - Model(value:Chain(types:[ - Model(value:Binary()), - Model(value:Number())]))]))]))]))} diff --git a/apps/roster/priv/macbert/Spec/iter_Spec.swift b/apps/roster/priv/macbert/Spec/iter_Spec.swift deleted file mode 100644 index 478e58d57b0a4c04664b765ad65ca0e88708bb37..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/iter_Spec.swift +++ /dev/null @@ -1,13 +0,0 @@ -func get_iter() -> Model { - return Model(value:Tuple(name:"iter",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/iterator_Spec.swift b/apps/roster/priv/macbert/Spec/iterator_Spec.swift deleted file mode 100644 index e902370aef2dae224d1f25cb55c4c1476f58be29..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/iterator_Spec.swift +++ /dev/null @@ -1,14 +0,0 @@ -func get_iterator() -> Model { - return Model(value:Tuple(name:"iterator",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil))]))} diff --git a/apps/roster/priv/macbert/Spec/join_application_Spec.swift b/apps/roster/priv/macbert/Spec/join_application_Spec.swift deleted file mode 100644 index db985eaa0a1d11b50377b76df696c6b72fc2c7a0..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/join_application_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_join_application() -> Model { - return Model(value:Tuple(name:"join_application",body:[ - Model(value:Number()), - Model(value:Binary()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))} diff --git a/apps/roster/priv/macbert/Spec/log_Spec.swift b/apps/roster/priv/macbert/Spec/log_Spec.swift deleted file mode 100644 index dd14f37db73c603bc1985d0fe74319523bbe537c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/log_Spec.swift +++ /dev/null @@ -1,12 +0,0 @@ -func get_log() -> Model { - return Model(value:Tuple(name:"log",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/max_tour_Spec.swift b/apps/roster/priv/macbert/Spec/max_tour_Spec.swift deleted file mode 100644 index 237c711837808cc8f0c474dbe88eca6c2a096064..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/max_tour_Spec.swift +++ /dev/null @@ -1,4 +0,0 @@ -func get_max_tour() -> Model { - return Model(value:Tuple(name:"max_tour",body:[ - Model(value:Number()), - Model(value:Number())]))} diff --git a/apps/roster/priv/macbert/Spec/messageEvent_Spec.swift b/apps/roster/priv/macbert/Spec/messageEvent_Spec.swift deleted file mode 100644 index c9af1dbf776247b1e04733e9d2aeb0934fda271d..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/messageEvent_Spec.swift +++ /dev/null @@ -1,16 +0,0 @@ -func get_messageEvent() -> Model { - return Model(value:Tuple(name:"messageEvent",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary()), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Number()), - Model(value:Number())]))]))]))} diff --git a/apps/roster/priv/macbert/Spec/mqi_Spec.swift b/apps/roster/priv/macbert/Spec/mqi_Spec.swift deleted file mode 100644 index 1dd03ebcc92284c35368c3cb4d337738b23c5875..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/mqi_Spec.swift +++ /dev/null @@ -1,11 +0,0 @@ -func get_mqi() -> Model { - return Model(value:Tuple(name:"mqi",body:[ - get_muc(), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom(constant:"admin")), - Model(value:Atom(constant:"member")), - Model(value:Atom(constant:"removed"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/muc_Spec.swift b/apps/roster/priv/macbert/Spec/muc_Spec.swift deleted file mode 100644 index 6074d67af449bc0c3c86db9ede6acd3dacc5725c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/muc_Spec.swift +++ /dev/null @@ -1,3 +0,0 @@ -func get_muc() -> Model { - return Model(value:Tuple(name:"muc",body:[ - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/ok2_Spec.swift b/apps/roster/priv/macbert/Spec/ok2_Spec.swift deleted file mode 100644 index 59c2675c16576617e992f587efe093eae1ef414f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/ok2_Spec.swift +++ /dev/null @@ -1,11 +0,0 @@ -func get_ok2() -> Model { - return Model(value:Tuple(name:"ok2",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple(name:nil,body:[ - Model(value:Binary()), - Model(value:Binary())])), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/ok_Spec.swift b/apps/roster/priv/macbert/Spec/ok_Spec.swift deleted file mode 100644 index 0ad3df7da833efa56909fb1cf93271bef3ee7539..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/ok_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_ok() -> Model { - return Model(value:Tuple(name:"ok",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/operation_Spec.swift b/apps/roster/priv/macbert/Spec/operation_Spec.swift deleted file mode 100644 index d799e38c5dd0dbf587413c2c0e0d3af2bb9ac4ad..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/operation_Spec.swift +++ /dev/null @@ -1,14 +0,0 @@ -func get_operation() -> Model { - return Model(value:Tuple(name:"operation",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil))]))} diff --git a/apps/roster/priv/macbert/Spec/p2p_Spec.swift b/apps/roster/priv/macbert/Spec/p2p_Spec.swift deleted file mode 100644 index b175ecd9fff70d9a8f578d5d18f91590347f632c..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/p2p_Spec.swift +++ /dev/null @@ -1,4 +0,0 @@ -func get_p2p() -> Model { - return Model(value:Tuple(name:"p2p",body:[ - Model(value:Binary()), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/proc_Spec.swift b/apps/roster/priv/macbert/Spec/proc_Spec.swift deleted file mode 100644 index 6f1007830310ab32382f5bdb399bf4522f58f492..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/proc_Spec.swift +++ /dev/null @@ -1,5 +0,0 @@ -func get_proc() -> Model { - return Model(value:Tuple(name:"proc",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())]))]))} diff --git a/apps/roster/priv/macbert/Spec/process_Spec.swift b/apps/roster/priv/macbert/Spec/process_Spec.swift deleted file mode 100644 index e9c7e0513c86beaadb34a4057ca0b7d5129a333e..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/process_Spec.swift +++ /dev/null @@ -1,56 +0,0 @@ -func get_process() -> Model { - return Model(value:Tuple(name:"process",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Atom()), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:List(constant:nil)), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:List(constant:nil)), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - get_task(), - get_serviceTask(), - get_userTask(), - get_receiveTask()])))), - Model(value:List(constant:nil, model:Model(value:Chain(types:[ - get_messageEvent(), - get_boundaryEvent(), - get_timeoutEvent()])))), - Model(value:List(constant:"")), - Model(value:List(constant:nil,model:get_sequenceFlow())), - Model(value:List(constant:"")), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple(name:nil,body:[ - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))]))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())]))]))} diff --git a/apps/roster/priv/macbert/Spec/push_Spec.swift b/apps/roster/priv/macbert/Spec/push_Spec.swift deleted file mode 100644 index ef9a76e40677c17b99c55b4680224eb72f81c333..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/push_Spec.swift +++ /dev/null @@ -1,20 +0,0 @@ -func get_push() -> Model { - return Model(value:Tuple(name:"push",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))]))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/reader_Spec.swift b/apps/roster/priv/macbert/Spec/reader_Spec.swift deleted file mode 100644 index 923d86e701ff2754ec0c5dba2b519dfbee0eff9a..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/reader_Spec.swift +++ /dev/null @@ -1,14 +0,0 @@ -func get_reader() -> Model { - return Model(value:Tuple(name:"reader",body:[ - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Number())])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:Number(constant:"0")), - Model(value:Number(constant:"1"))]))]))} diff --git a/apps/roster/priv/macbert/Spec/receiveTask_Spec.swift b/apps/roster/priv/macbert/Spec/receiveTask_Spec.swift deleted file mode 100644 index 81cf3c76b7835fc80a4b1d446543c94d49181d68..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/receiveTask_Spec.swift +++ /dev/null @@ -1,10 +0,0 @@ -func get_receiveTask() -> Model { - return Model(value:Tuple(name:"receiveTask",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/sequenceFlow_Spec.swift b/apps/roster/priv/macbert/Spec/sequenceFlow_Spec.swift deleted file mode 100644 index bc21a8ebe79531daaa60d59800ca74f051b0d148..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/sequenceFlow_Spec.swift +++ /dev/null @@ -1,9 +0,0 @@ -func get_sequenceFlow() -> Model { - return Model(value:Tuple(name:"sequenceFlow",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom()), - Model(value:List(constant:nil, model:Model(value:Atom())))]))]))} diff --git a/apps/roster/priv/macbert/Spec/serviceTask_Spec.swift b/apps/roster/priv/macbert/Spec/serviceTask_Spec.swift deleted file mode 100644 index 586517f5d06ebe8cb75c670fc9466c28586a2a7f..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/serviceTask_Spec.swift +++ /dev/null @@ -1,10 +0,0 @@ -func get_serviceTask() -> Model { - return Model(value:Tuple(name:"serviceTask",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/task_Spec.swift b/apps/roster/priv/macbert/Spec/task_Spec.swift deleted file mode 100644 index d1734eecb0d6c0105ea9181c8e41699f72eff987..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/task_Spec.swift +++ /dev/null @@ -1,10 +0,0 @@ -func get_task() -> Model { - return Model(value:Tuple(name:"task",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/timeoutEvent_Spec.swift b/apps/roster/priv/macbert/Spec/timeoutEvent_Spec.swift deleted file mode 100644 index c4b03fdc2d93af75d73f1f061b0d79ed8a7e8777..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/timeoutEvent_Spec.swift +++ /dev/null @@ -1,29 +0,0 @@ -func get_timeoutEvent() -> Model { - return Model(value:Tuple(name:"timeoutEvent",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Tuple(name:nil,body:[ - Model(value:Number()), - Model(value:Number()), - Model(value:Number())]))]))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Binary())]))]))} diff --git a/apps/roster/priv/macbert/Spec/tour_list_Spec.swift b/apps/roster/priv/macbert/Spec/tour_list_Spec.swift deleted file mode 100644 index 01c5825fe093876d7dd4a0b88409591f20956b61..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/tour_list_Spec.swift +++ /dev/null @@ -1,3 +0,0 @@ -func get_tour_list() -> Model { - return Model(value:Tuple(name:"tour_list",body:[ - Model(value:List(constant:nil,model:get_join_application()))]))} diff --git a/apps/roster/priv/macbert/Spec/userTask_Spec.swift b/apps/roster/priv/macbert/Spec/userTask_Spec.swift deleted file mode 100644 index 2912b0912c507a1cc61fb472e53b9cef82b54805..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/userTask_Spec.swift +++ /dev/null @@ -1,10 +0,0 @@ -func get_userTask() -> Model { - return Model(value:Tuple(name:"userTask",body:[ - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Atom())])), - Model(value:List(constant:nil, model:Model(value:Tuple()))), - Model(value:Binary())]))} diff --git a/apps/roster/priv/macbert/Spec/writer_Spec.swift b/apps/roster/priv/macbert/Spec/writer_Spec.swift deleted file mode 100644 index 2fb05c68a894d965fb610bf37598b20d2ba4b5d9..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/Spec/writer_Spec.swift +++ /dev/null @@ -1,11 +0,0 @@ -func get_writer() -> Model { - return Model(value:Tuple(name:"writer",body:[ - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Number()), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple())])), - Model(value:Chain(types:[Model(value:Tuple()),Model(value:Atom()),Model(value:Binary()),Model(value:Number()),Model(value:List(constant:""))])), - Model(value:Chain(types:[ - Model(value:List(constant:"")), - Model(value:Tuple())]))]))} diff --git a/apps/roster/priv/macbert/json-bert.js b/apps/roster/priv/macbert/json-bert.js index 078933c38dc56b7085655305a61f227287b7f8a0..565298b2c5ed61f10b28259c0123351908affcb1 100644 --- a/apps/roster/priv/macbert/json-bert.js +++ b/apps/roster/priv/macbert/json-bert.js @@ -818,7 +818,7 @@ function encFeature(d) { var tup = atom('Feature'); var id = 'id' in d && d.id ? bin(d.id) : nil(); var key = 'key' in d && d.key ? bin(d.key) : nil(); - var value = 'value' in d && d.value ? bin(d.value) : nil(); + var value = 'value' in d && d.value ? encode(d.value) : nil(); var group = 'group' in d && d.group ? bin(d.group) : nil(); return tuple(tup,id,key,value,group); } @@ -827,7 +827,7 @@ function decFeature(d) { var r={}; r.tup = 'Feature'; r.id = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; r.key = d && d.v[2] ? utf8_arr(d.v[2].v) : undefined; - r.value = d && d.v[3] ? utf8_arr(d.v[3].v) : undefined; + r.value = d && d.v[3] ? decode(d.v[3]) : undefined; r.group = d && d.v[4] ? utf8_arr(d.v[4].v) : undefined; return clean(r); } @@ -869,8 +869,8 @@ function encMember(d) { var avatar = 'avatar' in d && d.avatar ? bin(d.avatar) : nil(); var names = 'names' in d && d.names ? bin(d.names) : nil(); var surnames = 'surnames' in d && d.surnames ? bin(d.surnames) : nil(); - var alias = 'alias' in d && d.alias ? bin(d.alias) : nil(); - var reader = 'reader' in d && d.reader ? number(d.reader) : nil(); + var alias = 'alias' in d && d.alias ? encode(d.alias) : nil(); + var reader = 'reader' in d && d.reader ? encode(d.reader) : nil(); var update = 'update' in d && d.update ? number(d.update) : nil(); var settings = []; if ('settings' in d && d.settings) { d.settings.forEach(function(x){ @@ -901,8 +901,8 @@ function decMember(d) { r.avatar = d && d.v[8] ? utf8_arr(d.v[8].v) : undefined; r.names = d && d.v[9] ? utf8_arr(d.v[9].v) : undefined; r.surnames = d && d.v[10] ? utf8_arr(d.v[10].v) : undefined; - r.alias = d && d.v[11] ? utf8_arr(d.v[11].v) : undefined; - r.reader = d && d.v[12] ? d.v[12].v : undefined; + r.alias = d && d.v[11] ? decode(d.v[11]) : undefined; + r.reader = d && d.v[12] ? decode(d.v[12]) : undefined; r.update = d && d.v[13] ? d.v[13].v : undefined; r.settings = []; (d && d.v[14] && d.v[14].v) ? @@ -1295,10 +1295,7 @@ function encAuth(d) { { d.services.forEach(function(x){ services.push(encode(x))}); services={t:108,v:services}; } else { services = nil() }; - var settings = []; if ('settings' in d && d.settings) - { d.settings.forEach(function(x){ - settings.push(encode(x))}); - settings={t:108,v:settings}; } else { settings = nil() }; + var settings = 'settings' in d && d.settings ? encode(d.settings) : nil(); var push = 'push' in d && d.push ? bin(d.push) : nil(); var os = 'os' in d && d.os ? atom(d.os) : nil(); var created = 'created' in d && d.created ? number(d.created) : nil(); @@ -1314,17 +1311,14 @@ function decAuth(d) { r.user_id = d && d.v[3] ? utf8_arr(d.v[3].v) : undefined; r.phone = d && d.v[4] ? decode(d.v[4]) : undefined; r.token = d && d.v[5] ? utf8_arr(d.v[5].v) : undefined; - r.type = d && d.v[6] ? d.v[6].v : undefined; + r.type = d && d.v[6] ? decode(d.v[6]) : undefined; r.sms_code = d && d.v[7] ? utf8_arr(d.v[7].v) : undefined; r.attempts = d && d.v[8] ? d.v[8].v : undefined; r.services = []; (d && d.v[9] && d.v[9].v) ? d.v[9].v.forEach(function(x){r.services.push(decode(x))}) : r.services = undefined; - r.settings = []; - (d && d.v[10] && d.v[10].v) ? - d.v[10].v.forEach(function(x){r.settings.push(decode(x))}) : - r.settings = undefined; + r.settings = d && d.v[10] ? decode(d.v[10]) : undefined; r.push = d && d.v[11] ? utf8_arr(d.v[11].v) : undefined; r.os = d && d.v[12] ? decode(d.v[12]) : undefined; r.created = d && d.v[13] ? d.v[13].v : undefined; @@ -1338,18 +1332,9 @@ function encRoster(d) { var surnames = 'surnames' in d && d.surnames ? bin(d.surnames) : nil(); var email = 'email' in d && d.email ? bin(d.email) : nil(); var nick = 'nick' in d && d.nick ? bin(d.nick) : nil(); - var userlist = []; if ('userlist' in d && d.userlist) - { d.userlist.forEach(function(x){ - userlist.push(encode(x))}); - userlist={t:108,v:userlist}; } else { userlist = nil() }; - var roomlist = []; if ('roomlist' in d && d.roomlist) - { d.roomlist.forEach(function(x){ - roomlist.push(encode(x))}); - roomlist={t:108,v:roomlist}; } else { roomlist = nil() }; - var favorite = []; if ('favorite' in d && d.favorite) - { d.favorite.forEach(function(x){ - favorite.push(encode(x))}); - favorite={t:108,v:favorite}; } else { favorite = nil() }; + var userlist = 'userlist' in d && d.userlist ? encode(d.userlist) : nil(); + var roomlist = 'roomlist' in d && d.roomlist ? encode(d.roomlist) : nil(); + var favorite = 'favorite' in d && d.favorite ? encode(d.favorite) : nil(); var tags = []; if ('tags' in d && d.tags) { d.tags.forEach(function(x){ tags.push(encode(x))}); @@ -1369,18 +1354,9 @@ function decRoster(d) { r.surnames = d && d.v[3] ? utf8_arr(d.v[3].v) : undefined; r.email = d && d.v[4] ? utf8_arr(d.v[4].v) : undefined; r.nick = d && d.v[5] ? utf8_arr(d.v[5].v) : undefined; - r.userlist = []; - (d && d.v[6] && d.v[6].v) ? - d.v[6].v.forEach(function(x){r.userlist.push(decode(x))}) : - r.userlist = undefined; - r.roomlist = []; - (d && d.v[7] && d.v[7].v) ? - d.v[7].v.forEach(function(x){r.roomlist.push(decode(x))}) : - r.roomlist = undefined; - r.favorite = []; - (d && d.v[8] && d.v[8].v) ? - d.v[8].v.forEach(function(x){r.favorite.push(decode(x))}) : - r.favorite = undefined; + r.userlist = d && d.v[6] ? decode(d.v[6]) : undefined; + r.roomlist = d && d.v[7] ? decode(d.v[7]) : undefined; + r.favorite = d && d.v[8] ? decode(d.v[8]) : undefined; r.tags = []; (d && d.v[9] && d.v[9].v) ? d.v[9].v.forEach(function(x){r.tags.push(decode(x))}) : @@ -1594,14 +1570,14 @@ function decIndex(d) { function encWhitelist(d) { var tup = atom('Whitelist'); - var phone = 'phone' in d && d.phone ? bin(d.phone) : nil(); + var phone = 'phone' in d && d.phone ? encode(d.phone) : nil(); var created = 'created' in d && d.created ? number(d.created) : nil(); return tuple(tup,phone,created); } function lenWhitelist() { return 3; } function decWhitelist(d) { var r={}; r.tup = 'Whitelist'; - r.phone = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; + r.phone = d && d.v[1] ? decode(d.v[1]) : undefined; r.created = d && d.v[2] ? d.v[2].v : undefined; return clean(r); } @@ -1618,13 +1594,13 @@ function decerror(d) { function encok(d) { var tup = atom('ok'); - var code = 'code' in d && d.code ? bin(d.code) : nil(); + var code = 'code' in d && d.code ? atom(d.code) : nil(); return tuple(tup,code); } function lenok() { return 2; } function decok(d) { var r={}; r.tup = 'ok'; - r.code = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; + r.code = d && d.v[1] ? decode(d.v[1]) : undefined; return clean(r); } function encerror2(d) { @@ -1742,15 +1718,15 @@ function decPublishService(d) { function encFakeNumbers(d) { var tup = atom('FakeNumbers'); - var phone = 'phone' in d && d.phone ? bin(d.phone) : nil(); - var created = 'created' in d && d.created ? number(d.created) : nil(); + var phone = 'phone' in d && d.phone ? encode(d.phone) : nil(); + var created = 'created' in d && d.created ? encode(d.created) : nil(); return tuple(tup,phone,created); } function lenFakeNumbers() { return 3; } function decFakeNumbers(d) { var r={}; r.tup = 'FakeNumbers'; - r.phone = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; - r.created = d && d.v[2] ? d.v[2].v : undefined; + r.phone = d && d.v[1] ? decode(d.v[1]) : undefined; + r.created = d && d.v[2] ? decode(d.v[2]) : undefined; return clean(r); } function encDraft(d) { @@ -1797,19 +1773,21 @@ function dechandler(d) { function encpi(d) { var tup = atom('pi'); - var name = 'name' in d && d.name ? atom(d.name) : nil(); + var name = 'name' in d && d.name ? encode(d.name) : nil(); + var table = 'table' in d && d.table ? atom(d.table) : nil(); var sup = 'sup' in d && d.sup ? atom(d.sup) : nil(); var module = 'module' in d && d.module ? atom(d.module) : nil(); var state = 'state' in d && d.state ? encode(d.state) : nil(); - return tuple(tup,name,sup,module,state); } + return tuple(tup,name,table,sup,module,state); } -function lenpi() { return 5; } +function lenpi() { return 6; } function decpi(d) { var r={}; r.tup = 'pi'; - r.name = d && d.v[1] ? d.v[1].v : undefined; - r.sup = d && d.v[2] ? d.v[2].v : undefined; - r.module = d && d.v[3] ? d.v[3].v : undefined; - r.state = d && d.v[4] ? decode(d.v[4]) : undefined; + r.name = d && d.v[1] ? decode(d.v[1]) : undefined; + r.table = d && d.v[2] ? d.v[2].v : undefined; + r.sup = d && d.v[3] ? d.v[3].v : undefined; + r.module = d && d.v[4] ? d.v[4].v : undefined; + r.state = d && d.v[5] ? decode(d.v[5]) : undefined; return clean(r); } function enccx(d) { @@ -1828,10 +1806,7 @@ function enccx(d) { var path = 'path' in d && d.path ? bin(d.path) : nil(); var session = 'session' in d && d.session ? bin(d.session) : nil(); var formatter = 'formatter' in d && d.formatter ? atom(d.formatter) : nil(); - var params = []; if ('params' in d && d.params) - { d.params.forEach(function(x){ - params.push(encode(x))}); - params={t:108,v:params}; } else { params = nil() }; + var params = 'params' in d && d.params ? encode(d.params) : nil(); var node = 'node' in d && d.node ? atom(d.node) : nil(); var client_pid = 'client_pid' in d && d.client_pid ? encode(d.client_pid) : nil(); var state = 'state' in d && d.state ? encode(d.state) : nil(); @@ -1857,10 +1832,7 @@ function deccx(d) { r.path = d && d.v[6] ? utf8_arr(d.v[6].v) : undefined; r.session = d && d.v[7] ? utf8_arr(d.v[7].v) : undefined; r.formatter = d && d.v[8] ? decode(d.v[8]) : undefined; - r.params = []; - (d && d.v[9] && d.v[9].v) ? - d.v[9].v.forEach(function(x){r.params.push(decode(x))}) : - r.params = undefined; + r.params = d && d.v[9] ? decode(d.v[9]) : undefined; r.node = d && d.v[10] ? d.v[10].v : undefined; r.client_pid = d && d.v[11] ? decode(d.v[11]) : undefined; r.state = d && d.v[12] ? decode(d.v[12]) : undefined; @@ -2020,3 +1992,59 @@ function decftpack(d) { r.status = d && d.v[9] ? decode(d.v[9]) : undefined; return clean(r); } +function encschema(d) { + var tup = atom('schema'); + var tables = 'tables' in d && d.tables ? encode(d.tables) : nil(); + return tuple(tup,tables); } + +function lenschema() { return 2; } +function decschema(d) { + var r={}; r.tup = 'schema'; + r.tables = d && d.v[1] ? decode(d.v[1]) : undefined; + return clean(r); } + +function enctable(d) { + var tup = atom('table'); + var container = 'container' in d && d.container ? encode(d.container) : nil(); + var type = 'type' in d && d.type ? encode(d.type) : nil(); + var fields = 'fields' in d && d.fields ? encode(d.fields) : nil(); + var keys = 'keys' in d && d.keys ? encode(d.keys) : nil(); + return tuple(tup,container,type,fields,keys); } + +function lentable() { return 5; } +function dectable(d) { + var r={}; r.tup = 'table'; + r.container = d && d.v[1] ? decode(d.v[1]) : undefined; + r.type = d && d.v[2] ? decode(d.v[2]) : undefined; + r.fields = d && d.v[3] ? decode(d.v[3]) : undefined; + r.keys = d && d.v[4] ? decode(d.v[4]) : undefined; + return clean(r); } + +function enccolumn(d) { + var tup = atom('column'); + var key = 'key' in d && d.key ? encode(d.key) : nil(); + var ro = 'ro' in d && d.ro ? encode(d.ro) : nil(); + return tuple(tup,key,ro); } + +function lencolumn() { return 3; } +function deccolumn(d) { + var r={}; r.tup = 'column'; + r.key = d && d.v[1] ? decode(d.v[1]) : undefined; + r.ro = d && d.v[2] ? decode(d.v[2]) : undefined; + return clean(r); } + +function encquery(d) { + var tup = atom('query'); + var types = 'types' in d && d.types ? encode(d.types) : nil(); + var values = 'values' in d && d.values ? encode(d.values) : nil(); + var next_ph_num = 'next_ph_num' in d && d.next_ph_num ? encode(d.next_ph_num) : nil(); + return tuple(tup,types,values,next_ph_num); } + +function lenquery() { return 4; } +function decquery(d) { + var r={}; r.tup = 'query'; + r.types = d && d.v[1] ? decode(d.v[1]) : undefined; + r.values = d && d.v[2] ? decode(d.v[2]) : undefined; + r.next_ph_num = d && d.v[3] ? decode(d.v[3]) : undefined; + return clean(r); } + diff --git a/apps/roster/priv/macbert/main.swift b/apps/roster/priv/macbert/main.swift deleted file mode 100644 index 9dc998a1387df0b4b5e32dc2885191d653780d20..0000000000000000000000000000000000000000 --- a/apps/roster/priv/macbert/main.swift +++ /dev/null @@ -1,43 +0,0 @@ - -import Foundation - -/* func test3() { - let bin: [UInt8] = [131,104,11,100,0,6,82,111,115,116,101,114,97,63,109,0,0, - 0,5,65,110,116,111,110,109,0,0,0,1,77,97,1,108,0,0,0,1, - 104,7,100,0,7,67,111,110,116,97,99,116,109,0,0,0,15,51, - 56,48,57,57,52,51,56,50,55,57,56,95,54,51,106,106,106, - 106,106,106,106,100,0,4,116,114,117,101,109,0,0,0,12,51, - 56,48,57,57,52,51,56,50,55,57,56,109,0,0,0,25,104,116, - 116,112,58,47,47,97,118,97,116,97,114,46,99,111,109,47, - 97,118,97,46,112,110,103,100,0,5,112,97,116,99,104] - let data = NSData(bytes: bin, length: bin.count) - do { - let bert = try Bert.decode(data: data) - if let roster = get_Roster().parse(bert: bert) as? Roster { - print("parsed") - } - } catch { - print("I Can't parse Bin to Bert") - } - -} */ - - -//test3() - - -func testProfile() { - let bin: [UInt8] = [131, 104, 7, 100, 0, 7, 80, 114, 111, 102, 105, 108, 101, 109, 0, 0, 0, 12, 51, 56, 48, 54, 51, 50, 56, 56, 57, 56, 57, 48, 106, 109, 0, 0, 0, 14, 51, 56, 48, 54, 51, 50, 56, 56, 57, 56, 57, 48, 95, 52, 108, 0, 0, 0, 1, 104, 12, 100, 0, 6, 82, 111, 115, 116, 101, 114, 97, 4, 106, 106, 97, 1, 108, 0, 0, 0, 1, 104, 10, 100, 0, 7, 67, 111, 110, 116, 97, 99, 116, 109, 0, 0, 0, 14, 51, 56, 48, 54, 51, 50, 56, 56, 57, 56, 57, 48, 95, 52, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 100, 0, 4, 116, 114, 117, 101, 109, 0, 0, 0, 12, 51, 56, 48, 54, 51, 50, 56, 56, 57, 56, 57, 48, 106, 106, 106, 106, 106, 100, 0, 3, 103, 101, 116] - let data = NSData(bytes: bin, length: bin.count) - do { - let bert = try Bert.decode(data: data) - if let profile = get_Profile().parse(bert: bert) { - print("parsed") - } - } catch { - print("I Can't parse Bin to Bert") - } -} - -testProfile() - diff --git a/apps/roster/src/api/google_api.erl b/apps/roster/src/api/google_api.erl index a0f5d4591004d3ee5efaed5f651502b239a00523..f26708f8c1ccffdf6f64cefaa16fbf362b6da7d7 100644 --- a/apps/roster/src/api/google_api.erl +++ b/apps/roster/src/api/google_api.erl @@ -1,5 +1,5 @@ -module(google_api). - +-dialyzer({nowarn_function, gs_upload/3}). -compile(export_all). -include_lib("enenra/include/enenra.hrl"). @@ -61,10 +61,8 @@ start() -> case filelib:is_file(PathFile) of true -> os:putenv("GOOGLE_APPLICATION_CREDENTIALS", PathFile), - case enenra:load_credentials(os:getenv("GOOGLE_APPLICATION_CREDENTIALS")) of - {ok, Creds} -> application:set_env(roster, google_creds, Creds); - Err-> roster:error(?MODULE, "cannot load googlr creds: ~p", [Err]) - end; + {ok, Creds} = enenra:load_credentials(os:getenv("GOOGLE_APPLICATION_CREDENTIALS")), + application:set_env(roster, google_creds, Creds); _ -> roster:error(?MODULE, "google credential file ~p not found", PathFile) end, case ?GOOGLE_API_KEY of @@ -198,7 +196,7 @@ send_operation(LongRequest, OperationName, Counter, Timeout, Fun) -> <<>> -> {error, invalid_transcribe}; Text -> Text end); #{<<"name">> := OperationName} -> timer:apply_after(Timeout, ?MODULE, send_operation, [LongRequest, OperationName, Counter - 1, Timeout, Fun]); - #{} = R -> roster:error("invalid long operation ~p", [R]), + #{} -> roster:error("invalid long operation ~p", [R]), Fun({error, invalid_transcribe}) end; {error, _} = Err -> Fun(Err) @@ -241,7 +239,10 @@ gs_upload(FileIn, Bucket, ContentType) -> Size = filelib:file_size(FileOut), {ok, Md5} = enenra:compute_md5(FileOut), case enenra:upload_file(FileOut, - #object{name = Name, bucket = Bucket, contentType = ContentType, md5Hash = Md5, size = Size}, Creds) of + #object{name = Name, + bucket = Bucket, + contentType = ContentType, + md5Hash = Md5, size = Size}, Creds) of {ok, #object{}} -> roster:info(?MODULE, "object ~p is uploaded successfully", [GsUri = iolist_to_binary(["gs://",Bucket,"/",Name])]), [file:delete(filename:absname(File)) || File<-[FileIn2, FileOut]], diff --git a/apps/roster/src/micro.erl b/apps/roster/src/micro.erl index 04db6a13f350275ea84f552673f0e7730417e848..58a139dd5755be16a83e9bb66f8a8fcc16a158d5 100644 --- a/apps/roster/src/micro.erl +++ b/apps/roster/src/micro.erl @@ -33,9 +33,7 @@ uuid_to_id(Table, Acc) -> _ -> [] end; _ -> [] - end; -uuid_to_id(Table, ?IS_UUID = Acc) -> - uuid_to_id(Table, uuid:to_binary(binary_to_list(Acc))). + end. norm_uuid(<<_:128>> = Uuid) -> list_to_binary(uuid:to_string(Uuid)); norm_uuid(?IS_UUID = Uuid) -> Uuid. diff --git a/apps/roster/src/processes/job.erl b/apps/roster/src/processes/job.erl index c2c6497cea42bd44ce97a9f0f34954a1e2518366..49c339edd3bb882ddd55d1585404b2a6d1d926c5 100644 --- a/apps/roster/src/processes/job.erl +++ b/apps/roster/src/processes/job.erl @@ -49,14 +49,14 @@ action({request,'Action'}, #process{id=Id, options=Opts}=Proc) -> %job_process:get_proc(Id,pos), case bpe:doc(#'Schedule'{},Proc) of #'Schedule'{data = <<"stop">>} -> {reply,'Stop',Proc}; - #'Schedule'{id=Time, data = []} -> catch n2o_async:pid(system,roster_bpe) ! {next, Proc, Time}, + #'Schedule'{id=Time, data = []} -> catch n2o_pi:pid(system,roster_bpe) ! {next, Proc, Time}, {reply,'Stop',Proc}; #'Schedule'{id=Time}=Sh when Time/=[] -> Timeout=Time-roster:now_msec(), case Timeout-CTimeout of T when T =<3*?QUANT -> %io:format("Pub ~p, ~p ~n", [Id,Timeout]), - catch n2o_async:pid(system,roster_bpe) ! {publish, Proc}, + catch n2o_pi:pid(system,roster_bpe) ! {publish, Proc}, {reply,'Stop',Proc}; - T -> catch n2o_async:pid(system,roster_bpe) ! {timeout, Sh, Timeout}, + T -> catch n2o_pi:pid(system,roster_bpe) ! {timeout, Sh, Timeout}, {reply,'Timeout',Proc} end; _ -> {reply,'Stop',Proc} end; @@ -64,24 +64,23 @@ action({request,'Action'}, #process{id=Id, options=Opts}=Proc) -> action({request,'Final'}, #process{id=Id, options=Opt}=Proc) -> io:format(" Final~n"), %roster:send_event(C, <<>>, <<>>, #'Job'{id=Id, status=delete}), - %n2o_async:pid(system,roster_bpe) ! #'Job'{id=Id, status=delete}, - n2o_async:pid(system,roster_bpe) ! {clean, Proc#process{}}, + %n2o_pi:pid(system,roster_bpe) ! #'Job'{id=Id, status=delete}, + n2o_pi:pid(system,roster_bpe) ! {clean, Proc#process{}}, {reply,Proc}. worker(#process{id=Id}=P) -> - case kvs:get(feed,process) of - {ok,Feed} when Feed#feed.top =:= Id -> - case bpe:hist(Id) of - [H|_] ->%kvs:info(?MODULE,"Worker Start: ~p~n",[Id]), - worker_do(calendar:time_difference(H#hist.time,calendar:local_time()),P); - __ -> skip end; - __ -> skip end - . + try + {ok, #feed{top = Id }} = kvs:get(feed,process), + #hist{time = HistTime} = hd(bpe:hist(Id)), + worker_do(calendar:time_difference(HistTime,calendar:local_time()),P) + catch + _-> skip + end. worker_do({Days,Time},P) when Days >= 14 -> skip; worker_do({Days,Time},#process{id=Id}=P) when P#process.task =:= 'Action' -> -% catch n2o_async:pid(system,roster_bpe) ! {restart, P}, +% catch n2o_pi:pid(system,roster_bpe) ! {restart, P}, bpe:start(P, []), %bpe:complite(Id), kvs:info(?MODULE,"BPE Start: ~p~n",[Id]); @@ -126,7 +125,9 @@ next(R,Current) -> clear_schedule()-> [kvs:delete('Schedule', Time) || #'Schedule'{id=Time} <- kvs:all('Schedule'), Time < roster:now_msec()]. -clear_hist(#process{id=Id}=P)-> case bpe:hist(Id) of - [H|T] -> [kvs:remove(hist,Id) || #'hist'{id=Id} <- T]; - __ -> skip end. - +clear_hist(#process{id=Id}=P)-> + try + [kvs:remove(hist,Id) || #'hist'{id=Id} <- tl(bpe:hist(Id))] + catch + _-> skip + end. \ No newline at end of file diff --git a/apps/roster/src/processes/job_process.erl b/apps/roster/src/processes/job_process.erl index 4662dec78862b63eedcea13eb04632a57630f02e..1bd0da741de071815341e03f67160be2b9ef5947 100644 --- a/apps/roster/src/processes/job_process.erl +++ b/apps/roster/src/processes/job_process.erl @@ -1,7 +1,7 @@ -module(job_process). -include("roster.hrl"). -compile(export_all). - +-dialyzer({nowarn_function, [definition/0,definition/1]}). definition() -> #process { name = 'Schedule', diff --git a/apps/roster/src/protocol/micro_auth.erl b/apps/roster/src/protocol/micro_auth.erl index e8c0d08fa8c24843e9618d76cd85576c9e2cdad7..a2be0ab02c7ae0cdfad754e4709556318658b8b4 100644 --- a/apps/roster/src/protocol/micro_auth.erl +++ b/apps/roster/src/protocol/micro_auth.erl @@ -9,7 +9,7 @@ -compile(export_all). start() -> - n2o_async:start(#handler{module = micro_auth, class = system, group = roster, name = micro_auth, state = []}). + n2o_pi:start(#pi{module = micro_auth, table = system, sup = roster, name = micro_auth, state = []}). init([Listeners]) -> {ok, Listeners}. description() -> "Micro Authentication Module". @@ -31,7 +31,7 @@ check(#mqtt_client{client_id = <<"emqttd_", _/binary>> = ClientId, username = << {ok, AccUuid} -> emqttd_client:subscribe(ClientPid, [{roster:action_topic(ClientId), 2}]), PhoneId = micro:uuid_to_id('LinkRoster', AccUuid), - AuthPid = n2o_async:pid(system, ?MODULE), + AuthPid = n2o_pi:pid(system, ?MODULE), Ver = binary_to_list(BVer), case kvs:get('Auth', ClientId) of {ok, #'Auth'{user_id = PhoneId} = Auth} -> @@ -59,7 +59,7 @@ check(#mqtt_client{client_id = <<"emqttd_", _/binary>> = ClientId, username = << end; _ -> {error, invalid_version} end; -check(#mqtt_client{client_id = <<"emqttd_", _/binary>> = ClientId, username = Username}, _, State) when Username /= <<"api">>, Username /= <<"micro">> -> +check(#mqtt_client{client_id = <<"emqttd_", _/binary>> = ClientId, username = Username}, _, _State) when Username /= <<"api">>, Username /= <<"micro">> -> roster:info(?MODULE, "~p:Auth:auth(micro)/check:invalid_username: ~p", [ClientId, Username]), {error, invalid_username}; check(_Client, _Password, _Opts) -> ignore. @@ -76,16 +76,16 @@ info(#'Auth'{type = update, client_id = <<"emqttd_", _/binary>> = ClientId, toke {error, _} -> #io{code = #error{code = session_not_found}, data = ClientId} end, {reply, {bert, IO}, Req, State}; -info(#'Auth'{type = clear, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, _Req, #cx{client_pid = C} = State) -> - Reply = {reply, {bert, IO}, _, _} = roster_auth:info(Auth, State#cx{params = ClientId}), +info(#'Auth'{type = clear, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, Req, #cx{client_pid = C} = State) -> + Reply = {reply, {bert, IO}, _, _} = roster_auth:info(Auth, Req, State#cx{params = ClientId}), roster:send_action(C, ClientId, IO), Reply; -info(#'Auth'{type = delete, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, _Req, #cx{client_pid = C} = State) -> - Reply = {reply, {bert, IO}, _, _} = roster_auth:info(Auth, State#cx{params = ClientId}), +info(#'Auth'{type = delete, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, Req, #cx{client_pid = C} = State) -> + Reply = {reply, {bert, IO}, _, _} = roster_auth:info(Auth, Req, State#cx{params = ClientId}), roster:send_action(C, ClientId, IO), Reply; info(#'Auth'{type = logout, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, Req, #cx{params = SysClientId, client_pid = C} = State) -> IO = case kvs:get('Auth', ClientId) of {ok, #'Auth'{} = StoredAuth} -> - roster_presence:on_disconnect(A = StoredAuth#'Auth'{type = logout}, C), + roster_presence:on_disconnect(StoredAuth#'Auth'{type = logout}, C), roster:send_action(C, SysClientId, Auth), %%TODO send uuid phone and roster_id to micro? <<>>; {error, _} -> #io{code = #error{code = session_not_found}} @@ -98,31 +98,31 @@ info(#'Auth'{phone = Phone} = Auth, Req, #cx{params = ClientId} = State) -> {reply, {bert, #io{code = #error{code = invalid_data}}}, Req, State}. %% micro_auth handlers -proc(init, #handler{name = micro_auth} = Async) -> +proc(init, #pi{name = micro_auth} = Async) -> {ok, C} = emqttc:start_link([{client_id, <<"micro_auth">>}, {logger, {console, error}}, {reconnect, 5}]), roster:info(?MODULE, "ASYNC AUTH PROC started", []), - {ok, Async#handler{state = C, seq = 0}}; + {ok, Async#pi{state = C}}; proc(#'Auth'{type = {ver, Ver}, phone = Phone, client_id = <<"emqttd_", _/binary>> = ClientId}, - #handler{state = C} = H) -> + #pi{state = C} = H) -> roster:info(?MODULE, "~p:~p:Auth(micro)/login", [Phone, ClientId]), catch roster_presence:on_connect(Phone, ClientId, C, Ver), %%TODO send Auth updated session? {reply, [], H}; proc({disconnect, #'Auth'{client_id = <<"emqttd_", _/binary>>} = Auth}, - #handler{state = C} = H) -> roster_presence:on_disconnect(Auth, C), + #pi{state = C} = H) -> roster_presence:on_disconnect(Auth, C), {reply, [], H}; -proc(#'Auth'{type = {reg, Ver}, client_id = <<"emqttd_", _/binary>> = ClientId, phone = Phone, user_id = UserId} = Stored, - #handler{state = C} = H) -> +proc(#'Auth'{type = {reg, Ver}, client_id = <<"emqttd_", _/binary>> = ClientId, phone = Phone, user_id = UserId}, + #pi{state = C} = H) -> roster:info(?MODULE, "~p:~p:Auth(micro)/login(created session)", [Phone, ClientId]), roster_presence:on_verify(ClientId, UserId), roster_presence:on_connect(Phone, ClientId, C, Ver), {reply, [], H}; -proc({mqttc, C, connected}, State = #handler{state = C, seq = S}) -> {ok, State#handler{seq = S + 1}}; +proc({mqttc, C, connected}, State = #pi{state = C}) -> {ok, State}; proc({mqttc, _C, disconnected}, State) -> {ok, State}; -proc(Unknown, #handler{} = H) -> +proc(Unknown, #pi{} = H) -> roster:info(?MODULE, "invalid auth data :~p", [Unknown]), {reply, [], H}. diff --git a/apps/roster/src/protocol/micro_roster.erl b/apps/roster/src/protocol/micro_roster.erl index b6ec49ca93a6af91c123e36b45b7a926ad780de1..2e9baef77eed459c4efa0b174edd082ddb3c4f96 100644 --- a/apps/roster/src/protocol/micro_roster.erl +++ b/apps/roster/src/protocol/micro_roster.erl @@ -4,7 +4,7 @@ -include_lib("n2o/include/n2o.hrl"). -compile(export_all). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Roster'{status = add, phone = LinkPhone, id = LinkRosterId} = Roster, Req, #cx{params = <<"sys_", _/binary>> = ClientId} = State) -> diff --git a/apps/roster/src/protocol/roster_acl.erl b/apps/roster/src/protocol/roster_acl.erl index 570bea6ef9a2b58ad953289146fff8d0f8ffd387..6078c0982f4a925668a5f4e03cd8000fe74ca47e 100644 --- a/apps/roster/src/protocol/roster_acl.erl +++ b/apps/roster/src/protocol/roster_acl.erl @@ -11,6 +11,7 @@ -export([init/1, check_acl/2, reload_acl/1, reload_acl/0, description/0]). -define(ACL_RULE_TAB, roster_acl_rule). +-dialyzer({nowarn_function, description/0}). -record(state, {config, nomatch = deny, vnodes = []}). %%-------------------------------------------------------------------- @@ -72,13 +73,13 @@ check_acl({#mqtt_client{client_id = <<"emqttd_", _/binary>> = Client}, publish, allow; check_acl({#mqtt_client{client_id = <<"emqttd_", _/binary>>}, publish, <<"auth/", _/binary>>}, #state{}) -> deny; -check_acl({#mqtt_client{client_id = <<"emqttd_", _/binary>> = Client}, publish, <<"events/", _/binary>>} = Who, #state{}) -> +check_acl({#mqtt_client{client_id = <<"emqttd_", _/binary>> = Client}, publish, <<"events/", _/binary>>} = _Who, #state{}) -> case kvs:get('Auth', Client) of {ok, #'Auth'{type = expired}} -> deny; {ok, _} -> allow; {error, _} -> deny end; -check_acl({Client, PubSub, Topic} = Who, #state{nomatch = Default}) -> +check_acl({Client, PubSub, Topic} = _Who, #state{nomatch = Default}) -> case match(Client, Topic, lookup(PubSub)) of {matched, allow} -> allow; {matched, deny} -> deny; diff --git a/apps/roster/src/protocol/roster_auth.erl b/apps/roster/src/protocol/roster_auth.erl index ea7d594bac65e1adb71e28efb21946f1e1e27953..b2b33297f6f8f26fec52193b79269a16052153de 100644 --- a/apps/roster/src/protocol/roster_auth.erl +++ b/apps/roster/src/protocol/roster_auth.erl @@ -16,9 +16,9 @@ -define(CHECK_FAKE_NUMBERS, application:get_env(roster, fake_numbers_check, false)). start() -> - n2o_async:start(#handler{module = roster_auth, class = system, group = roster, name = roster_auth, state = []}). + n2o_pi:start(#pi{module = roster_auth, table = system, sup = roster, name = roster_auth, state = []}). stop() -> - n2o_async:stop(system, roster_auth). + n2o_pi:stop(system, roster_auth). init([Listeners]) -> {ok, Listeners}. description() -> "Roster Authentication Module". @@ -188,8 +188,7 @@ info(#'Auth'{type = verify, phone = Phone, dev_key = DevKey, settings = Settings PhoneId = roster:phone_id(Phone, Roster), NewSettings = [F#'Feature'{id = <>} || #'Feature'{key = Key} = F <-Settings], - kvs:put(P = #'Profile'{phone = Phone, rosters = [Roster], - settings = NewSettings, update = roster:now_msec()}), + kvs:put(P = #'Profile'{phone = Phone, rosters = [Roster], settings = NewSettings, update = roster:now_msec()}), % roster:n2o_pid(?MODULE) ! {vox, P, client(RegClientId)}, {roster, Roster} end, UserId = roster:phone_id(Phone, RosterId), ClientId = client(RegClientId), @@ -273,17 +272,17 @@ info(#'Auth'{phone = Phone} = Auth, Req, #cx{params = ClientId} = State) -> {reply, {bert, #io{code = #error{code = invalid_data}}}, Req, State}. %% roster_auth handlers -proc(init, #handler{name = roster_auth} = Async) -> +proc(init, #pi{name = roster_auth} = Async) -> {ok, C} = emqttc:start_link([{client_id, <<"roster_auth">>}, {logger, {console, error}}, {reconnect, 5}]), _ = (catch locus:start_loader(city, application:get_env(locus, url, ?GEO_URL))), case catch locus:wait_for_loader(city, 10000) of {ok, _} -> ok; Err -> roster:error(?MODULE, "error:~p:locus", [Err]) end, roster:info(?MODULE, "ASYNC AUTH PROC:~p started", [C]), - {ok, Async#handler{state = C, seq = 0}}; + {ok, Async#pi{state = C}}; -%%proc(#'Auth'{type = verified, client_id = <<"emqttd_", Post/binary>> = ClientId, user_id = UserId} = Stored, #handler{} = H) -> +%%proc(#'Auth'{type = verified, client_id = <<"emqttd_", Post/binary>> = ClientId, user_id = UserId} = Stored, #pi{} = H) -> %% proc(Stored#'Auth'{type = {reg,?VERSION}}, H); -proc(#'Auth'{type = {reg,Ver}, client_id = <<"emqttd_", Post/binary>> = ClientId, user_id = UserId} = Stored, #handler{} = H) -> +proc(#'Auth'{type = {reg,Ver}, client_id = <<"emqttd_", Post/binary>> = ClientId, user_id = UserId} = Stored, #pi{} = H) -> Reply = proc(Stored#'Auth'{type = {ver,Ver}}, H), RegClientId = <<"reg_", Post/binary>>, n2o_vnode:unsubscribe(RegClientId, roster:action_topic(RegClientId)), @@ -292,24 +291,24 @@ proc(#'Auth'{type = {reg,Ver}, client_id = <<"emqttd_", Post/binary>> = ClientId %%proc(#'Auth'{type = [], token = Token, phone = Phone, client_id = <<"emqttd_", _/binary>> = ClientId}=Auth,H)-> %% proc(Auth#'Auth'{type = {ver,?VERSION}}, H); proc(#'Auth'{type = {ver,Ver}, token = Token, phone = Phone, client_id = <<"emqttd_", _/binary>> = ClientId}, - #handler{state = C} = H) -> + #pi{state = C} = H) -> NewC=roster:restart_module(C,roster_auth), roster:info(?MODULE, "~p:~p:Auth/login:~p", [Phone, ClientId, binary:part(Token, 0, 16)]), catch roster_presence:on_connect(Phone, ClientId, NewC, Ver), - {reply, [], H#handler{state = NewC}}; -proc(#'Auth'{type = update, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, #handler{state = C} = H) -> + {reply, [], H#pi{state = NewC}}; +proc(#'Auth'{type = update, client_id = <<"emqttd_", _/binary>> = ClientId} = Auth, #pi{state = C} = H) -> {ok, #'Auth'{token = T}} = kvs:get('Auth', ClientId), %NewC=roster:restart_module(C,roster_auth), {'Token', Token2} = roster:gen_token([], binary:part(T, 0, 10)), roster:info(?MODULE, "~p:Auth/update:~p", [ClientId, binary:part(Token2, 0, 16)]), catch n2o_vnode:send(C, roster:action_topic(ClientId), term_to_binary(Auth#'Auth'{token = Token2}), [{qos, 0}]), - {reply, [], H#handler{state = C}}; -proc({disconnect, #'Auth'{client_id = <<"emqttd_", _/binary>>} = Auth}, #handler{state = C} = H) -> + {reply, [], H#pi{state = C}}; +proc({disconnect, #'Auth'{client_id = <<"emqttd_", _/binary>>} = Auth}, #pi{state = C} = H) -> % NewC=roster:restart_client(C,<<"roster_auth">>), % spawn(roster, client_pid, [C,<<"roster_auth">>]), catch roster_presence:on_disconnect(Auth, C), - {reply, [], H#handler{state = C}}; -proc({vox, #'Profile'{phone = Phone, services = Services} = Profile, Cli}, #handler{state = C} = H) -> + {reply, [], H#pi{state = C}}; +proc({vox, #'Profile'{phone = Phone, services = Services} = Profile, Cli}, #pi{state = C} = H) -> {VoxStatus, VoxResponse} = vox_api:create_voximplant_user(Phone), Service = case VoxStatus of ok -> {VoxResponse1} = VoxResponse, @@ -323,7 +322,7 @@ proc({vox, #'Profile'{phone = Phone, services = Services} = Profile, Cli}, #hand Profile2#'Profile'{presence = online, rosters = lists:map(fun roster:roster/1, Rosters)}) end, {reply, [], H}; -proc({sms, Phone, SmsCode}, #handler{} = H) -> +proc({sms, Phone, SmsCode}, #pi{} = H) -> roster:info(?MODULE, "~p:sms:~p", [Phone, SmsCode]), Half = size(SmsCode) - round(size(SmsCode) / 2), [Codes1, Codes2] = [binary:part(SmsCode, S, Half) || S <- [0, Half]], @@ -331,14 +330,14 @@ proc({sms, Phone, SmsCode}, #handler{} = H) -> spawn(fun () -> telesign_api:send_sms(Phone, ClientSms, fun(_) -> ok end) end), {reply, [], H}; -proc({voice, Phone, SmsCode, Lang}, #handler{} = H) -> +proc({voice, Phone, SmsCode, Lang}, #pi{} = H) -> roster:info(?MODULE, "~p:telesign:~p:~p", [Phone, SmsCode, Lang]), % telesign_api:telesign_voice_call(Phone, SmsCode, [], Lang), {reply, [], H}; -proc({mqttc, C, connected}, State = #handler{state = C, seq = S}) -> {ok, State#handler{seq = S + 1}}; +proc({mqttc, C, connected}, State = #pi{state = C}) -> {ok, State}; proc({mqttc, _C, disconnected}, State) -> {ok, State}; -proc(Unknown, #handler{} = H) -> +proc(Unknown, #pi{} = H) -> roster:info(?MODULE, "invalid auth data :~p", [Unknown]), {reply, [], H}. diff --git a/apps/roster/src/protocol/roster_bpe.erl b/apps/roster/src/protocol/roster_bpe.erl index 2e105a5bc3f01114e617b00951706c852e032d70..1d3ae5f659c93a1c623617ababd25d271d38c683 100644 --- a/apps/roster/src/protocol/roster_bpe.erl +++ b/apps/roster/src/protocol/roster_bpe.erl @@ -12,7 +12,7 @@ -define(JOBS_MS_LIMIT, 500). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'History'{roster_id = Roster, feed = Feed, size = N, entity_id = MId, status = get} = Data, Req, #cx{params = ClientId} = State) -> @@ -31,7 +31,7 @@ info(#'History'{roster_id = Roster, feed = Feed, size = N, entity_id = MId, stat {ok, #reader{cache = []} = Rdr} when MId == 0 -> #writer{count = Count, cache = #'Job'{id = Id}} = Writer, case Count of - 0 -> n2o:error(?MODULE, "There are not messages: ~p:~n", [Writer]), {[], 0}, <<>>; + 0 -> roster:error(?MODULE, "There are not messages: ~p:~n", [Writer]), {[], 0}, <<>>; _ -> #reader{cache = {_, RId}} = kvs_stream:save(kvs_stream:top((Rdr#reader{dir = 0}))), %{ok,#'Job'{prev = ID }}=kvs:get('Job',RId), Js = roster:exclude({'Job', RId}, #'Job'.status, -?JOBS_LIMIT, 0, []), @@ -72,7 +72,7 @@ info(#'Job'{id = [], feed_id = {act, <<"publish">>, PhoneId} = Feed, time = [], %J = J0#'Job'{id = Id = kvs:next_id('Job', 1)}, Replay = case roster:phone_id(ClientId) of PhoneId -> %roster:restart_module(Pid,?MODULE), - n2o_async:pid(system, ?MODULE) ! {send, Msgs}, <<>>; + n2o_pi:pid(system, ?MODULE) ! {send, Msgs}, <<>>; _ -> roster_channel_helper:error_response_400(RequestData) %% #io{code = #error{code = invalid_data}} end, @@ -108,7 +108,7 @@ info(#'Job'{id = [], feed_id = {act, <<"publish">>, PhoneId} = Feed, time = Time {J0#'Job'{time = round(Time / ?QUANT) * ?QUANT, context = NewR}, {0, 0}}; _ -> {J0#'Job'{time = round(Time / ?QUANT) * ?QUANT}, {0, 0}} end, - catch n2o_async:pid(system, ?MODULE) ! {update, J#'Job'{container = chain, data = D, status = pending}, Context, S}, + catch n2o_pi:pid(system, ?MODULE) ! {update, J#'Job'{container = chain, data = D, status = pending}, Context, S}, <<>>; _ -> roster_channel_helper:error_response_400(J0) %% #io{code = #error{code = invalid_data}} @@ -132,11 +132,11 @@ info(#'Job'{id = Id, time = T0, feed_id = {act, <<"publish">>, PhoneId} = Feed, {ok, #'Schedule'{id = SID, data = Data} = Sh} when abs(Time - OldTime) > 2 * ?QUANT, NData /= 0 -> case Data--[{'Job', Id}] of [] -> kvs:delete('Schedule', SID); ND -> kvs:put(Sh#'Schedule'{data = ND}) end, - n2o_async:pid(system, ?MODULE) ! {update, NewJ, {OldTime, 0}, S}, <<>>; + n2o_pi:pid(system, ?MODULE) ! {update, NewJ, {OldTime, 0}, S}, <<>>; {ok, #'Schedule'{}} when NData /= 0 -> kvs:put(NewJ), roster:send_ses(C, roster:phone(PhoneId), NewJ#'Job'{status = update}), <<>>; - _ when NData /= 0 -> n2o_async:pid(system, ?MODULE) ! {update, NewJ, {OldTime, 0}, S}, + _ when NData /= 0 -> n2o_pi:pid(system, ?MODULE) ! {update, NewJ, {OldTime, 0}, S}, <<>>; __________ -> roster_channel_helper:error_response_400(RequestData) %% #io{code = #error{code = invalid_data}} @@ -191,7 +191,7 @@ info(#'Job'{feed_id = Feed} = RequestData, R, S) -> info(M, R, S) -> roster:info(?MODULE, "UNKNOWN:~w", [M]), {unknown, M, R, S}. -proc(init, #handler{name = roster_bpe} = Async) -> +proc(init, #pi{name = roster_bpe} = Async) -> {ok, C} = emqttc:start_link([{client_id, <<"sys_bpe">>}, {logger, {console, error}}, {reconnect, 5}]), Table = process, Proc = case kvs:get(feed, Table) of @@ -221,10 +221,10 @@ proc(init, #handler{name = roster_bpe} = Async) -> % bpe:amend(Proc,{send_pid, C},noflow), roster:info(?MODULE, "ASYNC BPE started: ~p; ~p", [C, Proc]), % Proc is transfered through state - {ok, Async#handler{state = {C, Proc}, seq = 0}}; + {ok, Async#pi{state = {C, Proc}}}; proc({update, #'Job'{id = Id0, time = Time, feed_id = {act, <<"publish">>, PhoneId} = Feed, data = D} = J, {OldTime, Limit}, - #cx{params = ClientId} = CX}, #handler{state = {C, Proc}} = H) when Limit < 8 -> + #cx{params = ClientId} = CX}, #pi{state = {C, Proc}} = H) when Limit < 8 -> roster:restart_module(C,roster_bpe), P = bpe:load(Proc), {NewJ0, Id} = case Id0 of [] -> NId = kvs:next_id('Job', 1), {J#'Job'{id = NId, proc = Proc}, NId}; _ -> @@ -267,24 +267,24 @@ proc({update, #'Job'{id = Id0, time = Time, feed_id = {act, <<"publish">>, Phone case NewD of [] -> roster:send_ses(C, roster:phone(PhoneId), case OldTime of 0 -> NewJ; _ -> NewJ#'Job'{status = update} end), - {reply, [], H#handler{state = {C, Proc}}}; + {reply, [], H#pi{state = {C, Proc}}}; _ -> try amend(Proc, NewSh = #'Schedule'{id = T, proc = Proc, data = NewD}, Par), roster:send_ses(C, roster:phone(PhoneId), case OldTime of 0 -> NewJ; _ -> NewJ#'Job'{status = update} end), - {reply, [], H#handler{state = {C, Proc}}} - catch Err:Rea -> n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]), + {reply, [], H#pi{state = {C, Proc}}} + catch Err:Rea -> roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]), restart_bpe(P, C), timer:sleep(300), bpe:complete(Proc), - proc({update, NewJ0, {OldTime, Limit + 1}, CX}, #handler{state = {C, Proc}, seq = S} = H) + proc({update, NewJ0, {OldTime, Limit + 1}, CX}, #pi{state = {C, Proc}} = H) end end; proc({update, #'Job'{id = Id0, time = Time, feed_id = {act, <<"publish">>, PhoneId} = Feed, data = D} = J, {OldTime, Limit}, - #cx{params = ClientId} = S}, #handler{state = {C, Proc}} = H) -> + #cx{params = ClientId} = S}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE update limit ~p; ~p", [C, Proc]), {reply, [], H}; -proc({publish, #process{id = Id} = P}, #handler{state = {C, Proc}, seq = S} = H) -> +proc({publish, #process{id = Id} = P}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC publish: ~p", [Id]), roster:restart_module(C,roster_bpe), %#act{data=Jobs}=bpe:doc(#act{},Proc), @@ -307,65 +307,65 @@ proc({publish, #process{id = Id} = P}, #handler{state = {C, Proc}, seq = S} = H) #'Schedule'{id = Current} -> Current; _ -> roster:now_msec() end, job:clear_hist(P), - proc({next, P, Curr}, #handler{state = {C, Proc}, seq = S} = H); + proc({next, P, Curr}, #pi{state = {C, Proc}} = H); -proc({next, #process{id = Id} = P, Current}, #handler{state = {C, Proc}, seq = S} = H) -> +proc({next, #process{id = Id} = P, Current}, #pi{state = {C, Proc}} = H) -> %roster:info(?MODULE, "BPE PROC next: ~p", [P]), FirstS = try mnesia:dirty_first('Schedule') of '$end_of_table' -> Current; Key -> Key catch _ -> Current end, Stop = #'Schedule'{id = roster:now_msec(), data = <<"stop">>}, Docs = case job:next('Schedule', Current) of - [] -> [Stop]; + [] -> Stop; % kvs:put(Stop); - Doc when FirstS =:= Current -> [Doc]; + Doc when FirstS =:= Current -> Doc; _ -> case kvs:get('Schedule', FirstS) of - {ok, #'Schedule'{} = Doc} -> [Doc]; - _ -> [Stop] + {ok, #'Schedule'{} = Doc} -> Doc; + _ -> Stop end end, - try bpe:amend(Id, Docs) catch Err:Rea -> n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]) end, + try bpe:amend(Id, Docs) catch Err:Rea -> roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]) end, kvs:delete('Schedule', Current), {reply, [], H}; -proc({restart, #'process'{id = Id} = P}, #handler{state = {C, Proc}, seq = S} = H) -> +proc({restart, #'process'{id = Id} = P}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC restarted", []), % P1=job_process:update_event(P, 'Action', {0, {0, 0, 1}}), Proc = restart_bpe(P, C), bpe:complete(Proc), - {reply, [], #handler{state = {C, Proc}} = H}; + {reply, [], #pi{state = {C, Proc}} = H}; -proc({timeout, #'Schedule'{id = Current} = Sh, T}, #handler{state = {C, Proc}} = H) -> +proc({timeout, #'Schedule'{id = Current} = Sh, T}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC Timeout: ~p", [T]), %{value,#boundaryEvent{timeout = BT},_}=lists:keytake('*',#boundaryEvent.name,bpe:events(P)), %{ok, TRef} = timer:apply_after(T, bpe, complete, [Proc]), {ok, TRef} = timer:apply_after(T, roster_bpe, publish, [Proc]), try bpe:amend(Proc, Sh#'Schedule'{state = TRef}, noflow) catch Err:Rea -> - n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]) end, kvs:put(Sh#'Schedule'{state = TRef}), + rosetr:error(?MODULE, "Catch:~p~n", [{Err, Rea}]) end, kvs:put(Sh#'Schedule'{state = TRef}), %job_process:update_opt(bpe:load(Proc),{timer,TRef}), {reply, [], H}; -proc({clean, #'process'{id = Id} = P}, #handler{state = {C, Proc}} = H) -> +proc({clean, #'process'{id = Id} = P}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC clean", []), bpe:complete(Id), {value, #boundaryEvent{timeout = BT}, _} = lists:keytake('*', #boundaryEvent.name, bpe:events(P)), %bpe:find_pid(Id) ! {'DOWN', <<>>, <<>>, <<>>, <<>>}, - timer:apply_after(roster:daystimeToms(BT) + 5000, bpe, cleanup, [Id]), + timer:apply_after(roster:daystime_to_ms(BT) + 5000, bpe, cleanup, [Id]), {reply, [], H}; -proc({send, Msgs}, #handler{state = {C, Proc}} = H) -> +proc({send, Msgs}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC send", []), roster:restart_module(C,roster_bpe), -% [case kvs:get(mqtt_session, roster:get_vnode(Msg)) of {ok,#mqtt_session{sess_pid = Pid}} -> n2o_async:send(Pid,{publish, , Msg}); _ -> skip end || Msg = #'Message'{} <- Msgs], +% [case kvs:get(mqtt_session, roster:get_vnode(Msg)) of {ok,#mqtt_session{sess_pid = Pid}} -> n2o_pi:send(Pid,{publish, , Msg}); _ -> skip end || Msg = #'Message'{} <- Msgs], [begin roster:send_event(C, <<"sys_bpe">>, <<>>, Msg, roster:get_vnode(<<"sys_bpe">>,Msg)),timer:sleep(5) end || Msg = #'Message'{} <- Msgs], - {reply, [], H#handler{state = {C, Proc}}}; + {reply, [], H#pi{state = {C, Proc}}}; -proc({mqttc, C, connected}, State = #handler{state = {C, Proc}, seq = S}) -> {ok, State#handler{seq = S + 1}}; +proc({mqttc, C, connected}, State = #pi{state = {C, Proc}}) -> {ok, State}; proc({mqttc, _C, disconnected}, State) -> {ok, State}. -publish(Proc) -> n2o_async:pid(system, ?MODULE) ! {publish, bpe:load(Proc)}. +publish(Proc) -> n2o_pi:pid(system, ?MODULE) ! {publish, bpe:load(Proc)}. restart_bpe(#process{id = Id} = P, _C) -> try case bpe:find_pid(Id) of @@ -399,4 +399,4 @@ set_schedule(_, Time, #'Job'{id = Id, proc = Proc, time = T0} = J) -> action(#'History'{status=update}=Term,R,S)-> - roster_history:info(Term, R, S). \ No newline at end of file + roster_history:info(Term, R, S). diff --git a/apps/roster/src/protocol/roster_friend.erl b/apps/roster/src/protocol/roster_friend.erl index 60623787c6e2aa4448884224b829db03f961263e..aebe15a752566484875c10dd2ced905d3c8913a1 100644 --- a/apps/roster/src/protocol/roster_friend.erl +++ b/apps/roster/src/protocol/roster_friend.erl @@ -5,7 +5,7 @@ -include_lib("kvs/include/kvs.hrl"). -compile(export_all). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Friend'{phone_id = Me, friend_id = Friend, status = request}, {Req, handled}, #cx{params = ClientId, client_pid = C} = State) -> @@ -14,7 +14,7 @@ info(#'Friend'{phone_id = Me, friend_id = Friend, status = request}, {Req, handl [{ok, FromR}, {ok, ToR}] = [kvs:get('Roster', Id) || Id <- [FromId, ToId]], D = case {roster:get_contact(FromR, Friend), roster:get_contact(ToR, Me)} of {#'Contact'{status = S1}, #'Contact'{status = S2}} when S1 =/= [];S2 =/= [] -> - #io{code = invalid_data}; + #io{code = #error{code = invalid_data}}; _ -> [Mc] = roster:to_contact([FromR], authorization), [Fc] = roster:to_contact([ToR], request), @@ -25,7 +25,7 @@ info(#'Friend'{phone_id = Me, friend_id = Friend, status = request}, {Req, handl _Remote = roster:add_contacts(FromR, [Friendc]), roster:send_ses(C, To, roster:presence(#'Contact'{reader = Rs} = roster:readmsgs(Mec, Friend))), roster:send_ses(C, From, roster:presence(Friendc#'Contact'{reader = lists:reverse(Rs)})), - n2o_async:pid(system, ?MODULE) ! {send_push, Me, Friend, <<"request">>}, + n2o_pi:pid(system, ?MODULE) ! {send_push, Me, Friend, <<"request">>}, roster:info(?MODULE, "~p:~p:Friend/request:~p", [Me, ClientId, Friend]), <<>> end, @@ -52,7 +52,7 @@ info(#'Friend'{friend_id = Friend, status = ignore}, Req, #cx{params = ClientId, case roster:update_contact(Me, Contact2 = Contact#'Contact'{status = ignore}) of {ok, added} -> roster:send_ses(C, roster:phone(Me), roster:presence(Contact2)), <<>>; E -> #io{code = E} end; - _ -> #io{code = invalid_data} + _ -> #io{code = #error{code = invalid_data}} end, {reply, {bert, IO}, Req, State}; @@ -84,9 +84,9 @@ info(#'Friend'{friend_id = Friend, status = confirm}, Req, #cx{params = ClientId [n2o_vnode:subscribe(Client, Topic) || Client <- Tos ++ Froms], roster:send_ses(C, To, Mec2 = roster:presence(#'Contact'{reader = Rs} = roster:readmsgs(Mec#'Contact'{update = Now, created = Now, unread = 1}, Friend))), roster:send_ses(C, From, roster:presence(Friendc#'Contact'{update = Now, created = Now, unread = 1, reader = lists:reverse(Rs)})), - n2o_async:pid(system, ?MODULE) ! {send_push, Mec2, Friend, <<"friend">>}, + n2o_pi:pid(system, ?MODULE) ! {send_push, Mec2, Friend, <<"friend">>}, {io, Local, Remote}; - _ -> #io{code = invalid_data} + _ -> #io{code = #error{code = invalid_data}} end, {reply, {bert, D}, Req, State}; @@ -160,14 +160,14 @@ info(#'Friend'{phone_id = Roster, friend_id = Friend} = F, Req, State) -> roster:info(?MODULE, "~p:~p:Friend/unknown", [Roster, F]), {reply, {bert, <<>>}, Req, State}. -proc(init, #handler{name = ?MODULE} = Async) -> +proc(init, #pi{name = ?MODULE} = Async) -> roster:info(?MODULE, "ASYNC", []), {ok, Async}; -proc({send_push, #'Contact'{names = FromName} = FromContactPayload, To, PushType}, #handler{} = H) -> +proc({send_push, #'Contact'{names = FromName} = FromContactPayload, To, PushType}, #pi{} = H) -> ActionText = case PushType of <<"request">> -> " wants to add you on NYNJA!"; _ -> " accepted your contact request! Send a message!" end, PushAlert = iolist_to_binary([FromName, ActionText]), [roster_push:send_push_notification(Ses, FromContactPayload, PushAlert, PushType) || #'Auth'{} = Ses <- kvs:index('Auth', user_id, To)], {reply, [], H}; -proc({send_push, From, To, PushType}, #handler{} = H) -> +proc({send_push, From, To, PushType}, #pi{} = H) -> proc({send_push, roster:user(roster:roster_id(To), From), To, PushType}, H). diff --git a/apps/roster/src/protocol/roster_ftp.erl b/apps/roster/src/protocol/roster_ftp.erl index 8a498de0901bdf19417aaf59017fd9f4c9aa6d58..85542215c2e52ff3d67b3b2985ae672f12349ae2 100644 --- a/apps/roster/src/protocol/roster_ftp.erl +++ b/apps/roster/src/protocol/roster_ftp.erl @@ -7,7 +7,11 @@ -define(ROOT, application:get_env(roster, upload, code:priv_dir(roster))). -define(NEXT, 250 * 1024). % 256K chunks for best 25MB/s speed -define(STOP, 0). - +-define(N2O_ENV, application:get_all_env(n2o)). +-define(REPLY_ENCODER, + begin + proplists:get_value(formatter,?N2O_ENV,n2o_bert) + end). % Callbacks filename(#ftp{sid = Sid, filename = FileName}) -> FileName. %filename:join(nitro:to_list(Sid),FileName). @@ -20,10 +24,11 @@ info(#ftp{status = {event, _}} = FTP, Req, State) -> [] -> index; M -> M end, Reply = try Module:event(FTP) - catch E:R -> Error = n2o:stack(E, R), - roster:info(?MODULE, "Catch: ~p:~p~n~p", Error), - Error end, - {reply, n2o:format({io, n2o_nitro:render_actions(n2o:actions()), Reply}), Req, State}; + catch E:R -> + roster:error(?MODULE, "Catch: ~p~n", {E, R}), + [E, R, erlang:get_stacktrace()] + end, + {reply, {bert, reply_encode(Reply)}, Req, State}; %% TODO delete RelPath usage info(#ftp{id = Link, status = <<"init">>, block = Block, offset = Offset} = FTP, Req, State) -> @@ -40,14 +45,14 @@ info(#ftp{id = Link, status = <<"init">>, block = Block, offset = Offset} = FTP, Offset2 = case FileSize >= Offset of true -> FileSize; false -> 0 end, FTP2 = FTP#ftp{block = Block2, offset = Offset2, data = <<>>}, - n2o_async:stop(file, Link), - n2o_async:start(#handler{module = ?MODULE, class = file, group = n2o, state = FTP2, name = Link}), + n2o_pi:stop(file, Link), + n2o_pi:start(#pi{module = ?MODULE, table = file, sup = n2o, state = FTP2, name = Link}), {reply, {bert, FTP2}, Req, State}; info(#ftp{id = Link, status = <<"send">>} = FTP, Req, State) -> roster:info(?MODULE, "Info Send: ~p", [FTP#ftp{data = <<>>}]), - Reply = try gen_server:call(n2o_async:pid({file, Link}), FTP) + Reply = try gen_server:call(n2o_pi:pid({file, Link}), FTP) catch E:R -> skip, roster:info(?MODULE, "Info Error call the sync: ~p", [{E, R}]), FTP#ftp{data = <<>>, block = ?STOP} end, @@ -58,7 +63,7 @@ info(Message, Req, State) -> {unknown, Message, Req, State}. % n2o Handlers -proc(init, #handler{state = #ftp{sid = Sid, meta = ClientId} = FTP} = Async) -> +proc(init, #pi{state = #ftp{sid = Sid, meta = ClientId} = FTP} = Async) -> roster:info(?MODULE, "Proc Init: ~p~n Sid: ~p ClientId: ~p", [FTP#ftp{data = <<>>}, Sid, ClientId]), FTP2 = FTP#ftp{data = <<>>, status = {event, init}}, roster:info(?MODULE, "~n~n~n~n FTP2 ~p ~n~n~n~n", [FTP2]), @@ -67,7 +72,7 @@ proc(init, #handler{state = #ftp{sid = Sid, meta = ClientId} = FTP} = Async) -> proc(#ftp{id = Link, sid = Sid, data = Data, status = <<"send">>, block = Block, meta = ClientId} = FTP, - #handler{state = #ftp{size = TotalSize, offset = Offset, filename = RelPath}} = Async) when Offset + Block >= TotalSize -> + #pi{state = #ftp{size = TotalSize, offset = Offset, filename = RelPath}} = Async) when Offset + Block >= TotalSize -> {S3_Status, S3_Data} = amazon_api:push_to_s3([], RelPath, Data, []), case S3_Status of ok -> @@ -75,23 +80,26 @@ proc(#ftp{id = Link, sid = Sid, data = Data, status = <<"send">>, block = Block, FTP2 = FTP#ftp{data = <<>>, block = ?STOP}, FTP3 = FTP2#ftp{status = {event, stop}, filename = RelPath}, n2o_ring:send({publish, <<"events/1//index/anon/", ClientId/binary, "/", Sid/binary>>, term_to_binary(FTP3)}), - spawn(fun() -> n2o_async:stop(file, Link) end), - {stop, normal, FTP2, Async#handler{state = FTP2}}; + spawn(fun() -> n2o_pi:stop(file, Link) end), + {stop, normal, FTP2, Async#pi{state = FTP2}}; _ -> - {reply, {error, S3_Data / binary}, Async} + {reply, {error, S3_Data}, Async} end; proc(#ftp{data = Data, block = Block} = FTP, - #handler{state = #ftp{offset = Offset, filename = RelPath}} = Async) -> + #pi{state = #ftp{offset = Offset, filename = RelPath}} = Async) -> FTP2 = FTP#ftp{status = <<"send">>, offset = Offset + Block}, roster:info(?MODULE, "Proc Process ~p", [FTP2#ftp{data = <<>>}]), {S3_Status, S3_Data} = amazon_api:push_to_s3([], RelPath, Data, []), case S3_Status of ok -> roster:info(?MODULE, "~n~n Uploaded to S3 file with link ~p ~n~n", [S3_Data]), - {reply, FTP2#ftp{data = <<>>}, Async#handler{state = FTP2#ftp{filename = RelPath}}}; + {reply, FTP2#ftp{data = <<>>}, Async#pi{state = FTP2#ftp{filename = RelPath}}}; _ -> - {reply, {error, S3_Data / binary}, Async} + {reply, {error, S3_Data }, Async} end; -proc(_, Async) -> {reply, #ftpack{}, Async}. \ No newline at end of file +proc(_, Async) -> {reply, #ftpack{}, Async}. + +reply_encode(Reply)-> + (?REPLY_ENCODER):encode(Reply). \ No newline at end of file diff --git a/apps/roster/src/protocol/roster_history.erl b/apps/roster/src/protocol/roster_history.erl index 91004dbadde05b3d000277a27731631c3114d044..9a1d22237e9f50d1ceda3d36276c5244a0203eae 100644 --- a/apps/roster/src/protocol/roster_history.erl +++ b/apps/roster/src/protocol/roster_history.erl @@ -4,7 +4,7 @@ -include_lib("kvs/include/kvs.hrl"). -compile(export_all). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). -define(HISTORY_UPDATE_ACTION, <<"history_update">>). -define(HISTORY_DELETE_ACTION, <<"history_delete">>). @@ -47,6 +47,7 @@ info(#'History'{status = get} = History, Req, #cx{state = []} = State) -> info(History, Req, State#cx{state = {status, get}}); info(#'History'{status = get, feed = [], data = [#'Message'{feed_id = Feed}|_]} = History, Req, State) when Feed /= []-> info(History#'History'{feed = Feed}, Req, State); + info(#'History'{status = get, roster_id = Roster0, feed = Feed, size = N, entity_id = MId, data = MsgData} = History, Req, #cx{params = ClientId, state = {status, InitialStatus}} = State) when N /= 0 andalso (is_record(Feed, p2p) orelse is_record(Feed, muc)) andalso @@ -180,12 +181,12 @@ info(#'History'{status = update, feed = Feed, entity_id = MId}, Req, members = [roster:reader_cache(roster:muc_member(PhoneId, Room, presence))]}, roster:reader_cache(UpdRoom#'Room'.readers)}; #p2p{} -> {_, FR, _, U} = roster:get_feed_data(Feed, roster:friend(PhoneId, Feed)), - {U, [roster:reader_cache(RId) || RId <- [FR, UpdReader]]}; - _ -> {<<>>, <<>>} + {U, [roster:reader_cache(RId) || RId <- [FR, UpdReader]]} + % _ -> {<<>>, <<>>} %% TODO: ------------------- To be removed in the future. ------------------- end, Res = roster:update_field(Record, [{unread, Unread}, {reader, Readers }, {readers, Readers }, {status, last_msg}]), roster:send_ses(C, From, Res), - n2o_async:pid(system, ?MODULE) ! {send_push, PhoneId, Feed, ?HISTORY_UPDATE_ACTION}, + n2o_pi:pid(system, ?MODULE) ! {send_push, PhoneId, Feed, ?HISTORY_UPDATE_ACTION}, <<>>; false -> Unread end, @@ -207,7 +208,7 @@ info(#'History'{feed = Feed, status = delete}, Req, #cx{client_pid = C, params = %% D=case is_integer(Unread) of true -> roster:send_ses(C, From, roster:update_field(FList,Record,unread,Unread)), <<>>; false -> Unread end, roster:send_feed(C, Feed, roster:readmsgs(Internal#'Message'{next = []}, PhoneId)), %% send push if no history clean error occured - n2o_async:pid(system, ?MODULE) ! {send_push, PhoneId, Feed, ?HISTORY_DELETE_ACTION}, + n2o_pi:pid(system, ?MODULE) ! {send_push, PhoneId, Feed, ?HISTORY_DELETE_ACTION}, <<>>; {I,_} -> I end, {reply, {bert, IO}, Req, State}; @@ -270,18 +271,18 @@ clean_history(Feed, From, To, Rs) -> _ -> {#io{code = #error{code = invalid_data}}, <<>>} end. -proc(init, #handler{name = roster_history} = Async) -> +proc(init, #pi{name = roster_history} = Async) -> roster:info(?MODULE, "ASYNC:~p", [?MODULE]), {ok, Async}; -proc({send_push, ToPhoneId, Feed, Action}, #handler{} = H) -> +proc({send_push, ToPhoneId, Feed, Action}, #pi{} = H) -> PushType = <<"message">>, Payload = case Feed of {muc, RoomId} -> try Room = #'Room'{} = roster:room(roster:roster_id(ToPhoneId), RoomId), case Action of ?HISTORY_UPDATE_ACTION -> Room#'Room'{last_msg = []}; _ -> Room end catch Err:Rea -> - roster:error(?MODULE, ":~p~n", [n2o:stack_trace(Err, Rea)]) + roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]) end; #p2p{} -> Contact = roster:user(roster:roster_id(ToPhoneId), roster:friend(ToPhoneId, Feed)), diff --git a/apps/roster/src/protocol/roster_link.erl b/apps/roster/src/protocol/roster_link.erl index 632de7d92fb5959a363357c9150f06e189652508..95ecc1ba76fbc7d43bead40e5390ba559a9847c6 100644 --- a/apps/roster/src/protocol/roster_link.erl +++ b/apps/roster/src/protocol/roster_link.erl @@ -57,9 +57,8 @@ info(#'Link'{id = LinkId, room_id = RoomId, type = Type, status = update = LStat Res = case roster:muc_member(ClientId, RoomId) of #'Member'{status = Status} when Status == owner; Status == admin -> case update_link(RequestData) of - {error, invalid_data} = E -> #io{code = E}; - {error, not_found} = E -> #io{code = E}; - NewLink -> NewLink + #'Link'{} = NewLink -> NewLink; + {error, invalid_data} = E -> #io{code = E} end; #'Member'{status = member} -> #io{code = #error{code = permission_denied}}; @@ -89,15 +88,17 @@ info(#'Link'{} = RequestData, Req, #cx{params = ClientId} = State) -> update_link(#'Link'{id=[], room_id = EId, type=Type}) ->gen_link(EId,Type); update_link(#'Link'{id=LinkId, room_id = EId, type=Type} = Link) -> - case get_link(kvs:get('Room',EId)) of - #'Link'{id=LinkId, room_id = EId} = L -> kvs:put(NewL=L#'Link'{type=Type}), - NewL#'Link'{status=update}; - #'Link'{id=Links0, room_id = EId} = L -> ok = kvs:delete('Link', Links0), - kvs:put(NewL=L#'Link'{id=LinkId, created=roster:now_msec(),type=Type}), - NewL#'Link'{status=update}; - {error, not_found} -> {error, invalid_data}; - E -> E - end. + case get_link(kvs:get('Room',EId)) of + #'Link'{id=LinkId, room_id = EId} = L -> + kvs:put(NewL=L#'Link'{type=Type}), + NewL#'Link'{status=update}; + #'Link'{id=Links0, room_id = EId} = L -> + ok = kvs:delete('Link', Links0), + kvs:put(NewL=L#'Link'{id=LinkId, created=roster:now_msec(),type=Type}), + NewL#'Link'{status=update}; + _ -> + {error, invalid_data} + end. %% NOTE - Not used at the moment, to be finished in next release @@ -127,7 +128,7 @@ delete_link(ClientId, #'Link'{id = LinkId, room_id = RoomId}) -> lists:map( fun (#'Member'{status = member}) -> {error, permission_denied}; - (#'Member'{status = Status}) when Status == owner; Status == admin -> + (#'Member'{status = Status}) when Status =:= admin; Status =:= owner -> case kvs:get('Room', RoomId) of {ok, #'Room'{id = RoomId, links = Links} = Room} -> ok = kvs:put(Room#'Room'{links = lists:keydelete(LinkId, #'Link'.id, Links)}), diff --git a/apps/roster/src/protocol/roster_message.erl b/apps/roster/src/protocol/roster_message.erl index 67c7dd4fdf3a236f8a5ab66a8110a7537e565467..b9796cd5c6a749139251982d435c9fee23f225a9 100644 --- a/apps/roster/src/protocol/roster_message.erl +++ b/apps/roster/src/protocol/roster_message.erl @@ -10,7 +10,7 @@ -define(MSG_EDIT_ACTION, <<"message_edit">>). -define(MSG_DELETE_ACTION, <<"message_delete">>). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Typing'{phone_id = Phone, comments = Comments}, Req, #cx{} = State) -> @@ -97,7 +97,7 @@ info(#'Message'{status = [], id = [], feed_id = F, from=From0, to = To, roster:info(?MODULE, "~p:Message/new:~p", [From, To]), %% have to skip push notifications for call bubbles case [lists:keyfind(BubbleContentType, #'Desc'.mime, Descs) || BubbleContentType <- [?CONTENT_TYPE_VIDEOCALL, ?CONTENT_TYPE_AUDIOCALL]] of - [false, false] -> n2o_async:pid(system, ?MODULE) ! {send_push, From, To, Msg2, []}; + [false, false] -> n2o_pi:pid(system, ?MODULE) ! {send_push, From, To, Msg2, []}; _ -> skip end, <<>> @@ -145,10 +145,9 @@ info(#'Message'{status = edit, id = Id, msg_id = ClMID, feed_id = Feed, from = F %% move cursor kvs_stream:save(R = kvs_stream:top(kvs_stream:load_reader(Reader))), roster:put_readers(write_top, Ent, R), - n2o_async:pid(system, ?MODULE) ! {send_push, From1, To1, Internal, ?MSG_EDIT_ACTION}, + n2o_pi:pid(system, ?MODULE) ! {send_push, From1, To1, Internal, ?MSG_EDIT_ACTION}, %% publish - roster:send_feed(C, Feed, Internal), <<>>; - E -> E + roster:send_feed(C, Feed, Internal), <<>> end, {reply, {bert, IO}, Req, State}; @@ -228,7 +227,7 @@ info(#'Message'{id = Id, msg_id = ClMID, feed_id = Feed, from = From0, seenby = n2o_vnode:send(C, Topic, term_to_binary(Internal)), %% NOTE! send push about deleted msg only if acted user is in the seenby case Seen of [-1] -> - n2o_async:pid(system, ?MODULE) ! {send_push, From1, To1, Internal, ?MSG_DELETE_ACTION}; _ -> + n2o_pi:pid(system, ?MODULE) ! {send_push, From1, To1, Internal, ?MSG_DELETE_ACTION}; _ -> skip end, case {Type, Link} of {[reply], Link} when is_integer(Link) andalso NewSeen == [-1] -> @@ -276,7 +275,7 @@ info(#'Message'{status = update, id = Id, files = [#'Desc'{mime = <<"transcribe" when is_integer(Id), not is_tuple(Req) -> Type = case roster:get_data_val(<<"TYPE">>, Data) of [] -> short; T -> binary_to_atom(T, utf8) end, Lang = roster:get_data_val(?LANG_KEY, Data), - Pid = n2o_async:pid(system, roster_message), + Pid = n2o_pi:pid(system, roster_message), case kvs:get('Message', Id) of {ok, #'Message'{feed_id = Feed, from = From, to = To, files = [#'Desc'{mime = <<"audio">>, payload = Uri} | _]}} -> roster:info(?MODULE, "enter ~p transcribe process with ~p", [Type, Uri]), @@ -296,7 +295,7 @@ info(#'Message'{status = update, id = Id, files = [#'Desc'{mime = <<"transcribe" [file:delete(filename:absname(File)) || File <- [FileIn, FileOut]], R; {error, ErrInfo} -> roster:error(?MODULE, "invalid url for transcribe: ~p", [ErrInfo]), - #io{code = {error, invaid_data}, data = ErrMsg} + #io{code = {error, invalid_data}, data = ErrMsg} end, Pid ! {Res, ClientId} end), {reply, {bert, #io{code = #ok{code = transcribe}, data = Id}}, Req, State}; long -> @@ -316,7 +315,7 @@ info(#'Message'{status = update, id = Id, files = [#'Desc'{mime = <<"transcribe" end; {ok, InvalidMsg} -> roster:info(?MODULE, "invalid audio transcribe for ~p", [InvalidMsg]), - {reply, {bert, #io{code = invalid_data, data = InvalidMsg}}, Req, State}; + {reply, {bert, #io{code = #error{code = invalid_data}, data = InvalidMsg}}, Req, State}; {error, _} = E -> roster:error(?MODULE, "message ~p not found for transcribe", [Id]), {reply, {bert, #io{code = E}, #'Message'{id = Id}}, Req, State} end; @@ -378,12 +377,12 @@ info(#'Message'{from = From, to = To} = ReqData, Req, State) -> roster:info(?MODULE, "~p:~p:Message/unknown:~p", [From, To, {ReqData, Req}]), {reply, {bert, #io{code = #error{code = invalid_data}}}, Req, State}. -proc(init, #handler{name = roster_message} = Async) -> +proc(init, #pi{name = roster_message} = Async) -> roster:info(?MODULE, "ASYNC:~p", [?MODULE]), {ok, C} = emqttc:start_link([{client_id, <<"roster_message">>}, {logger, {console, error}}, {reconnect, 5}]), - {ok, Async#handler{state = C, seq = 0}}; + {ok, Async#pi{state = C}}; -proc({send_push, From, To, #'Message'{type = TypeList} = Msg, Action}, #handler{} = H) -> +proc({send_push, From, To, #'Message'{type = TypeList} = Msg, Action}, #pi{} = H) -> %% Check should server proceed push %% TODO add push for message/delete case From of @@ -391,21 +390,21 @@ proc({send_push, From, To, #'Message'{type = TypeList} = Msg, Action}, #handler{ _ -> notify(From, To, Msg, Action) end, {reply, [], H}; -proc({#io{} = IO, ClientId}, #handler{state = C} = H) -> +proc({#io{} = IO, ClientId}, #pi{state = C} = H) -> roster:error(?MODULE, "~p", [IO]), roster:send_action(C, ClientId, IO), {reply, [], H}; -proc({#'Message'{status = update} = Msg, ClientId}, #handler{state = C} = H) -> +proc({#'Message'{status = update} = Msg, ClientId}, #pi{state = C} = H) -> roster:info(?MODULE, "UPDATE TRANSCRIBE: ~p", [Msg]), try {reply, {bert, IO}, _, _} = info(Msg, {[], handled}, #cx{params = ClientId, client_pid = C, state = ack}), roster:send_action(C, ClientId, IO) catch Err:Rea -> - roster:error(?MODULE, ":~p~n", [n2o:stack_trace(Err, Rea)]) + roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]) end, {reply, [], H}; -proc({mqttc, C, connected}, State = #handler{state = C, seq = S}) -> {ok, State#handler{seq = S + 1}}; +proc({mqttc, C, connected}, State = #pi{state = C}) -> {ok, State}; proc({mqttc, _C, disconnected}, State) -> {ok, State}; -proc(Unknown, #handler{} = H) -> +proc(Unknown, #pi{} = H) -> roster:info(?MODULE, "invalid message data :~p", [Unknown]), {reply, [], H}. diff --git a/apps/roster/src/protocol/roster_presence.erl b/apps/roster/src/protocol/roster_presence.erl index b184d0bb199a48869b7cf571c7d3dc7d3fcd0a20..6a58e3da6483092937c7800b60f9af8746290511 100644 --- a/apps/roster/src/protocol/roster_presence.erl +++ b/apps/roster/src/protocol/roster_presence.erl @@ -28,7 +28,7 @@ on_connect(Phone, ClientId, C, Ver) -> roster:send_cache(ClientId, C) end catch Err:Rea -> - roster:info(?MODULE, "Catch:~p", [n2o:stack_trace(Err, Rea)]) + roster:info(?MODULE, "Catch:~p~n", [{Err, Rea}]) end. on_disconnect(#'Auth'{type = logout, phone = Phone, client_id = ClientId, user_id = PhoneId}, C) -> diff --git a/apps/roster/src/protocol/roster_profile.erl b/apps/roster/src/protocol/roster_profile.erl index 9314153bd2a4b1ccfde6b8744ee06aa20783811c..655cb022650f54e7421156d199eca91a22d81ba4 100644 --- a/apps/roster/src/protocol/roster_profile.erl +++ b/apps/roster/src/protocol/roster_profile.erl @@ -3,7 +3,7 @@ -include_lib("n2o/include/n2o.hrl"). -compile(export_all). -start() -> n2o_async:start(#handler{module=?MODULE,class=system,group=roster,name=?MODULE,state=[]}). +start() -> n2o_pi:start(#pi{module=?MODULE,table=system,sup=roster,name=?MODULE,state=[]}). %%info(#'Profile'{phone=Phone, rosters=Rosters, status=set} = Data, Req, %% #cx{params = ClientId} = State) -> @@ -82,18 +82,18 @@ info(#'Profile'{status = init} = Data, Req, State) -> info(#'Profile'{} = Data, Req, State) -> {reply, {bert, Data}, Req, State}. -proc(init,#handler{name=?MODULE} = Async) -> +proc(init,#pi{name=?MODULE} = Async) -> roster:info(?MODULE, "ASYNC",[]), {ok,Async}; -proc({restart, M}, #handler{state = {C, Proc}, seq = S} = H) -> +proc({restart, M}, #pi{state = {C, Proc}} = H) -> roster:info(?MODULE, "BPE PROC restarted", []), roster:restart_module(M), {reply, [], H}. %% TODO maybe in future -%%proc({send_email,#'Service'{id = Addr, data = Code}}, #handler{}=H) -> +%%proc({send_email,#'Service'{id = Addr, data = Code}}, #pi{}=H) -> %% Half = size(Code)-round(size(Code)/2), %% Codes1 = binary:part(Code, 0, Half), %% Codes2 = binary:part(Code, Half, Half), @@ -104,7 +104,7 @@ proc({restart, M}, #handler{state = {C, Proc}, seq = S} = H) -> %% {reply, [], H}; %% TODO maybe in future -%%proc({aws, ClientId}, #handler{state = C} = H) -> +%%proc({aws, ClientId}, #pi{state = C} = H) -> %% Res = case amazon_api:gen_temp_creds() of %% {error, Reason} -> #io{code = #error{code = Reason}}; %% {ok, {AccessKeyId, SecretAccessKey, SessionToken, Expiration}} -> @@ -127,11 +127,11 @@ del_roster(UID,RosterId) -> roster:unsubscribe_p2p(UID, RosterId), roster:remove_member(PId), roster:unsubscribe_muc(PId), - [roster:update_writer(#muc{name=Name},{#'Message'.from,PId},{#'Message'.files,[#'Desc'{payload = "Deleted"}]}) + [roster:update_writer(#muc{name=Name},{#'Message'.from, PId},{#'Message'.files,[#'Desc'{payload = <<"Deleted">>}]}) || #'Room'{id=Name} <- Rooms], - [roster:update_writer(roster:feed_key(p2p,PId,FId),{#'Message'.from,PId},{#'Message'.files,[#'Desc'{payload = "Deleted"}]}) + [roster:update_writer(roster:feed_key(p2p,PId,FId),{#'Message'.from,PId},{#'Message'.files,[#'Desc'{payload = <<"Deleted">>}]}) || #'Contact'{phone_id = FId} <- Conts], - roster:update_chains({'Message',from},{#'Message'.from,PId},{#'Message'.files,[#'Desc'{payload = "Deleted"}]}), + roster:update_chains({'Message',from},{#'Message'.from,PId},{#'Message'.files,[#'Desc'{payload = <<"Deleted">>}]}), kvs:delete('Index', {nick, string:lowercase(Nick)}), case roster:is_online(user_id,PId) of offline -> roster:delete_sessions(user_id, PId); online -> roster:force_logout(user_id,PId) end, % TODO Add force_logout/2 diff --git a/apps/roster/src/protocol/roster_push.erl b/apps/roster/src/protocol/roster_push.erl index 961ea4961c1d28ae5f7be2ad918e3bdb8bea1581..7c2445c60b8cf5af7a6ab73ae7bd16c816ed10d1 100644 --- a/apps/roster/src/protocol/roster_push.erl +++ b/apps/roster/src/protocol/roster_push.erl @@ -4,13 +4,13 @@ -include_lib("kvs/include/kvs.hrl"). -compile(export_all). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). -proc(init, #handler{name = ?MODULE} = Async) -> +proc(init, #pi{name = ?MODULE} = Async) -> roster:info(?MODULE, "ASYNC", []), {ok, Async}; -proc({async_push, Session, Payload, PushAlert, PushType}, #handler{} = H) -> +proc({async_push, Session, Payload, PushAlert, PushType}, #pi{} = H) -> send_push_notification(Session, Payload, PushAlert, PushType), {reply, [], H}. diff --git a/apps/roster/src/protocol/roster_room.erl b/apps/roster/src/protocol/roster_room.erl index 184a9fb368d6133f916b77c556720a5e9be65c79..8ac837367b32a980120a76047964df71cafe6106 100644 --- a/apps/roster/src/protocol/roster_room.erl +++ b/apps/roster/src/protocol/roster_room.erl @@ -9,7 +9,7 @@ -define(MAX_ROOM_LENGTH, 32). -define(MIN_ROOM_LENGTH, 1). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Room'{status = create, id = Room, admins = [Admin|_], type=Type} = R, Req, #cx{state = verified} = State) -> @@ -65,7 +65,7 @@ info(#'Room'{status = patch, id = Room, name = Name, data = AvatarDesc} = R, Req files = [#'Desc'{payload = iolist_to_binary([?SYS_MSG_UPDATE_GROUP_NAME, " \"", NewName, "\""])}], type = [sys], status = []}, roster:get_reader(RoomFeed, PId)), roster:send_room(C, Room, NewNameMsg), - n2o_async:pid(system, ?MODULE) ! {send_push, [], NewNameMsg, name}, + n2o_pi:pid(system, ?MODULE) ! {send_push, [], NewNameMsg, name}, NewNameLastMsgId; _ -> StoredLastMsgId end, @@ -82,7 +82,7 @@ info(#'Room'{status = patch, id = Room, name = Name, data = AvatarDesc} = R, Req #'Desc'{payload = AvatarPayload, mime = AvatarMime}], type = [sys], status = []}, roster:get_reader(RoomFeed, PId)), roster:send_room(C, Room, NewAvatarMsg), - n2o_async:pid(system, ?MODULE) ! {send_push, [], NewAvatarMsg, photo}, + n2o_pi:pid(system, ?MODULE) ! {send_push, [], NewAvatarMsg, photo}, NewAvatarLastMsgId; _ -> NameLastMsgId end; @@ -136,16 +136,22 @@ info(#'Room'{status = St, id = Room, members = Members, admins = Admins, readers case roster:muc_member(PhoneId, Room, presence) of #'Member'{status = removed} = M when Status == admin; Status == member-> M2 = roster:patch_member(M#'Member'{status = Status}, Member), - {M3, _, UpdRoom} = roster:add_member(TmpRoom, M2, {no_muc_message, HL}), - kvs:put(M3), - {M3, UpdRoom}; + case lists:map(fun handle_add_member/1, + [roster:add_member(TmpRoom, M2, {no_muc_message, HL})]) + of + [{M3, _} = Resource]-> ok = kvs:put(M3), Resource; + _ -> error + end; #'Member'{phone_id = APId} = M -> {ignore, M}; #'Member'{} = M -> kvs:put(M2 = roster:patch_member(M#'Member'{status = Status}, Member)), {ignore, M2}; - _ -> {M2, _, UpdRoom} = roster:add_member(TmpRoom, - Member#'Member'{feed_id = #muc{name = Room}, reader = 0}, {no_muc_message, HL}), - {M2, UpdRoom} + _ -> + [Resource] = + lists:map(fun handle_add_member/1, [roster:add_member(TmpRoom, + Member#'Member'{feed_id = #muc{name = Room}, reader = 0}, + {no_muc_message, HL})]), + Resource end, case MmbrRoom of error -> roster:info(?MODULE, "ERROR:add_member:RosterNotFound:~p", [PhoneId]), @@ -185,7 +191,7 @@ info(#'Room'{status = St, id = Room, members = Members, admins = Admins, readers to = Room, msg_id = roster:msg_id(), files = [#'Desc'{payload = Payload}]}, Reader), {_, PutRoom} = roster:put_readers(write_top, AdmMember, R), - n2o_async:pid(system, ?MODULE) ! {send_push, NewMmbrs, Msg, RStatus2}, + n2o_pi:pid(system, ?MODULE) ! {send_push, NewMmbrs, Msg, RStatus2}, {PutRoom#'Room'{last_msg = Msg}, PutRoom#'Room'{last_msg = Msg#'Message'.id}} end, R5 = R3#'Room'{status = RStatus2, members = Members2, admins = Admins3, links=[roster_link:get_link({ok,R3})]}, [ begin roster:send_ses(C, roster:phone(PhId), @@ -225,7 +231,7 @@ info(#'Room'{status = remove, members = Members, admins = Admins0, id = Room}, R lists:ukeymerge(#'Room'.id, [StoredRoom#'Room'{status = removed}], Rooms)}, Feed), kvs:put(M2 = M#'Member'{status = removed, update = roster:now_msec()}), {[M2 | Ms], [Alias, <<",">> | Alss], [Roster2 | Rs]}; - false -> Acc end end, {[], [], []}, Members ++ Admins), + [] -> Acc end end, {[], [], []}, Members ++ Admins), {Admins2, Members2} = roster:split_members(Mmbrs), Admins3 = lists:ukeymerge(#'Member'.id, lists:ukeysort(#'Member'.id, Admins2), [AdmMember]), Msg = roster:add_message(#'Message'{feed_id = #muc{name = Room}, from = APId, to = Room, @@ -239,7 +245,7 @@ info(#'Room'{status = remove, members = Members, admins = Admins0, id = Room}, R roster:send_room(C, R2), [roster:send_ses(C, roster:phone(PhoneId), Rec) || #'Member'{phone_id = PhoneId} <- Mmbrs, Rec <- [R2, Msg]], - n2o_async:pid(system, ?MODULE) ! {send_push, Mmbrs, Msg, remove}, + n2o_pi:pid(system, ?MODULE) ! {send_push, Mmbrs, Msg, remove}, roster:send_room(C, Room, Msg); #'Member'{} -> #io{code = #error{code = permission_denied}}; _ -> #io{code = #error{code = member_not_found}} end; @@ -295,7 +301,7 @@ info(#'Room'{status = leave, id = Room}, Req, #cx{params = ClientId, client_pid roster:send_room(C, R), [roster:cache_ses(PId, R)|| #'Member'{phone_id = PId} <-roster:members(#muc{name = Room}, active)], roster:send_room(C, Room, Msg), - n2o_async:pid(system, ?MODULE) ! {send_push, [], Msg, leave}, + n2o_pi:pid(system, ?MODULE) ! {send_push, [], Msg, leave}, Room2#'Room'{update = roster:now_msec(), last_msg = Msg#'Message'.id} end, kvs:put(M#'Member'{reader = 0, update = roster:now_msec(), status = removed}), @@ -344,11 +350,11 @@ info(#'Member'{} = Member, Req, #cx{params = ClientId} = State) -> {reply, {bert, #io{code = #error{code = invalid_data}}}, Req, State}. -proc(init, #handler{name = roster_room} = Async) -> +proc(init, #pi{name = roster_room} = Async) -> roster:info(?MODULE, "ASYNC ROOM PROC started", []), {ok, Async}; %% TODO use roster_push instead -proc({send_push, NewMembers, Msg, Type}, #handler{} = H) -> +proc({send_push, NewMembers, Msg, Type}, #pi{} = H) -> PushType = <<"message">>, #'Message'{from = FromPhoneId, to = RoomId} = Msg, {ok, #'Room'{name = RoomName}} = kvs:get('Room', RoomId), @@ -399,4 +405,8 @@ proc({send_push, NewMembers, Msg, Type}, #handler{} = H) -> end, roster_push:send_push_notification(Ses, Payload, PushAlert, PushType) end || {MemPhoneId, _} = Mem <- ToRoomMembers, Ses <- kvs:index('Auth', user_id, MemPhoneId) - ], {reply, [], H}. \ No newline at end of file + ], {reply, [], H}. + +handle_add_member({error,_})-> error; +handle_add_member({Member, _, Room}) when Member =/= error-> {Member, Room}; +handle_add_member(_)-> error. diff --git a/apps/roster/src/protocol/roster_roster.erl b/apps/roster/src/protocol/roster_roster.erl index 0466809ed34665e398da0ab8c1f667524840b0eb..84799da4354b7b175696e8f82f58e76d8cf4e23a 100644 --- a/apps/roster/src/protocol/roster_roster.erl +++ b/apps/roster/src/protocol/roster_roster.erl @@ -7,7 +7,7 @@ -define(MIN_NAME_LENGTH, 2). -define(MIN_SURNAME_LENGTH, 1). -start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Roster'{status = patch, avatar = Avatar} = Data, Req, #cx{params = ClientId, client_pid = C, @@ -25,7 +25,7 @@ info(#'Roster'{status = patch, avatar = Avatar} = Data, Req, roster:send_ac(C, PhoneId, NewC#'Contact'{unread = []}), roster:send_ses(C, Phone, UpdRoster#'Roster'{userlist = [NewC#'Contact'{presence = online}], roomlist = [], favorite = []}), - n2o_async:send(system, ?MODULE, {update_ac, NewC}), + n2o_pi:send(system, ?MODULE, {update_ac, NewC}), %% TODO clarify logic of update user/member info case Avatar of OldAvatar -> skip; [] -> skip; _ -> [case roster:muc_member(PhoneId, Room) of @@ -80,11 +80,12 @@ info(#'Roster'{id = RosterId, nick = NickToBeValidated, status = nick} = Data, R #io{code = #error{code = invalid_nick}}; {ok, Nick} -> %% set processing data to lowercase - OldNickLow = string:lowercase(OldNick), - NickValidationError = - case NickLow = string:lowercase(Nick) of - [] -> false; - _ -> %% check is nick taken by another user + OldNickLow = list_to_binary(string:to_lower(nitro:to_list(OldNick))), + NickLow = list_to_binary(string:to_lower(nitro:to_list(Nick))), + NickValidationError = case NickLow of + <<>> -> false; + _ -> +%% check is nick taken by another user case kvs:get('Index', {nick, NickLow}) of {ok, #'Index'{roster = [TakenRosterId]}} when TakenRosterId /= ActedRosterId -> true; _ -> false @@ -98,17 +99,17 @@ info(#'Roster'{id = RosterId, nick = NickToBeValidated, status = nick} = Data, R %% index processing case NickLow of OldNickLow -> skip; - [] -> n2o_async:send(system, ?MODULE, {delete_index, #'Roster'{id = ActedRosterId, nick = OldNickLow}}); + <<>> -> n2o_pi:send(system, ?MODULE, {delete_index, #'Roster'{id = ActedRosterId, nick = OldNickLow}}); _ -> - n2o_async:send(system, ?MODULE, {update_index, #'Roster'{id = ActedRosterId, nick = NickLow}}), - n2o_async:send(system, ?MODULE, {delete_index, #'Roster'{id = ActedRosterId, nick = OldNickLow}}) + n2o_pi:send(system, ?MODULE, {update_index, #'Roster'{id = ActedRosterId, nick = NickLow}}), + n2o_pi:send(system, ?MODULE, {delete_index, #'Roster'{id = ActedRosterId, nick = OldNickLow}}) end, %% NOTE! Pay attention! Copypaste from Roster/Patch, need to check [NewC] = roster:to_contact([UpdRoster#'Roster'{status = Status}], friend), UpdNewC = NewC#'Contact'{unread = []}, roster:send_ac(C, roster:phone_id(Phone, ActedRosterId), UpdNewC), roster:send_ses(C, Phone, UpdRoster#'Roster'{userlist = [UpdNewC#'Contact'{presence = online}], roomlist = [], favorite = []}), - n2o_async:send(system, ?MODULE, {update_ac, UpdNewC}), + n2o_pi:send(system, ?MODULE, {update_ac, UpdNewC}), <<>>; true -> roster:info(?MODULE, "Debug.GotNickAlreadyUsedError", []), @@ -160,11 +161,11 @@ info(#'Roster'{id = RosterId, status = Status}, Req, #cx{params = ClientId} = St roster:info(?MODULE, "~p:~p:Roster/unknown:~p", [RosterId, ClientId, Status]), {reply, {bert, #io{code = #error{code = invalid_data}}}, Req, State}. -proc(init, #handler{name = ?MODULE} = Async) -> +proc(init, #pi{name = ?MODULE} = Async) -> roster:info(?MODULE, "ASYNC", []), {ok, Async}; -proc({update_ac, #'Contact'{phone_id = PhoneId} = C}, #handler{} = H) -> +proc({update_ac, #'Contact'{phone_id = PhoneId} = C}, #pi{} = H) -> [Phone, RosterId] = roster:parts_phone_id(PhoneId), [begin [P, FriendId] = roster:parts_phone_id(PId), Res = case roster:get_contact(FriendId, PhoneId) of @@ -174,12 +175,12 @@ proc({update_ac, #'Contact'{phone_id = PhoneId} = C}, #handler{} = H) -> || #'Contact'{phone_id = PId} <- roster:get_on_status(RosterId, friend)], {reply, [], H}; -proc({update_index, #'Roster'{id = RosterId, nick = Nick}}, #handler{} = H) -> +proc({update_index, #'Roster'{id = RosterId, nick = Nick}}, #pi{} = H) -> kvs:put(#'Index'{id = {nick, Nick}, roster = [RosterId]}), %% @TODO: Have to be code for adding new nick into B-tree for nicks {reply, [], H}; %% TODO refactor me -proc({delete_index, #'Roster'{id = RosterId, nick = Nick}}, #handler{} = H) -> +proc({delete_index, #'Roster'{id = RosterId, nick = Nick}}, #pi{} = H) -> kvs:delete('Index', {nick, Nick}), {reply, [], H}. \ No newline at end of file diff --git a/apps/roster/src/protocol/roster_search.erl b/apps/roster/src/protocol/roster_search.erl index 03fc9f085a2778168c3b0175be4ca9469387cbf2..462702e8bdca4b44c7d7d99f06df1d08a31053b1 100644 --- a/apps/roster/src/protocol/roster_search.erl +++ b/apps/roster/src/protocol/roster_search.erl @@ -3,7 +3,7 @@ -include_lib("n2o/include/n2o.hrl"). -compile(export_all). -%start() -> n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, name = ?MODULE, state = []}). +% start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = ?MODULE, state = []}). info(#'Search'{id = FromRosterId, ref = Ref, field = <<"link">>, type = '==', value = SearchVal, status = room}, Req, #cx{params = <<"emqttd_",_/binary>> = ClientId} = State) -> @@ -66,14 +66,6 @@ info(#'Search'{id = From, ref = Ref, field = <<"phone">>, type = '==', value = P %roster:info(?MODULE, "Res.Search/phone:~p", [Res]), {reply, {bert, {io, {ok, Ref}, Res}}, Req, State}; -%% TBD is this method neccesery? -info(#'Search'{id = From, ref = Ref, field = K, type = 'like', value = V, status = roster}, Req, - #cx{params = <<"emqttd_", _/binary>> = ClientId} = State) when is_atom(K), Ref /=[] -> - roster:info(?MODULE, "~p:~p:Search/names:~p", [From, ClientId, V]), - L = [binary_to_list(string:lowercase(V)) ++ F - || F <- ets:match(K, {binary_to_list(string:lowercase(V)) ++ '$1'})], - {reply, {bert, {io, {ok, Ref}, L}}, Req, State}; - info(#'Search'{} = Data, Req, State) -> roster:info(?MODULE, "Search/unknown:~p", [Data]), {reply, {bert, {io, {error,invalid_data}}}, Req, State}. @@ -105,4 +97,4 @@ info(#'Search'{} = Data, Req, State) -> %% _ -> skip %% end, %% index_next(R, K, Next),ok -%% end. \ No newline at end of file +%% end. diff --git a/apps/roster/src/rest/rest_chat_csv.erl b/apps/roster/src/rest/rest_chat_csv.erl index c49a7ac09a7cc3816aa76da72b237ded6efaac2e..4afdbba64d0f90986905776e31846c9962757a3d 100644 --- a/apps/roster/src/rest/rest_chat_csv.erl +++ b/apps/roster/src/rest/rest_chat_csv.erl @@ -25,9 +25,8 @@ ]). %% Custom data types --type type_chat_element() :: {MsgDate::integer(), Username::string(), Message::string()}. +-type type_chat_element() :: {MsgDate::integer(), Username::string(), MessageType:: [] | binary(), Message::string()}. -type type_chat() :: [type_chat_element()]. --type type_chat_history() :: list(#'Message'{}). -type type_user_data() :: {binary(), string()}. %%%============================================================================= @@ -64,7 +63,7 @@ handle_request('GET', #{room := GroupChatId}, Req) -> try ChatHistory = get_chat_history({muc, RoomId}), Members = get_group_chat_members(RoomId), - GroupChatName = get_group_chat_name(RoomId), + GroupChatName = binary_to_list(get_group_chat_name(RoomId)), #'Member'{id = MemberId} = roster:muc_member(rest_main_helper:get_client_phone_id(Req), RoomId), ChatData = extract_chat_data(ChatHistory, Members, FromDate, ToDate, AllowedMessageTypes, MemberId), CsvText = conversation_to_csv(ChatData, GroupChatName, FromDate, ToDate, TimeZone, AllowedMessageTypes), @@ -111,7 +110,7 @@ conversation_to_csv(ChatData, ToUsername, FromDate, ToDate, TimeZone, AllowedMes TemplateRows = build_template_rows(ChatSpanTimezone, ToUsername, AllowedMessageTypes), build_message_rows(ChatData, TimeZone, TemplateRows). --spec build_template_rows(tuple(), string(), list()) -> list(). +-spec build_template_rows(tuple(), string(), list()) -> [string()]. build_template_rows({FromDate, ToDate}, ToUsername, AllowedMessageTypes) -> Template = ["NYNJA Chat Export", ?NEW_LINE, ?NEW_LINE, "From Date:", ?NEW_COLUMN, format_date(FromDate, "M dS Y"), ?NEW_LINE, @@ -164,8 +163,7 @@ extract_user_id(PhoneId) -> match_member_to_phone_id(Members, PhoneId) -> case lists:dropwhile(fun({Id, _}) -> Id /= PhoneId end, Members) of [] -> throw({no_username_match, PhoneId}); - [{_, Username} | _] -> Username; - _ -> throw({no_username_match, PhoneId}) + [{_, Username} | _] -> Username end. -spec get_username_by_id(Id::non_neg_integer()) -> string(). @@ -175,7 +173,7 @@ get_username_by_id(Id) -> {error, _} -> throw({no_username, Id}) end. --spec get_group_chat_members(RoomId::binary()) -> list(#'Member'{}). +-spec get_group_chat_members(RoomId::binary()) -> list({binary(), list()}) | no_return(). get_group_chat_members(RoomId) -> case roster:members({muc, RoomId}) of [] -> @@ -188,22 +186,22 @@ get_group_chat_members(RoomId) -> phone_id = PhoneId} <- Members] end. --spec get_group_chat_name(RoomId::binary()) -> string(). +-spec get_group_chat_name(RoomId::binary()) -> binary() | no_return(). get_group_chat_name(RoomId) -> case kvs:get('Room', RoomId) of {ok, #'Room'{name = RoomName}} -> RoomName; {error, _} -> throw({no_muc_name, RoomId}) end. --spec get_chat_history(Feed::tuple()) -> list(#'Message'{}). +-spec get_chat_history(Feed::tuple()) -> list(#'Message'{}) | no_return(). get_chat_history(Feed) -> case roster_db:get_chain('Message', roster:feed_key(Feed)) of [] -> throw({no_chat_history, Feed}); History -> History end. --spec get_chat_time_span(type_chat_element(), integer(), integer()) -> {integer(), integer()}. -get_chat_time_span([], FromDate, ToDate) -> throw({no_chat_history, get_chat_time_span}); +-spec get_chat_time_span(type_chat(), integer(), integer()) -> {integer(), integer()}. +get_chat_time_span([], _FromDate, _ToDate) -> throw({no_chat_history, get_chat_time_span}); get_chat_time_span(Chat, FromDate, ToDate) -> From = case FromDate of @@ -221,14 +219,15 @@ get_chat_time_span(Chat, FromDate, ToDate) -> end, {From, To}. --spec format_msg_type(binary()) -> list(binary()). +-spec format_msg_type(<<_:8,_:_*8>>) -> [[any()] | char()]. +% Due to the fact that we have a functionl pattern matching format_msg_type(<>) -> io_lib:format("~s~s", [string:uppercase(FirstLetter), Rest]). -spec format_date(tuple(), string()) -> string(). format_date(Date, Format) -> qdate:to_string(Format, Date). --spec format_timezone(integer(), string()) -> tuple() | integer(). +-spec format_timezone(integer() | tuple(), string()) -> tuple() | integer(). format_timezone(Timestamp, TimeZone) when is_integer(Timestamp), is_list(TimeZone) -> format_timezone(roster:msToUT(Timestamp), TimeZone); format_timezone({{_, _, _}, {_, _, _}} = Date, TimeZone) -> @@ -236,4 +235,4 @@ format_timezone({{_, _, _}, {_, _, _}} = Date, TimeZone) -> {error, unknown_tz} -> throw({unknown_timezone, TimeZone}); LocalDate -> LocalDate end; -format_timezone(Timestamp, _) -> Timestamp. \ No newline at end of file +format_timezone(Timestamp, _) -> Timestamp. diff --git a/apps/roster/src/rest/rest_cri.erl b/apps/roster/src/rest/rest_cri.erl index 5ec01ce3418d1b3f4821ea4e804dcf6a7e56e253..662d7ff48410eaf8d6f86e463ac57f82952d2fb5 100644 --- a/apps/roster/src/rest/rest_cri.erl +++ b/apps/roster/src/rest/rest_cri.erl @@ -7,6 +7,7 @@ -include_lib("roster/include/static/roster_text.hrl"). -include_lib("roster/include/static/roster_var.hrl"). -include_lib("roster/include/static/main_var.hrl"). +-dialyzer({nowarn_function, strict_list/1}). -export([ description/0, diff --git a/apps/roster/src/rest/rest_handler.erl b/apps/roster/src/rest/rest_handler.erl index ba8b76dcd93a5347b9804e52560a5d6c7ff03fa7..512c1c6be715742451488e31deac3c24b1ccf7f6 100644 --- a/apps/roster/src/rest/rest_handler.erl +++ b/apps/roster/src/rest/rest_handler.erl @@ -59,7 +59,6 @@ handle_request(Req) -> _ -> case rest_auth_helper:authorized(Req) of false -> rest_response_helper:response(Req, ?HTTP_CODE_401, rest_response_helper:error_401()); {error, invalid_token} -> rest_response_helper:error_response_api(Req, ?HTTP_CODE_401, "Token is invalid."); - {error, token_expired} -> rest_response_helper:error_response_api(Req, ?HTTP_CODE_401, "Token is expired."); {true, api} -> handle_request2(Req:get(method), Req:get(path), Req); %% We hit here if authentication is Bearer (Not Basic) _ -> handle_request(Req:get(method), Req:get(path), Req) end @@ -82,7 +81,6 @@ handle_request(Method, Path, Req) %% NOTE! uncomment the row under to turn on call bubbles %% handle_request(_, ?RCI_BUBBLE_ENDPOINT, Req) -> rest_cri :handle_request(Req); -handle_request(Method, "/metrics" = Path, Req) -> rest_metric :handle_request(Method, Path, Req); handle_request(Method, ?MSG_PUSH_ENDPOINT = Path, Req) -> rest_push:handle_request(Method, Path, Req); handle_request(Method, ?ROOM_ENDPOINT = Path, Req) -> rest_deeplink:handle_request(Method, Path, Req); handle_request(Method, ?PUBLISH_ENDPOINT = Path, Req) -> rest_publish:handle_request(Method, Path, Req); diff --git a/apps/roster/src/rest/rest_message.erl b/apps/roster/src/rest/rest_message.erl index 265ef3644fbbdeac2bf2e6be162162256af3edfa..da290c25d43506095f6f3eb7951f4a6f0880db3e 100644 --- a/apps/roster/src/rest/rest_message.erl +++ b/apps/roster/src/rest/rest_message.erl @@ -19,7 +19,7 @@ handle_request('GET', #{user := Receiver}, Req) -> friend_confirm -> case rest_gw:send_p2p_message(SenderPhoneId, ReceiverPhoneId, Message) of ok -> {?HTTP_CODE_200, rest_response_helper:success_response(<<"ok_message_sent">>, <<"Message send to: ", Receiver/binary>>)}; - {error, send_message} -> {?HTTP_CODE_400, rest_response_helper:error_response(<<"error_send_message">>, <<"Error sending Message to: ", Receiver/binary>>)} + {error, permission_denied} -> {?HTTP_CODE_400, rest_response_helper:error_response(<<"error_send_message">>, <<"Error sending Message to: ", Receiver/binary>>)} end; friend_request -> {?HTTP_CODE_200, rest_response_helper:error_response(<<"ok_request_friend">>, <<"Friend request send to: ", Receiver/binary>>)}; diff --git a/apps/roster/src/rest/rest_push.erl b/apps/roster/src/rest/rest_push.erl index 21fb0cf1c5c924b0a42f3f859d9b41b632fb717e..2f3b3d8439a2d919264b3eb338c0c9c72aacc46c 100644 --- a/apps/roster/src/rest/rest_push.erl +++ b/apps/roster/src/rest/rest_push.erl @@ -21,7 +21,7 @@ handle_request('POST', _, Req) -> #'PushService'{payload = Payload, recipients = Recipient, module = Module} = 'PushServiceRest':from_json(jsx:decode(ReqBody), #'PushService'{}), %% also server should make all values from string to binary because erlang works with binary() data PushAlert = PushType = list_to_binary(Module), - [[n2o_async:pid(system, roster_push) ! {async_push, Auth, list_to_binary(Payload), PushAlert, PushType} + [[n2o_pi:pid(system, roster_push) ! {async_push, Auth, list_to_binary(Payload), PushAlert, PushType} || Auth <- kvs:index('Auth', user_id, PhoneId)] || PhoneId <- list_elements_to_binary(Recipient)], ?HTTP_CODE_200 end, diff --git a/apps/roster/src/rest/rest_transcribe.erl b/apps/roster/src/rest/rest_transcribe.erl index dede61b152f406b9ff6cdd01d79645e02c706b38..4029f528bd8d8293e04afd4dd3a2f686aa071873 100644 --- a/apps/roster/src/rest/rest_transcribe.erl +++ b/apps/roster/src/rest/rest_transcribe.erl @@ -34,9 +34,9 @@ handle_request('GET', #{room := RoomId, message := MessageId}, Req) -> send_response(Transcription, Req) catch throw:{msg_not_found, Id} -> - rest_response_helper:error_response(Req, ?HTTP_CODE_404, io_lib:format("Message with ID=~i not found", [Id])); + rest_response_helper:error_response_api(Req, ?HTTP_CODE_404, io_lib:format("Message with ID=~i not found", [Id])); _:_ -> - rest_response_helper:error_response(Req, ?HTTP_CODE_404, "Something went wrong!") + rest_response_helper:error_response_api(Req, ?HTTP_CODE_404, "Something went wrong!") end; {error, wrong_data} -> rest_response_helper:error_400_response(Req) @@ -55,9 +55,9 @@ handle_request('GET', #{user := UserId, message := MessageId}, Req) -> send_response(Transcription, Req) catch throw:{msg_not_found, Id} -> - rest_response_helper:error_response(Req, ?HTTP_CODE_404, io_lib:format("Message with ID=~i not found", [Id])); + rest_response_helper:error_response_api(Req, ?HTTP_CODE_404, io_lib:format("Message with ID=~i not found", [Id])); _:_ -> - rest_response_helper:error_response(Req, ?HTTP_CODE_404, "Something went wrong!") + rest_response_helper:error_response_api(Req, ?HTTP_CODE_404, "Something went wrong!") end; {error, wrong_data} -> rest_response_helper:error_400_response(Req) diff --git a/apps/roster/src/roster.app.src b/apps/roster/src/roster.app.src index e5ed158381e133b9a1950c109e602c6724111cfc..6cf6b237fd2f6ad039d40d4a0c96e66f89cba487 100644 --- a/apps/roster/src/roster.app.src +++ b/apps/roster/src/roster.app.src @@ -1,7 +1,29 @@ {application, roster, - [{description, "Roster Protocol"}, - {vsn, "1"}, - {registered, []}, - {applications, [kernel,stdlib,mnesia,kvs,emqttd,n2o,bpe,locus,prometheus,libphonenumber_erlang]}, - {mod, { roster, []}}, - {env, []} ]}. + [ + {description, "Roster Protocol"}, + {vsn, "1"}, + {registered, []}, + {applications, + [ + kernel, + stdlib, + mnesia, + kvs, + ibrowse, + mimerl, + enenra, + hackney, + idna, + metrics, + unicode_util_compat, + emqttd, + n2o, + bpe, + locus, + prometheus, + libphonenumber_erlang + ]}, + {mod, { roster, []}}, + {env, []} + ] +}. diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index 569a6a973e18d788290c75c849c818c80c3bb501..e3d0bdf5eb25d4b09702caf880ff2f38894bc1bb 100644 --- a/apps/roster/src/roster.erl +++ b/apps/roster/src/roster.erl @@ -11,6 +11,7 @@ -include_lib("emqttd/include/emqttd.hrl"). -include_lib("mnesia/src/mnesia.hrl"). -compile({parse_transform, bert_validator}). +-dialyzer({nowarn_function, validate/1}). -define(BPE_SYS_CLIENT, <<"sys_bpe">>). @@ -46,6 +47,7 @@ register_acl_mod() -> atoms() -> [android, ios, contact, signup, signin, welcome]. init([]) -> {ok, {{one_for_one, 5, 10}, []}}. start(_, _) -> atoms(), catch load([]), + syn:init(), application:stop(n2o), application:start(n2o), X = try begin A = supervisor:start_link({local, roster}, roster, []), @@ -459,7 +461,7 @@ on_client_disconnected(_Reason, _Client = #mqtt_client{}, _Env) -> ok. on_disconnect(<<"emqttd_", _/binary>> = ClientId) -> info(roster_auth, "~p:CLIENT DISCONNECT",[ClientId]), case kvs:get('Auth', ClientId) of - {ok, Auth} -> n2o_async:pid(system, roster_auth) ! {disconnect, Auth}, + {ok, Auth} -> n2o_pi:pid(system, roster_auth) ! {disconnect, Auth}, kvs:put(Auth#'Auth'{last_online = now_msec()}); _ -> skip end, ok. @@ -539,7 +541,7 @@ delete_msg(PhoneId) -> update_writer(Feed,{E1,V1},{E2,V2})-> case kvs_stream:load_writer(Feed) of - #writer{cache = M}=W when M/=[]-> + #writer{cache = #'Message'{}= M}=W -> case element(E1,M)==V1 of true -> M1=erlang:setelement(E2,M,V2), kvs_stream:save(W#writer{cache = M1}); @@ -569,20 +571,26 @@ add_message(#'Message'{feed_id = Feed} = Msg) -> add_message(#'Message'{} = Msg, Reader) -> kvs_stream:save(offset_reader(#writer{cache = LMsg} = add_message(Msg), Reader)), LMsg. --spec unread_msg(#muc{} |#p2p{} |#writer{} |#error{}, - integer() | #reader{}, - integer() |binary()|#'Member'{}) -> - {binary(), #'Message'{} | update, [integer()]}. +-spec unread_msg(#muc{} | #p2p{} | #writer{} | #error{} | #'Message'{} | + {'Message', [] | integer() | #'Message'{}}, + integer() | #reader{}, + integer() | binary() | #'Member'{}) -> + {integer() | binary(), #'Message'{} | update, [integer()]}. + +%% TODO: A temporary solution unread_msg({error, _}, _, _) -> {0, [], []}; unread_msg(_, {error, _}, _) -> {0, [], []}; unread_msg(#writer{cache = #'Message'{id = MaxReadId, type = [sys|_]} = LastMsg} = Writer, #reader{cache = {'Message', ReadMsgId}, pos = 0} = Reader, #'Member'{id = UID, status = removed}) when ReadMsgId /= [], ReadMsgId >= MaxReadId -> - GetFun = - fun (_T, MaxReadId, _D) -> {ok, LastMsg#'Message'{seenby = []}}; - (T, Id, D) -> kvs:get(T, Id, D) - end, + GetFun = fun(T, Id, D) -> + case Id of + N when MaxReadId /= [], MaxReadId >= N-> + {ok, LastMsg#'Message'{seenby = []}}; + _-> kvs:get(T, Id, D) + end + end, unread_msg(Writer#writer{cache = LastMsg}, Reader#reader{cache = {'Message', MaxReadId}}, UID, GetFun); unread_msg(#writer{} = Writer, #reader{} = Reader, #'Member'{id = UID}) -> unread_msg(Writer, Reader, UID); @@ -796,7 +804,7 @@ validate(Payload, ClientId) -> [] -> ok; Res -> info(?MODULE, "validate error:~n~p", [Res]), emqttd:publish(emqttd_message:make( - ClientId, 2, action_topic(ClientId), + {ClientId,undefined}, 2, action_topic(ClientId), term_to_binary(#errors{code = [<<"666">>], data = Res}))), error end. @@ -877,8 +885,7 @@ member_lastmsg2(PhoneId, Room) -> R -> R end. add_member(#'Room'{} = R, #'Member'{} = M) -> add_member(R, M, {no_muc_message, []}). -add_member(#'Room'{} = R, #'Member'{id = MId, reader = 0, feed_id = Feed, phone_id = PhoneId, alias = Alias} = M, - {MsgPayload, HL} = Args) -> +add_member(#'Room'{} = R, #'Member'{id = MId, reader = 0, feed_id = Feed, phone_id = PhoneId, alias = Alias} = M, {MsgPayload, HL} = Args) -> case kvs:get('Roster', roster_id(PhoneId)) of {ok, #'Roster'{nick = Nick, names = Names, surnames = Surnames, avatar = Avatar}} -> Alias2 = case Alias of EmptyAlias when EmptyAlias == []; EmptyAlias == <<>> -> Nick; _ -> Alias end, @@ -895,21 +902,20 @@ add_member(#'Room'{} = R, #'Member'{id = MId, reader = 0, feed_id = Feed, phone_ {M2, Msg, Room}; #error{} -> {error, roster_not_found} %% TODO add error handler end; -add_member(#'Room'{} = R, #'Member'{feed_id = #muc{name = Room} = Feed, alias = Alias, - phone_id = Roster = #'Roster'{id = RosterId, phone = Phone, - names = Name, surnames = Surname}} = M, {MsgPayload, _}) -> - PhoneId = phone_id(Phone, RosterId), - Msg = case MsgPayload of - no_muc_message -> []; - _ -> #writer{cache = LastMsg} = add_message(#'Message'{status = [], type = [sys], feed_id = Feed, from = PhoneId, to = Room, - files = [#'Desc'{payload = MsgPayload}]}), LastMsg end, - update_rooms(Roster, R), subscribe_room(M2 = M#'Member'{phone_id = PhoneId}), - subscribe_muc(PhoneId, Feed), - {M2#'Member'{alias = member_alias(Alias, Name, Surname)}, Msg, R}; -add_member(#'Room'{} = R, #'Member'{phone_id = PhoneId} = M, Args) -> +add_member(#'Room'{} = R, #'Member'{phone_id = PhoneId, alias = Alias, feed_id = #muc{name = Room} = Feed} = M, {MsgPayload, _}) -> case kvs:get('Roster', roster_id(PhoneId)) of - {ok, Roster} -> add_member(R, M#'Member'{phone_id = Roster}, Args); - #error{} = Err -> Err end. + {ok, Roster = #'Roster'{names = Name, surnames = Surname}} -> + Msg = case MsgPayload of + no_muc_message -> []; + _ -> #writer{cache = LastMsg} = add_message(#'Message'{status = [], type = [sys], + feed_id = Feed, from = PhoneId, to = Room, files = [#'Desc'{payload = MsgPayload}]}), + LastMsg + end, + update_rooms(Roster, R), subscribe_room(M2 = M#'Member'{phone_id = PhoneId}), + subscribe_muc(PhoneId, Feed), + {M2#'Member'{alias = member_alias(Alias, Name, Surname)}, Msg, R}; + #error{} = Err -> Err + end. member_alias([], [], []) -> []; member_alias([], N, []) -> N; member_alias([], [], S) -> S; member_alias([], Name, Surname) when Name /= [], Surname /= [] -> <>/binary, Surname/binary>>; @@ -984,7 +990,7 @@ contact_readmsg(LocalPhoneId, PhoneId) -> _ -> 0 end. %% TODO need refactoring. Reader may be found by feed? update_room(#'Roster'{roomlist = Rooms} = Roster, #'Room'{status = Status} = Room)-> - kvs:put(Roster#'Roster'{roomlist = lists:keyreplace(#'Room'.id, Room)}). + kvs:put(Roster#'Roster'{roomlist = lists:keyreplace(Room#'Room'.id, #'Room'.id, Rooms, Room)}). update_rooms(#'Roster'{roomlist = Rooms} = Roster, #'Room'{status = Status} = R) -> R2 = case Status of removed -> R;_ -> R#'Room'{last_msg = []} end, @@ -1118,7 +1124,7 @@ user(#'Roster'{id = Id, phone = Phone}, {Presence, Update} = is_online2(PhoneId), Msgs = case catch p2p_readmsgs(Local, PhoneId) of {'EXIT', {Err, _}} -> - n2o:error(?MODULE,"Catch:~p~n",[n2o:stack_trace(error, Err)]), + roster:error(?MODULE,"Catch:~p~n",[{error, Err}]), throw({error, {user, Local, PhoneId}}); Ms -> Ms end, C#'Contact'{presence = Presence, update = Update, services = get_services(phone(PhoneId)), @@ -1163,7 +1169,7 @@ room(#'Roster'{id = Id, phone = Phone}, #'Room'{id = Name, last_msg = LMId, type %% = unread_msg(Rec, Reader, UID), %%TODO fix if writer is empty {ok, #'Room'{readers = Readers}} = kvs:get('Room', Name), - LastPhoneId = case LastMsg of #'Message'{from = LPhoneId} -> LPhoneId; _ -> 0 end, + #'Message'{from = LastPhoneId} = LastMsg, Membrs = lists:flatten( case muc_member(LastPhoneId, Name, presence) of #'Member'{phone_id = Local} = M -> [M]; @@ -1275,7 +1281,7 @@ sub_muc(Subscr, #'Roster'{id = RosterId, phone = Phone, userlist = Cntcts, rooml is_shared_rooms(Rooms, PId)} of {subscribe, #'Contact'{status = friend}, true} -> false; {subscribe, _, IsShared} -> IsShared; - {unsubscribe, true, _} -> true; + {unsubscribe, #'Contact'{}, _} -> true; {unsubscribe, false, false} -> true; _ -> false end]; sub_muc(Subscr, PhoneId, Members, ClientIds) -> @@ -1407,7 +1413,7 @@ norm_reader(Reader) -> Reader. is_visible_msg(#'Message'{seenby = Seen} = Msg, UID) when Seen == []; Seen == [-1]; Seen == [0] -> msg_filter(Msg, UID); -is_visible_msg(#'Message'{feed_id = #muc{name = Room} = Msg}, PhoneId) when is_binary(PhoneId)-> +is_visible_msg(#'Message'{feed_id = #muc{name = Room}} = Msg, PhoneId) when is_binary(PhoneId)-> case muc_member(PhoneId, Room) of [] -> 0; #'Member'{id = MembId} -> msg_filter(Msg, MembId) end; is_visible_msg(Msg, UID) -> msg_filter(Msg, UID). @@ -1442,12 +1448,10 @@ msg_update(Msg, UID) -> msg_filter(Msg, UID). concat(A, B) when is_integer(A), is_integer(B) -> A + B; concat(A, B) when is_list(A), is_list(B) -> A ++ B; -concat({A, MA, SA, []}, {_, _, _, _} = B) -> - concat({A, MA, SA, #'Message'{id = 0}}, B); -concat({_, _, _, _} = A, {B, MB, SB, []} = B) -> - concat(A, {B, MB, SB, #'Message'{id = 0}}); +concat({A, MA, SA, []}, {_, _, _, _} = B) -> concat({A, MA, SA, #'Message'{id = 0}}, B); +concat({_, _, _, _} = A, {B, MB, SB, []}) -> concat(A, {B, MB, SB, #'Message'{id = 0}}); concat({A, MA, StA, #'Message'{id = IdA} = MsgA}, - {B, MB, StB, #'Message'{id = IdB} = MsgB}) -> + {B, MB, StB, #'Message'{id = IdB} = MsgB}) -> {A + B, MA ++ MB, case StA of [] -> StA;_ -> StB end, case IdA > IdB of true -> MsgA;_ -> MsgB end}. @@ -1555,7 +1559,7 @@ get_data(Key, Data) -> false -> []; F -> F end. set_data(Key, Val, Data) -> case get_data(Key, Data) of - false -> Data; + [] -> Data; #'Feature'{} = F -> set_data(F#'Feature'{value = Val}, Data) end. @@ -1621,7 +1625,6 @@ get_reader(Feed, RosterId) -> %% mnesia utils backup() -> roster_db:backup(). %TODO It will be removed after update backup_script on Prod - next_key(Table, Count) -> next_key(Table, mnesia:dirty_first(Table), Count). next_key(Table, CurrentId, Count) -> @@ -1662,7 +1665,7 @@ fold(Fun, Acc, Table, Start, Finish, Driver, Direction, Count, GetFun) when Star {_, _} when Dir -> Acc2; _ -> fold(Fun, Acc2, Table, Prev, Finish, Driver, Direction, Count2) end; _ -> Acc end catch Err:Rea -> - n2o:error(?MODULE, "Catch fold2:~p~n", [n2o:stack_trace(Err, Rea)]), Acc end. + roster:error(?MODULE, "Catch fold2:~p~n", [{Err, Rea}]), Acc end. %%count(#reader{pos = P}, #writer{count = T}) -> T - P. @@ -1688,8 +1691,7 @@ mover(#reader{pos = Pos, cache = {_, Id}, dir = D} = R, T) -> true -> R; false -> case kvs_stream:drop(R#reader{args = 2}) of #reader{pos = Pos} = NR -> NR; - #reader{} = NR -> mover(NR, T); - E -> E + #reader{} = NR -> mover(NR, T) end end. @@ -1893,7 +1895,7 @@ merge_data(Index, Data, OldData) -> sync_indexes() -> lists:map(fun sync_indexes/1, tables()). sync_indexes(#table{name = Table, keys = Keys}) -> - mnesia:wait_for_tables(Table, 10000), + mnesia:wait_for_tables([Table], 10000), #cstruct{attributes = Attrs} = mnesia:table_info(Table, cstruct), Indexes = mnesia:table_info(Table, index), IndexedKeys = [lists:nth(I-1, Attrs)|| I <- Indexes], @@ -1948,13 +1950,14 @@ add_fake_number(PhoneNumber) when is_binary(PhoneNumber) -> end. %% TEST API -check(Module) -> case lists:all(fun(X) -> X == ok end, Module:suite()) of - true -> roster:info("ALL TESTS PASSED", []), true; - false -> roster:info("TEST ERRORS", []), false end. - +check(Module) -> + case lists:all(fun(X) -> X == ok end, Module:suite()) of + true -> roster:info("ALL TESTS PASSED", []), true; + false -> roster:info("TEST ERRORS", []), false + end. n2o_pid(Name) -> - case n2o_async:pid(system, Name) of + case n2o_pi:pid(system, Name) of Pid when is_pid(Pid) -> case process_info(Pid) of undefined -> @@ -1971,22 +1974,22 @@ restart_module(M) -> restart_module(Pid,M) when is_pid(Pid)-> case process_info(Pid) of undefined -> - n2o_async:pid(system, roster_profile) ! {restart, M}; + n2o_pi:pid(system, roster_profile) ! {restart, M}; _ -> Pid end; restart_module(Class,Name) -> - H=case n2o_async:pid(Class,Name) of + H=case n2o_pi:pid(Class,Name) of Pid when is_pid(Pid) -> - #handler{group=Group} = Async=case process_info(Pid) of - undefined -> #handler{module = Name, class = Class, group = roster, name = Name, state = []}; - _ -> n2o_async:send(Pid,{get}) + #pi{sup=Group} = Async=case process_info(Pid) of + undefined -> #pi{module = Name, table = Class, sup = roster, name = Name, state = []}; + _ -> n2o_pi:send(Pid,{get}) end, [ supervisor:F(Group,{Class,Name}) || F <- [ terminate_child , delete_child ] ], n2o:cache(Class,{Class,Name},undefined), Async; - _ -> #handler{module = Name, class = Class, group = roster, name = Name, state = []} + _ -> #pi{module = Name, table = Class, sup = roster, name = Name, state = []} end, - {NPid,_}=n2o_async:start(H), NPid. + {NPid,_}=n2o_pi:start(H), NPid. wait_for(Fun) -> diff --git a/apps/roster/src/roster_channel_helper.erl b/apps/roster/src/roster_channel_helper.erl index c51cf8283416a7f03483e3e3f468034d29e831d3..177aa2e2c575d1da2b2bb06044fa08f7ed817948 100644 --- a/apps/roster/src/roster_channel_helper.erl +++ b/apps/roster/src/roster_channel_helper.erl @@ -111,7 +111,7 @@ check_user_permissions(ChannelId, ClientId, PermissionKey) -> [] -> ResponseSuccess; _ -> %% check admin permission list - case lists:keyfind(PermissionKey, #'Feature'.key, PermList) of + case lists:keyfind(PermissionKey, #'Feature'.key, PermList) of %% TODO: "true ?" investigate ! #'Feature'{value = true} -> ResponseSuccess; _ -> ResponseError end @@ -134,8 +134,12 @@ add_members(#'Room'{id = ChannelId, readers = ChannelReaders} = Channel, Members case MemberStatus of removed -> PrePatchedMember = roster:patch_member(ExistingMember#'Member'{status = member}, ExistingMember), - {PatchedMember, _, _} = roster:add_member(Channel, PrePatchedMember, {no_muc_message, ChannelReaders}), - kvs:put(PatchedMember); + case roster:add_member(Channel, PrePatchedMember, {no_muc_message, ChannelReaders}) of + {PatchedMember = #'Member'{}, _, _} -> kvs:put(PatchedMember); + {error,_} -> skip + % when ErrCode == duplicated; + % ErrCode == not_found; ErrCode == roster_not_found + end; _ -> skip end end diff --git a/apps/roster/src/roster_client.erl b/apps/roster/src/roster_client.erl index 3a9970019200c6acca4306cdb7d033f9f6b8f84b..8f1ccde0951a74f30bc34db1200b84b53a7c164b 100644 --- a/apps/roster/src/roster_client.erl +++ b/apps/roster/src/roster_client.erl @@ -18,7 +18,7 @@ start_client(ClientId, Token, Opts) -> receive_drop(), stop_client(ClientId), Username = proplists:get_value(username, Opts, <<"api">>), - n2o_async:start(#handler{module = ?MODULE, class = system, group = roster, + n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, state = #state{mqtt_opts = [{password, Token}|Opts ++ ?DEFAULT_MQTTC_OPTS], username = Username, receive_pid = self()}, name = ClientId}), init = receive_test(ClientId, init), ok. @@ -33,13 +33,13 @@ start_cli_receive(ClientId, Token, Counter, Opts) -> start_client(ClientId, Toke stop_client(ClientIds) when is_list(ClientIds) -> [stop_client(ClientId) || ClientId <- ClientIds], ok; stop_client(ClientId) -> - case n2o_async:pid(system, ClientId) of + case n2o_pi:pid(system, ClientId) of Pid when is_pid(Pid) -> case process_info(Pid) of undefined -> catch [supervisor:F(roster, {system, ClientId}) || F <- [terminate_child, delete_child]], n2o:cache(system, {system, ClientId}, undefined), ok; - _ -> n2o_async:stop(system, ClientId), ok end; _ -> ok end. + _ -> n2o_pi:stop(system, ClientId), ok end; _ -> ok end. receive_drop() -> receive _ -> receive_drop() after ?DRP_TMOUT -> skip end. @@ -62,48 +62,48 @@ filter_friend(Term, State) -> Status == ban;Status == unban;Status == banned;Status == friend;Status == update -> send; {_, Res} -> Res end. -proc(#mqttc{}, #handler{} = H) -> {reply, [], H}; -proc(init, #handler{name = ?SYS_REST_CLIENT, state = #state{receive_pid = Self} = State} = Async) -> +proc(#mqttc{}, #pi{} = H) -> {reply, [], H}; +proc(init, #pi{name = ?SYS_REST_CLIENT, state = #state{receive_pid = Self} = State} = Async) -> {ok, C} = application:get_env(rest, rest_pid), Self ! init, - {ok, Async#handler{state = State#state{mqttc = C, client_id = ?SYS_REST_CLIENT}, seq = 0}}; -proc(init, #handler{name = ?SYS_BRIDGE_TEST_CLIENT, state = #state{receive_pid = Self} = State} = Async) -> + {ok, Async#pi{state = State#state{mqttc = C, client_id = ?SYS_REST_CLIENT}}}; +proc(init, #pi{name = ?SYS_BRIDGE_TEST_CLIENT, state = #state{receive_pid = Self} = State} = Async) -> {ok, C} = emqttc:start_link([{client_id, ?SYS_BRIDGE_TEST_CLIENT}, {logger, {console, error}}, {reconnect, 5}]), roster:info(?MODULE, "MICRO BRIDGE SIMULATOR PROC started", []), register(sys_bridge, C), Self ! init, - {ok, Async#handler{state = State#state{mqttc = whereis(sys_bridge), client_id = ?SYS_BRIDGE_TEST_CLIENT}, seq = 0}}; -proc(init, #handler{name = ClientId, state = #state{mqtt_opts = Opts, receive_pid = Self, username = Username} = State} = Async) -> + {ok, Async#pi{state = State#state{mqttc = whereis(sys_bridge), client_id = ?SYS_BRIDGE_TEST_CLIENT}}}; +proc(init, #pi{name = ClientId, state = #state{mqtt_opts = Opts, receive_pid = Self, username = Username} = State} = Async) -> roster:info(?MODULE, "ClientInit:~p\r", [ClientId]), {ok, C} = emqttc:start_link([{client_id, ClientId}, {clean_sess, false}, {logger, {console, error}}, {username, Username}, {reconnect, 5}] ++ Opts), Self ! init, - {ok, Async#handler{state = State#state{mqttc = C, client_id = ClientId}, seq = 0}}; + {ok, Async#pi{state = State#state{mqttc = C, client_id = ClientId}}}; -proc({filter, Filter}, #handler{state = #state{receive_pid = Self} = State} = H) -> +proc({filter, Filter}, #pi{state = #state{receive_pid = Self} = State} = H) -> Self ! ok, - {reply, [], H#handler{state = State#state{filter = Filter}}}; + {reply, [], H#pi{state = State#state{filter = Filter}}}; -proc(last_res, #handler{state = #state{receive_pid = Self, last_res = LastRes} = State} = H) -> +proc(last_res, #pi{state = #state{receive_pid = Self, last_res = LastRes} = State} = H) -> Self ! lists:ukeysort(1, LastRes), - {reply, [], H#handler{state = State#state{last_res = []}}}; -proc(unsort_last_res, #handler{state = #state{receive_pid = Self, last_res = LastRes} = State} = H) -> + {reply, [], H#pi{state = State#state{last_res = []}}}; +proc(unsort_last_res, #pi{state = #state{receive_pid = Self, last_res = LastRes} = State} = H) -> Self ! LastRes, - {reply, [], H#handler{state = State#state{last_res = []}}}; -proc({publish, _, BinTerm}, #handler{state = #state{receive_pid = Self, last_res = LastRes, filter = FilterFun} = State} = H) -> + {reply, [], H#pi{state = State#state{last_res = []}}}; +proc({publish, _, BinTerm}, #pi{state = #state{receive_pid = Self, last_res = LastRes, filter = FilterFun} = State} = H) -> case ?MODULE:FilterFun(Term = binary_to_term(BinTerm), State) of send -> write_log([Term]), Self ! Term; _ -> skip end, - {reply, [], H#'handler'{state = State#state{last_res = [Term | LastRes]}}}; -proc(_Term, #handler{state = #state{mqttc = {error, _} = Err}} = H) -> + {reply, [], H#pi{state = State#state{last_res = [Term | LastRes]}}}; +proc(_Term, #pi{state = #state{mqttc = {error, _} = Err}} = H) -> roster:info("mqttc error: ~p", [Err]), {reply, [], H}; -proc({callback, CallbackFun}, #handler{state = State} = H) -> +proc({callback, CallbackFun}, #pi{state = State} = H) -> State2 = CallbackFun(State), - {reply, [], H#handler{state = State2}}; -proc(Term, #handler{state = #state{mqttc = C}} = H) -> + {reply, [], H#pi{state = State2}}; +proc(Term, #pi{state = #state{mqttc = C}} = H) -> roster:send_event(C, <<>>, <<>>, Term), {reply, [], H}. @@ -206,7 +206,7 @@ wait_for_last_res(ClientId, Count) -> Res -> Res end. send(ClientId, Term) -> write_log([Term]), - n2o_async:send(system, ClientId, Term), timer:sleep(50). + n2o_pi:send(system, ClientId, Term), timer:sleep(50). send_last(ClientId, ResultLen) -> send_last(ClientId, ResultLen, [], 5, 100). diff --git a/apps/roster/src/roster_data.erl b/apps/roster/src/roster_data.erl index a03632729ca5b907b314c53dee53755ebf0ee655..6022c9c35c5ed1a91659fbefc6274207010c1c82 100644 --- a/apps/roster/src/roster_data.erl +++ b/apps/roster/src/roster_data.erl @@ -131,7 +131,7 @@ friend_test_rand(N) when is_integer(N) -> friend_test_rand(RosterIds) -> try Rosters = [case R of #'Roster'{} -> R; _-> element(2, kvs:get('Roster', R)) end||R<-RosterIds], - Counter = length(Rosters), +%% Counter = length(Rosters), %% Data = [{APhoneId, AClientId, AToken}, {BPhoneId, BClientId, BToken}] = start_rosters(Rosters), [APhoneId, BPhoneId] = [roster:phone_id(P, RosterId)||#'Roster'{phone = P, id = RosterId}<-Rosters], roster_client:test_info(roster_friend, #'Friend'{phone_id = APhoneId, friend_id = BPhoneId, status = request}, roster:phone(APhoneId)), @@ -143,7 +143,7 @@ friend_test_rand(RosterIds) -> %% roster_client:set_filer([AClientId, BClientId], filter), %% lists:map(fun roster_client:stop_client/1, ClientIds), ok catch Err:Rea -> - n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]), ok + roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]), ok end. get_roster_ids() -> @@ -190,7 +190,7 @@ create_room(RosterIds, Room, PageMembCount, Type) -> [roster_client:test_info(roster_room, #'Room'{status = add, id = Room, members = Mmbrs}, AdmPhone)|| Mmbrs <-Mmbrs2, Mmbrs /= []] %% roster_client:stop_client(AClientId) catch Err:Rea -> - n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]) + roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]) end, Room. create_channel() -> diff --git a/apps/roster/src/roster_db.erl b/apps/roster/src/roster_db.erl index 3ec8f2b36d056dd68479f56d83ff328df98a9c25..8265c09f4f1e4001e5cab2a80be9285e9a6ded97 100644 --- a/apps/roster/src/roster_db.erl +++ b/apps/roster/src/roster_db.erl @@ -1,4 +1,5 @@ -module(roster_db). +-dialyzer({nowarn_function, [fold/5,get_room_stats/1,bin_to_atom_type_msg/0,fix_msg/1,fix_jobs/0]}). -compile(export_all). -include("roster.hrl"). @@ -53,7 +54,7 @@ fix_empty_desc_ids() -> find_invalid_rooms(Id) when is_integer(Id) -> find_invalid_rooms(Id, []). find_invalid_rooms(#'Roster'{roomlist = Rooms} = Roster, N) -> lists:flatten([case catch roster:room(Roster, R2) of - {'EXIT', _} -> false = R2; + {'EXIT', _} -> throw(R2); Room -> Room end || R2 = #'Room'{} <- case N of [] -> Rooms;_ -> roster:last_rooms(Rooms, 100) end]); @@ -450,7 +451,7 @@ fix_msgs() -> upd_msgs(fix_msg). fix_jobs() -> [opt_put(J#'Job'{settings = case S of #'Feature'{} -> [S]; _-> S end}, J) - || J = #'Job'{settings = S}<-kvs:all('Job')], ok. + || J = #'Job'{settings = S }<-kvs:all('Job')], ok. find_msg_by_text(Text) when is_binary(Text) -> [M||M=#'Message'{files = Descs}<-kvs:all('Message'), #'Desc'{mime = <<"text">>, payload = <>} <- Descs]; @@ -615,11 +616,11 @@ restore(File, Node, SkipTbs) -> case mnesia:restore(File, [{skip_tables, SkipTbs}]) of {aborted, {no_exists, Tab}} -> restore(File, Node, [Tab | SkipTbs]); {aborted, Reason} -> roster:info(?MODULE, "aborted backup restore from ~s by reason ~p", [File, Reason]), - {error, Reason}; + {error, Reason}; {atomic, Tabs} -> application:start(bpe), - roster:restart_module(roster_bpe), - {ok, Tabs}; - E -> E end. + roster:restart_module(roster_bpe), + {ok, Tabs} +end. remigrate_default_contact_settings() -> kvs:delete(schema_migrations, 20181008144317), @@ -716,4 +717,4 @@ delete_rotation_table(Table, Module) -> %% Module is creation table module mnesia:delete_table(Table), kvs:init(mnesia, Module). -upd_index()-> [ kvs:put(#'Index'{id={nick,Nick},roster=[Id]}) || #'Roster'{id=Id, nick = Nick} <- kvs:all('Roster'), Nick /=[] ]. \ No newline at end of file +upd_index()-> [ kvs:put(#'Index'{id={nick,Nick},roster=[Id]}) || #'Roster'{id=Id, nick = Nick} <- kvs:all('Roster'), Nick /=[] ]. diff --git a/apps/roster/src/roster_export.erl b/apps/roster/src/roster_export.erl deleted file mode 100644 index 926c11ec8a263e532e85e985b0bde107e5742612..0000000000000000000000000000000000000000 --- a/apps/roster/src/roster_export.erl +++ /dev/null @@ -1,37 +0,0 @@ --module(roster_export). --include("roster.hrl"). --include("micro.hrl"). - --compile(export_all). --compile({parse_transform, exprecs}). --export_records(['Profile', 'Roster', 'Service', 'Feature', - 'Contact', 'Room', 'ExtendedStar', 'Tag', - 'Desc', 'Star', 'Message', p2p, muc, 'Member', 'LinkRoster', 'LinkProfile']). - -to_file(Table, File) -> - file:write_file(File, to_json(Table)). - -json(Rec, Acc) -> Acc++[to_json(Rec)]. - -to_json(Table, Fun, Acc) when is_atom(Table) -> - iolist_to_binary(mochijson2:encode(roster_db:fold(Fun, Acc, Table))). -to_json(Table, Id) -> - case kvs:get(Table, Id) of {ok, Rec} -> to_json(Rec); Err -> Err end. -to_json(#'Roster'{surnames = [_|_] = Surname} = R) -> - to_json(R#'Roster'{surnames = iolist_to_binary(Surname)}); -to_json(#'Roster'{names = [_|_] = Name} = R) -> - to_json(R#'Roster'{names = iolist_to_binary(Name)}); -to_json(#'Roster'{nick = [_|_] = Nick} = R) -> - to_json(R#'Roster'{nick = iolist_to_binary(Nick)}); -to_json(#'Roster'{favorite = [_|_]} = R) -> - to_json(R#'Roster'{favorite = []}); -to_json(#'LinkProfile'{id = <<_:128>> = Id} = LP) -> - to_json(LP#'LinkProfile'{id = micro:norm_uuid(Id)}); -to_json(#'LinkRoster'{id = <<_:128>> = Id} = LP) -> - to_json(LP#'LinkRoster'{id = micro:norm_uuid(Id)}); -to_json(Table) when is_atom(Table) -> - to_json(Table, fun json/2, []); -to_json(Rec) when is_tuple(Rec), is_atom(element(1, Rec)) -> - json_rec:to_json(Rec, ?MODULE). - - diff --git a/apps/roster/src/roster_validator.erl b/apps/roster/src/roster_validator.erl deleted file mode 100644 index ea5d1c818f74323a1d884f78e1ed29693fb2d005..0000000000000000000000000000000000000000 --- a/apps/roster/src/roster_validator.erl +++ /dev/null @@ -1,982 +0,0 @@ --module(roster_validator). --include_lib("bpe/include/bpe.hrl"). --include_lib("emqttd/include/emqttd.hrl"). --include_lib("kvs/include/feed.hrl"). --include_lib("kvs/include/group.hrl"). --include_lib("kvs/include/kvs.hrl"). --include_lib("kvs/include/metainfo.hrl"). --include_lib("kvs/include/user.hrl"). --include_lib("n2o/include/n2o.hrl"). --include_lib("roster/include/roster.hrl"). --include_lib("roster/include/static_auth.hrl"). --compile(export_all). - -custom_validate(_Obj) -> []. -validate(Obj) -> validate(Obj, [], application:get_env(bert, custom_validate, {?MODULE, custom_validate})). -validate(Obj, Acc, _) when is_atom(Obj) -> Acc; -validate(Obj, Acc, _) when is_integer(Obj) -> Acc; -validate(Obj, Acc, _) when is_binary(Obj) -> Acc; - -validate(D = #'writer'{id = Id, count = Count, cache = Cache, args = Args, first = First}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} -> Acc2; - {count,_} when is_integer(Count) -> Acc2; - {cache,_} when Cache==[] orelse is_tuple(Cache) -> Acc2; - {args,_} -> Acc2; - {first,_} when First==[] orelse is_tuple(First) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'writer'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'reader'{id = Id, pos = Pos, cache = Cache, args = Args, feed = Feed, dir = Dir}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} -> Acc2; - {pos,_} when Pos==[] orelse is_integer(Pos) -> Acc2; - {cache,_} when Cache==[] orelse is_integer(Cache) -> Acc2; - {args,_} -> Acc2; - {feed,_} -> Acc2; - {dir,_} when Dir==0 orelse Dir==1 -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'reader'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'cur'{id = Id, top = Top, bot = Bot, dir = Dir, reader = Reader, writer = Writer, args = Args}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} -> Acc2; - {top,_} when Top==[] orelse is_integer(Top) -> Acc2; - {bot,_} when Bot==[] orelse is_integer(Bot) -> Acc2; - {dir,_} when Dir==0 orelse Dir==1 -> Acc2; - {reader,_} when Reader==[] orelse is_tuple(Reader) -> Acc2; - {writer,_} when Writer==[] orelse is_tuple(Writer) -> Acc2; - {args,_} when is_list(Args) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{args, D}|Acc3] end, Acc2, Args); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'cur'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'iter'{id = Id, container = Container, feed = Feed, next = Next, prev = Prev}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed,_} -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'iter'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'container'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {top,_} when Top==[] orelse is_integer(Top) -> Acc2; - {rear,_} when Rear==[] orelse is_integer(Rear) -> Acc2; - {count,_} when is_integer(Count) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'container'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'iterator'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'iterator'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'log'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {top,_} when Top==[] orelse is_integer(Top) -> Acc2; - {rear,_} when Rear==[] orelse is_integer(Rear) -> Acc2; - {count,_} when is_integer(Count) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'log'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'operation'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'operation'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'feed'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {top,_} when Top==[] orelse is_integer(Top) -> Acc2; - {rear,_} when Rear==[] orelse is_integer(Rear) -> Acc2; - {count,_} when is_integer(Count) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'feed'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'task'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {roles,_} when is_binary(Roles) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'task'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'userTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {roles,_} when is_binary(Roles) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'userTask'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'serviceTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {roles,_} when is_binary(Roles) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'serviceTask'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'receiveTask'{name = Name, module = Module, prompt = Prompt, roles = Roles}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {roles,_} when is_binary(Roles) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'receiveTask'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'messageEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {payload,_} when is_binary(Payload) -> Acc2; - {timeout,_} when is_tuple(Timeout) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'messageEvent'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'boundaryEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {payload,_} when is_binary(Payload) -> Acc2; - {timeout,_} when is_tuple(Timeout) -> Acc2; - {timeDate,_} when is_binary(TimeDate) -> Acc2; - {timeDuration,_} when is_binary(TimeDuration) -> Acc2; - {timeCycle,_} when is_binary(TimeCycle) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'boundaryEvent'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'timeoutEvent'{name = Name, module = Module, prompt = Prompt, payload = Payload, timeout = Timeout, timeDate = TimeDate, timeDuration = TimeDuration, timeCycle = TimeCycle}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; - {timeout,_} when Timeout==[] orelse is_tuple(Timeout) -> Acc2; - {timeDate,_} when TimeDate==[] orelse is_binary(TimeDate) -> Acc2; - {timeDuration,_} when TimeDuration==[] orelse is_binary(TimeDuration) -> Acc2; - {timeCycle,_} when TimeCycle==[] orelse is_binary(TimeCycle) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'timeoutEvent'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'beginEvent'{name = Name, module = Module, prompt = Prompt}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'beginEvent'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'endEvent'{name = Name, module = Module, prompt = Prompt}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_atom(Name) -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {prompt,_} when is_list(Prompt) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{prompt, D}|Acc3] end, Acc2, Prompt); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'endEvent'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'sequenceFlow'{source = Source, target = Target}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {source,_} when Source==[] orelse is_atom(Source) -> Acc2; - {target,_} when Target==[] orelse is_atom(Target) orelse is_list(Target) -> - lists:foldl(fun(Tmp, Acc3) when is_atom(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{target, D}|Acc3] end, Acc2, Target); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'sequenceFlow'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'hist'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, task = Task, docs = Docs, time = Time}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {task,_} when is_atom(Task) -> Acc2; - {docs,_} when is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); - {time,_} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'hist'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'process'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, name = Name, roles = Roles, tasks = Tasks, events = Events, hist = Hist, flows = Flows, rules = Rules, docs = Docs, options = Options, task = Task, timer = Timer, notifications = Notifications, result = Result, started = Started, beginEvent = BeginEvent, endEvent = EndEvent}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {roles,_} when is_list(Roles) -> []; - {tasks,_} when is_list(Tasks) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'task') orelse is_record(Tmp,'serviceTask') orelse is_record(Tmp,'userTask') orelse is_record(Tmp,'receiveTask') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tasks, D}|Acc3] end, Acc2, Tasks); - {events,_} when is_list(Events) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') orelse is_record(Tmp,'boundaryEvent') orelse is_record(Tmp,'timeoutEvent') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); - - {flows,_} when is_list(Flows) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'sequenceFlow') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{flows, D}|Acc3] end, Acc2, Flows); - - {docs,_} when is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); - {options,_} -> Acc2; - {task,_} when Task==[] orelse is_atom(Task) -> Acc2; - {timer,_} when Timer==[] orelse is_binary(Timer) -> Acc2; - {notifications,_} when Notifications==[] orelse true -> Acc2; - {result,_} when Result==[] orelse is_binary(Result) -> Acc2; - {started,_} when Started==[] orelse is_tuple(Started) -> Acc2; - {beginEvent,_} when BeginEvent==[] orelse is_atom(BeginEvent) -> Acc2; - {endEvent,_} when EndEvent==[] orelse is_atom(EndEvent) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'process'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'complete'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'complete'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'proc'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'proc'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'load'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'load'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'histo'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'histo'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'create'{proc = Proc, docs = Docs}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {proc,_} when Proc==[] orelse is_record(Proc,'process') orelse is_binary(Proc) -> Acc2; - {docs,_} when Docs==[] orelse is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'create'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'amend'{id = Id, docs = Docs}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {docs,_} when Docs==[] orelse is_list(Docs) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{docs, D}|Acc3] end, Acc2, Docs); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'amend'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'chain'{id = Id, top = Top, rear = Rear, count = Count}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {top,_} when Top==[] orelse is_integer(Top) -> Acc2; - {rear,_} when Rear==[] orelse is_integer(Rear) -> Acc2; - {count,_} when is_integer(Count) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'chain'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'push'{model = Model, type = Type, title = Title, alert = Alert, badge = Badge, sound = Sound}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {model,_} when Model==[] orelse true -> Acc2; - {type,_} when Type==[] orelse is_binary(Type) -> Acc2; - {title,_} when Title==[] orelse is_binary(Title) -> Acc2; - {alert,_} when Alert==[] orelse is_binary(Alert) -> Acc2; - {badge,_} when Badge==[] orelse is_integer(Badge) -> Acc2; - {sound,_} when Sound==[] orelse is_binary(Sound) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'push'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Search'{id = Id, ref = Ref, field = Field, type = Type, value = Value, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when is_integer(Id) orelse is_binary(Id) -> Acc2; - {ref,_} when is_binary(Ref) -> Acc2; - {field,_} when is_binary(Field) -> Acc2; - {type,_} when Type=='==' orelse Type=='!=' orelse Type=='like' -> Acc2; - {value,_} when is_list(Value) -> - lists:foldl(fun(Tmp, Acc3) when true orelse is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{value, D}|Acc3] end, Acc2, Value); - {status,_} when Status=='profile' orelse Status=='roster' orelse Status=='contact' orelse Status=='member' orelse Status=='room' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Search'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'p2p'{from = From, to = To}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {from,_} when is_binary(From) -> Acc2; - {to,_} when is_binary(To) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'p2p'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'muc'{name = Name}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when is_binary(Name) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'muc'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqi'{feed_id = Feed_id, query = Query, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {feed_id, #'muc'{}} -> Acc2; - {query,_} when Query==[] orelse is_binary(Query) -> Acc2; - {status,_} when Status==[] orelse Status=='admin' orelse Status=='member' orelse Status=='removed' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqi'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Feature'{id = Id, key = Key, value = Value, group = Group}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {key,_} when is_binary(Key) -> Acc2; - {value,_} when is_binary(Value) -> Acc2; - {group,_} when is_binary(Group) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Feature'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Service'{id = Id, type = Type, data = Data, login = Login, password = Password, expiration = Expiration, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {type,_} when Type=='email' orelse Type=='vox' orelse Type=='aws' orelse Type=='wallet' -> Acc2; - {data,_} -> Acc2; - {login,_} when Login==[] orelse is_binary(Login) -> Acc2; - {password,_} when Password==[] orelse is_binary(Password) -> Acc2; - {expiration,_} when Expiration==[] orelse is_integer(Expiration) -> Acc2; - {status,_} when Status==[] orelse Status=='verified' orelse Status=='added' orelse Status=='add' orelse Status=='remove' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Service'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Member'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, alias = Alias, reader = Reader, update = Update, settings = Settings, services = Services, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when Container=='chain' orelse Container=='cur' orelse Container==[] -> Acc2; - {feed_id,_} when is_record(Feed_id,'muc') orelse is_record(Feed_id,'p2p') orelse Feed_id==[] -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - {phone_id,_} when Phone_id==[] orelse is_binary(Phone_id) -> Acc2; - {avatar,_} when Avatar==[] orelse is_binary(Avatar) -> Acc2; - {names,_} when Names==[] orelse is_binary(Names) -> Acc2; - {surnames,_} when Surnames==[] orelse is_binary(Surnames) -> Acc2; - {alias,_} when Alias==[] orelse is_binary(Alias) -> Acc2; - {reader,_} when Reader==[] orelse is_integer(Reader) -> Acc2; - {update,_} when Update==[] orelse is_integer(Update) -> Acc2; - {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {services,_} when Services==[] orelse is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); - {presence,_} when Presence==[] orelse Presence=='online' orelse Presence=='offline' -> Acc2; - {status,_} when Status==[] orelse Status=='admin' orelse Status=='member' orelse Status=='removed' orelse Status=='patch' orelse Status=='owner' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Member'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Desc'{id = Id, mime = Mime, payload = Payload, parentid = Parentid, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {mime,_} when Mime==[] orelse is_binary(Mime) -> Acc2; - {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; - {parentid,_} when Parentid==[] orelse is_binary(Parentid) -> Acc2; - {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Desc'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'StickerPack'{id = Id, name = Name, keywords = Keywords, description = Description, author = Author, stickers = Stickers, created = Created, updated = Updated, downloaded = Downloaded}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {keywords,_} when is_list(Keywords) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{keywords, D}|Acc3] end, Acc2, Keywords); - {description,_} when Description==[] orelse is_binary(Description) -> Acc2; - {author,_} when Author==[] orelse is_binary(Author) -> Acc2; - {stickers,_} when is_list(Stickers) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{stickers, D}|Acc3] end, Acc2, Stickers); - {created,_} when is_integer(Created) -> Acc2; - {updated,_} when is_integer(Updated) -> Acc2; - {downloaded,_} when is_integer(Downloaded) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'StickerPack'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Message'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, msg_id = Msg_id, from = From, to = To, created = Created, files = Files, type = Type, link = Link, seenby = Seenby, repliedby = Repliedby, mentioned = Mentioned, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when Container=='chain' orelse Container=='cur' orelse Container==[] -> Acc2; - {feed_id,_} when is_record(Feed_id,'muc') orelse is_record(Feed_id,'p2p') -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {msg_id,_} when Msg_id==[] orelse is_binary(Msg_id) -> Acc2; - {from,_} when From==[] orelse is_binary(From) -> Acc2; - {to,_} when To==[] orelse is_binary(To) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - {files,_} when is_list(Files) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{files, D}|Acc3] end, Acc2, Files); - {type,_} when is_list(Type) -> - lists:foldl(fun(Tmp, Acc3) when Tmp=='sys' orelse Tmp=='reply' orelse Tmp=='forward' orelse Tmp=='read' orelse Tmp=='edited' orelse Tmp=='cursor' orelse Tmp=='draft' -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{type, D}|Acc3] end, Acc2, Type); - {link,_} when Link==[] orelse is_integer(Link) orelse is_record(Link,'Message') -> Acc2; - {seenby,_} when Seenby==[] orelse is_list(Seenby) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{seenby, D}|Acc3] end, Acc2, Seenby); - {repliedby,_} when Repliedby==[] orelse is_list(Repliedby) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{repliedby, D}|Acc3] end, Acc2, Repliedby); - {mentioned,_} when Mentioned==[] orelse is_list(Mentioned) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{mentioned, D}|Acc3] end, Acc2, Mentioned); - {status,_} when Status==[] orelse Status=='async' orelse Status=='delete' orelse Status=='clear' orelse Status=='update' orelse Status=='edit' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Message'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Link'{id = Id, name = Name, room_id = Room_id, created = Created, type = Type, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {room_id,_} when Room_id==[] orelse is_binary(Room_id) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - {type,_} when Type==[] orelse Type=='group' orelse Type=='channel' -> Acc2; - {status,_} when Status==[] orelse Status=='gen' orelse Status=='check' orelse Status=='add' orelse Status=='get' orelse Status=='join' orelse Status=='update' orelse Status=='delete' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Link'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Room'{id = Id, name = Name, links = Links, description = Description, settings = Settings, members = Members, admins = Admins, data = Data, type = Type, tos = Tos, tos_update = Tos_update, unread = Unread, mentions = Mentions, readers = Readers, last_msg = Last_msg, update = Update, created = Created, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {links,_} when Links==[] orelse is_list(Links) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Link') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{links, D}|Acc3] end, Acc2, Links); - {description,_} when Description==[] orelse is_binary(Description) -> Acc2; - {settings,_} when is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {members,_} when is_list(Members) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{members, D}|Acc3] end, Acc2, Members); - {admins,_} when is_list(Admins) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Member') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{admins, D}|Acc3] end, Acc2, Admins); - {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Desc') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - {type,_} when Type==[] orelse Type=='group' orelse Type=='channel' orelse Type=='call' -> Acc2; - {tos,_} when Tos==[] orelse is_binary(Tos) -> Acc2; - {tos_update,_} when Tos_update==[] orelse is_integer(Tos_update) -> Acc2; - {unread,_} when Unread==[] orelse is_integer(Unread) -> Acc2; - {mentions,_} when is_list(Mentions) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{mentions, D}|Acc3] end, Acc2, Mentions); - {readers,_} when is_list(Readers) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{readers, D}|Acc3] end, Acc2, Readers); - {last_msg,_} when Last_msg==[] orelse is_integer(Last_msg) orelse is_record(Last_msg,'Message') -> Acc2; - {update,_} when Update==[] orelse is_integer(Update) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - {status,_} when Status==[] orelse Status=='create' orelse Status=='leave' orelse Status=='add' orelse Status=='remove' orelse Status=='removed' orelse Status=='join' orelse Status=='joined' orelse Status=='info' orelse Status=='patch' orelse Status=='get' orelse Status=='delete' orelse Status=='last_msg' orelse Status=='mute' orelse Status=='unmute' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Room'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Tag'{roster_id = Roster_id, name = Name, color = Color, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {roster_id,_} when Roster_id==[] orelse is_binary(Roster_id) -> Acc2; - {name,_} when is_binary(Name) -> Acc2; - {color,_} when is_binary(Color) -> Acc2; - {status,_} when Status==[] orelse Status=='create' orelse Status=='remove' orelse Status=='edit' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Tag'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Star'{id = Id, client_id = Client_id, roster_id = Roster_id, message = Message, tags = Tags, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {client_id,_} when Client_id==[] orelse is_binary(Client_id) -> Acc2; - {roster_id,_} when Roster_id==[] orelse is_integer(Roster_id) -> Acc2; - {message,_} when Message==[] orelse is_record(Message,'Message') -> Acc2; - {tags,_} when is_list(Tags) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); - {status,_} when Status==[] orelse Status=='add' orelse Status=='remove' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Star'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Typing'{phone_id = Phone_id, comments = Comments}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone_id,_} when is_binary(Phone_id) -> Acc2; - {comments,_} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Typing'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Contact'{phone_id = Phone_id, avatar = Avatar, names = Names, surnames = Surnames, nick = Nick, reader = Reader, unread = Unread, last_msg = Last_msg, update = Update, created = Created, settings = Settings, services = Services, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone_id,_} when Phone_id==[] orelse is_binary(Phone_id) -> Acc2; - {avatar,_} when Avatar==[] orelse is_binary(Avatar) -> Acc2; - {names,_} when Names==[] orelse is_binary(Names) -> Acc2; - {surnames,_} when Surnames==[] orelse is_binary(Surnames) -> Acc2; - {nick,_} when Nick==[] orelse is_binary(Nick) -> Acc2; - {reader,_} when Reader==[] orelse is_integer(Reader) orelse is_list(Reader) -> - lists:foldl(fun(Tmp, Acc3) when is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{reader, D}|Acc3] end, Acc2, Reader); - {unread,_} when Unread==[] orelse is_integer(Unread) -> Acc2; - {last_msg,_} when Last_msg==[] orelse is_record(Last_msg,'Message') -> Acc2; - {update,_} when Update==[] orelse is_integer(Update) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - {settings,_} when is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {services,_} when is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); - {presence,_} when Presence==[] orelse Presence=='online' orelse Presence=='offline' orelse is_binary(Presence) -> Acc2; - {status,_} when Status==[] orelse Status=='request' orelse Status=='authorization' orelse Status=='ignore' orelse Status=='internal' orelse Status=='friend' orelse Status=='last_msg' orelse Status=='ban' orelse Status=='banned' orelse Status=='deleted' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Contact'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ExtendedStar'{star = Star, from = From}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {star,_} when is_record(Star,'Star') orelse Star==[] -> Acc2; - {from,_} when is_record(From,'Contact') orelse is_record(From,'Room') orelse From==[] -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'ExtendedStar'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Auth'{client_id = Client_id, dev_key = Dev_key, user_id = User_id, phone = Phone, token = Token, type = Type, sms_code = Sms_code, attempts = Attempts, services = Services, settings = Settings, push = Push, os = Os, created = Created, last_online = Last_online}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {client_id,_} when Client_id==[] orelse is_binary(Client_id) -> Acc2; - {dev_key,_} when Dev_key==[] orelse is_binary(Dev_key) -> Acc2; - {user_id,_} when User_id==[] orelse is_binary(User_id) -> Acc2; - {phone,_} when Phone==[] orelse is_binary(Phone) orelse is_tuple(Phone) -> Acc2; - {token,_} when Token==[] orelse is_binary(Token) -> Acc2; - {type,_} when Type==[] orelse is_atom(Type) -> Acc2; - {sms_code,_} when Sms_code==[] orelse is_binary(Sms_code) -> Acc2; - {attempts,_} when Attempts==[] orelse is_integer(Attempts) -> Acc2; - {services,_} when is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); - {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {push,_} when Push==[] orelse is_binary(Push) -> Acc2; - {os,_} when Os==[] orelse Os=='ios' orelse Os=='android' orelse Os=='web' -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - {last_online,_} when Last_online==[] orelse is_integer(Last_online) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Auth'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Roster'{id = Id, names = Names, surnames = Surnames, email = Email, nick = Nick, userlist = Userlist, roomlist = Roomlist, favorite = Favorite, tags = Tags, phone = Phone, avatar = Avatar, update = Update, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_binary(Id) orelse is_integer(Id) -> Acc2; - {names,_} when Names==[] orelse is_binary(Names) -> Acc2; - {surnames,_} when Surnames==[] orelse is_binary(Surnames) -> Acc2; - {email,_} when Email==[] orelse is_binary(Email) -> Acc2; - {nick,_} when Nick==[] orelse is_binary(Nick) -> Acc2; - {userlist,_} when is_list(Userlist) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Contact') orelse is_integer(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{userlist, D}|Acc3] end, Acc2, Userlist); - {roomlist,_} when is_list(Roomlist) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Room') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{roomlist, D}|Acc3] end, Acc2, Roomlist); - {favorite,_} when is_list(Favorite) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Star') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{favorite, D}|Acc3] end, Acc2, Favorite); - {tags,_} when is_list(Tags) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Tag') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{tags, D}|Acc3] end, Acc2, Tags); - {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; - {avatar,_} when Avatar==[] orelse is_binary(Avatar) -> Acc2; - {update,_} when Update==[] orelse is_integer(Update) -> Acc2; - {status,_} when Status==[] orelse Status=='get' orelse Status=='create' orelse Status=='del' orelse Status=='remove' orelse Status=='nick' orelse Status=='add' orelse Status=='update' orelse Status=='list' orelse Status=='patch' orelse Status=='last_msg' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Roster'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Profile'{phone = Phone, services = Services, rosters = Rosters, settings = Settings, update = Update, balance = Balance, presence = Presence, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; - {services,_} when Services==[] orelse is_list(Services) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Service') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{services, D}|Acc3] end, Acc2, Services); - {rosters,_} when Rosters==[] orelse is_list(Rosters) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Roster') orelse is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{rosters, D}|Acc3] end, Acc2, Rosters); - {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {update,_} when is_integer(Update) -> Acc2; - {balance,_} when is_integer(Balance) -> Acc2; - {presence,_} when Presence==[] orelse Presence=='offline' orelse Presence=='online' orelse is_binary(Presence) -> Acc2; - {status,_} when Status==[] orelse Status=='remove' orelse Status=='get' orelse Status=='patch' orelse Status=='update' orelse Status=='delete' orelse Status=='create' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Profile'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Presence'{uid = Uid, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {uid,_} when is_binary(Uid) -> Acc2; - {status,_} when Status==[] orelse Status=='offline' orelse Status=='online' orelse is_binary(Status) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Presence'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Friend'{phone_id = Phone_id, friend_id = Friend_id, settings = Settings, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone_id,_} when is_binary(Phone_id) -> Acc2; - {friend_id,_} when is_binary(Friend_id) -> Acc2; - {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {status,_} when Status=='ban' orelse Status=='unban' orelse Status=='request' orelse Status=='confirm' orelse Status=='update' orelse Status=='ignore' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Friend'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'act'{name = Name, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {data,_} when is_binary(Data) orelse is_integer(Data) orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'act'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Job'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, context = Context, proc = Proc, time = Time, data = Data, events = Events, settings = Settings, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when Container=='chain' orelse Container==[] -> Acc2; - {feed_id, #'act'{}} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {context,_} when Context==[] orelse is_integer(Context) orelse is_binary(Context) -> Acc2; - {proc,_} when Proc==[] orelse is_integer(Proc) orelse is_record(Proc,'process') -> Acc2; - {time,_} when Time==[] orelse is_integer(Time) -> Acc2; - {data,_} when Data==[] orelse is_binary(Data) orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true orelse is_record(Tmp,'Message') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - {events,_} when Events==[] orelse is_list(Events) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'messageEvent') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{events, D}|Acc3] end, Acc2, Events); - {settings,_} when Settings==[] orelse is_list(Settings) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Feature') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{settings, D}|Acc3] end, Acc2, Settings); - {status,_} when Status==[] orelse Status=='init' orelse Status=='update' orelse Status=='delete' orelse Status=='pending' orelse Status=='stop' orelse Status=='complete' orelse Status=='restart' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Job'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'History'{roster_id = Roster_id, feed = Feed, size = Size, entity_id = Entity_id, data = Data, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {roster_id,_} when is_binary(Roster_id) -> Acc2; - {feed,_} when is_record(Feed,'p2p') orelse is_record(Feed,'muc') orelse is_record(Feed,'act') orelse is_record(Feed,'StickerPack') orelse Feed==[] -> Acc2; - {size,_} when Size==[] orelse is_integer(Size) -> Acc2; - {entity_id,_} when Entity_id==[] orelse is_integer(Entity_id) -> Acc2; - {data,_} when Data==[] orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Message') orelse is_record(Tmp,'Job') orelse is_record(Tmp,'StickerPack') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - {status,_} when Status=='updated' orelse Status=='get' orelse Status=='update' orelse Status=='last_loaded' orelse Status=='last_msg' orelse Status=='get_reply' orelse Status=='double_get' orelse Status=='delete' orelse Status=='image' orelse Status=='video' orelse Status=='file' orelse Status=='link' orelse Status=='audio' orelse Status=='contact' orelse Status=='location' orelse Status=='text' orelse Status=='draft' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'History'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Schedule'{id = Id, proc = Proc, data = Data, state = State}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) orelse is_tuple(Id) -> Acc2; - {proc,_} when Proc==[] orelse is_integer(Proc) orelse is_binary(Proc) -> Acc2; - {data,_} when is_binary(Data) orelse is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - {state,_} when State==[] orelse true -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Schedule'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Index'{id = Id, roster = Roster}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse true -> Acc2; - {roster,_} when is_list(Roster) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{roster, D}|Acc3] end, Acc2, Roster); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Index'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Whitelist'{phone = Phone, created = Created}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Whitelist'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'error'{code = Code}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_atom(Code) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'error'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ok'{code = Code}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_binary(Code) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'ok'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'error2'{code = Code, src = Src}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_atom(Code) -> Acc2; - {src,_} when Src==[] orelse is_binary(Src) orelse is_integer(Src) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'error2'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'ok2'{code = Code, src = Src}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_atom(Code) -> Acc2; - {src,_} when Src==[] orelse is_tuple(Src) orelse is_binary(Src) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'ok2'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'io'{code = Code, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_record(Code,'ok') orelse is_record(Code,'error') orelse is_record(Code,'ok2') orelse is_record(Code,'error2') orelse Code=='transcribe' -> Acc2; - {data,_} when Data==[] orelse is_binary(Data) orelse is_record(Data,'Roster') orelse is_tuple(Data) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'io'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Ack'{table = Table, id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {table,_} when is_atom(Table) -> Acc2; - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Ack'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'errors'{code = Code, data = Data}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {code,_} when Code==[] orelse is_list(Code) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{code, D}|Acc3] end, Acc2, Code); - {data,_} when Data==[] orelse true -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'errors'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'PushService'{recipients = Recipients, id = Id, ttl = Ttl, module = Module, priority = Priority, payload = Payload}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {recipients,_} when is_list(Recipients) -> - lists:foldl(fun(Tmp, Acc3) when is_binary(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{recipients, D}|Acc3] end, Acc2, Recipients); - {id,_} when Id==[] orelse is_binary(Id) -> Acc2; - {ttl,_} when Ttl==[] orelse is_integer(Ttl) -> Acc2; - {module,_} when Module==[] orelse is_binary(Module) -> Acc2; - {priority,_} when Priority==[] orelse is_binary(Priority) -> Acc2; - {payload,_} when Payload==[] orelse is_binary(Payload) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'PushService'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'PublishService'{message = Message, topic = Topic, qos = Qos}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {message,_} when Message==[] orelse is_binary(Message) -> Acc2; - {topic,_} when Topic==[] orelse is_binary(Topic) -> Acc2; - {qos,_} when Qos==[] orelse is_integer(Qos) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'PublishService'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'FakeNumbers'{phone = Phone, created = Created}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {phone,_} when Phone==[] orelse is_binary(Phone) -> Acc2; - {created,_} when Created==[] orelse is_integer(Created) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'FakeNumbers'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Draft'{data = Data, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {data,_} when is_list(Data) -> - lists:foldl(fun(Tmp, Acc3) when true -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{data, D}|Acc3] end, Acc2, Data); - {status,_} when Status=='update' orelse Status=='get' orelse Status=='delete' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'Draft'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'handler'{name = Name, module = Module, class = Class, group = Group, config = Config, state = State, seq = Seq}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when is_atom(Name) -> Acc2; - {module,_} when is_atom(Module) -> Acc2; - {class,_} -> Acc2; - {group,_} when is_atom(Group) -> Acc2; - {config,_} -> Acc2; - {state,_} -> Acc2; - {seq,_} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'handler'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'pi'{name = Name, sup = Sup, module = Module, state = State}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {name,_} when is_atom(Name) -> Acc2; - {sup,_} when is_atom(Sup) -> Acc2; - {module,_} when is_atom(Module) -> Acc2; - {state,_} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'pi'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'cx'{handlers = Handlers, actions = Actions, req = Req, module = Module, lang = Lang, path = Path, session = Session, formatter = Formatter, params = Params, node = Node, client_pid = Client_pid, state = State, from = From, vsn = Vsn}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {handlers,_} when is_list(Handlers) -> - lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'handler') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{handlers, D}|Acc3] end, Acc2, Handlers); - {actions,_} when is_list(Actions) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{actions, D}|Acc3] end, Acc2, Actions); - {req,_} when Req==[] orelse true -> Acc2; - {module,_} when Module==[] orelse is_atom(Module) -> Acc2; - {lang,_} when Lang==[] orelse is_atom(Lang) -> Acc2; - {path,_} when Path==[] orelse is_binary(Path) -> Acc2; - {session,_} when Session==[] orelse is_binary(Session) -> Acc2; - {formatter,_} when Formatter=='bert' orelse Formatter=='json' -> Acc2; - {params,_} when Params==[] orelse is_list(Params) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{params, D}|Acc3] end, Acc2, Params); - {node,_} when Node==[] orelse is_atom(Node) -> Acc2; - {client_pid,_} when Client_pid==[] orelse true -> Acc2; - {state,_} when State==[] orelse true -> Acc2; - {from,_} when From==[] orelse is_binary(From) -> Acc2; - {vsn,_} when Vsn==[] orelse is_binary(Vsn) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'cx'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'user'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds, email = Email}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - {email,_} when Email==[] orelse is_binary(Email) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'user'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'group'{id = Id, container = Container, feed_id = Feed_id, prev = Prev, next = Next, feeds = Feeds}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when Id==[] orelse is_integer(Id) -> Acc2; - {container,_} when is_atom(Container) -> Acc2; - {feed_id,_} -> Acc2; - {prev,_} when Prev==[] orelse is_integer(Prev) -> Acc2; - {next,_} when Next==[] orelse is_integer(Next) -> Acc2; - {feeds,_} when is_list(Feeds) -> []; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'group'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_topic'{topic = Topic, flags = Flags}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {topic,_} when is_binary(Topic) -> Acc2; - {flags,_} when is_list(Flags) -> - lists:foldl(fun(Tmp, Acc3) when Tmp=='retained' orelse Tmp=='static' -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{flags, D}|Acc3] end, Acc2, Flags); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_topic'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_client'{client_id = Client_id, client_pid = Client_pid, username = Username, peername = Peername, clean_sess = Clean_sess, proto_ver = Proto_ver, will_topic = Will_topic, ws_initial_headers = Ws_initial_headers}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {client_id,_} when is_binary(Client_id) orelse Client_id=='undefined' -> Acc2; - - {username,_} when is_binary(Username) orelse Username=='undefined' -> Acc2; - {peername,_} when is_tuple(Peername) -> Acc2; - - {proto_ver,_} when Proto_ver==3 orelse Proto_ver==4 -> Acc2; - {will_topic,_} when Will_topic=='undefined' orelse is_binary(Will_topic) -> Acc2; - {ws_initial_headers,_} when is_list(Ws_initial_headers) -> - lists:foldl(fun(Tmp, Acc3) when is_tuple(Tmp) -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{ws_initial_headers, D}|Acc3] end, Acc2, Ws_initial_headers); - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_client'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_session'{client_id = Client_id, sess_pid = Sess_pid, clean_sess = Clean_sess}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {client_id,_} when is_binary(Client_id) -> Acc2; - - - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_session'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_message'{id = Id}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when is_binary(Id) orelse Id=='undefined' -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_message'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_delivery'{sender = Sender, message = Message}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - - {message, #'mqtt_message'{}} -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_delivery'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_route'{topic = Topic, node = Node}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {topic,_} when is_binary(Topic) -> Acc2; - - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_route'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'mqtt_alarm'{id = Id, severity = Severity, title = Title, summary = Summary}, Acc, {CustomValidateModule, ValidateFun} = CM) -> - ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> - case {RecField, F} of - {id,_} when is_binary(Id) -> Acc2; - {severity,_} when Severity=='warning' orelse Severity=='error' orelse Severity=='critical' -> Acc2; - {title,_} when is_list(Title) orelse is_binary(Title) -> Acc2; - {summary,_} when is_list(Summary) orelse is_binary(Summary) -> Acc2; - _ -> [{RecField, D}|Acc2] - end end, Acc, lists:zip(record_info(fields, 'mqtt_alarm'), tl(tuple_to_list(D)))), - ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end. \ No newline at end of file diff --git a/apps/roster/src/test/friend_test.erl b/apps/roster/src/test/friend_test.erl index 232bf39b56f1ab20e4f06b355acdd570ef998ea4..192023d6c06d6b8223550e47c38d76afc1c47c3b 100644 --- a/apps/roster/src/test/friend_test.erl +++ b/apps/roster/src/test/friend_test.erl @@ -4,14 +4,16 @@ -export([make_friends/2]). -send_friend_request(User1PhoneId, User2PhoneId) -> +send_friend_request(_User1PhoneId, _User2PhoneId) -> ok. -confirm_friend_request(User1PhoneId, User2PhoneId) -> +confirm_friend_request(_User1PhoneId, _User2PhoneId) -> ok. make_friends(User1PhoneId, User2PhoneId) -> %% Steps %% 1 - User1 - send friend request %% 2 - User2 - confirm friend request + ok = send_friend_request(User1PhoneId, User2PhoneId), + ok = confirm_friend_request(User1PhoneId, User2PhoneId), ok. \ No newline at end of file diff --git a/apps/roster/src/test/main_test.erl b/apps/roster/src/test/main_test.erl index d9d3166d250a5575e20c047c927b60ecf87ad352..11451d5e6ed956b948f22a3f9f5dfde4a6831306 100644 --- a/apps/roster/src/test/main_test.erl +++ b/apps/roster/src/test/main_test.erl @@ -19,7 +19,7 @@ remove_fake_users_data() -> muc_msgs() -> RoomName = Room = <<"test_room_777">>, - Phones = [{APhone = <<"73777">>, admin}, {<<"79773">>, admin}, {<<"173737">>, member}, {<<"273747">>, member}], + Phones = [{_APhone = <<"73777">>, admin}, {<<"79773">>, admin}, {<<"173737">>, member}, {<<"273747">>, member}], %% Room2 = get_room_id(APhone, RoomName), Counter = length(Phones), roster:purge_room(Room), @@ -33,7 +33,6 @@ muc_msgs() -> Member = #'Member'{presence = online, feed_id = Feed, phone_id = PhoneId, status = Aff}, {PhoneId, ClientId, Member} end || {Phone, Aff} <- Phones], - _ = [ClientId || {_, ClientId, _, _} <- PCs], {Admins, Members} = roster:split_members([M || {_, _, M} <- TPCs]), roster_client:set_filer([AClientId, CClientId], filter_friend), roster_client:send_receive(AClientId, 2, #'Friend'{phone_id = APhoneId, friend_id = CPhoneId, status = request}), @@ -76,7 +75,7 @@ muc_msgs() -> [#'Message'{id = BFid, type = [read]}, #'Room'{}] = roster_client:send_receive(DClientId, last_res), %% Edit with msg_id - #'Message'{files = F} = roster_client:send_receive(BClientId, Counter, #'Message'{id=BFid, msg_id = <>, feed_id=#muc{name = Room}, + #'Message'{files = _F} = roster_client:send_receive(BClientId, Counter, #'Message'{id=BFid, msg_id = <>, feed_id=#muc{name = Room}, from=BPhoneId, files = [#'Desc'{id= <<"7">>, payload = <<"Edited by B!">>}], status = edit}), #'Ack'{} = roster_client:send_receive(BClientId, #'Message'{id=BFid, msg_id = <>, feed_id=#muc{name = Room}, diff --git a/apps/roster/src/test/room_test.erl b/apps/roster/src/test/room_test.erl index 2f8f7315e9f47b9a9676ed33bdcbd38f92f615a8..1b85a50f9f5cb40f2e7169929134f8cd5af38128 100644 --- a/apps/roster/src/test/room_test.erl +++ b/apps/roster/src/test/room_test.erl @@ -7,7 +7,8 @@ check_alias_increment/0, add_many_members/0, link/0, - test_joinlink/0 + test_joinlink/0, + suite/0 ]). -define(BLANK_LINK, <<"UNDEFINED">>). diff --git a/apps/roster/src/test/roster_test.erl b/apps/roster/src/test/roster_test.erl index c307d4e3244a8791495bd0a8d38401e26fcbd9d7..a4f366b3c0f02194ac86327444d8c04e67d8e9b2 100644 --- a/apps/roster/src/test/roster_test.erl +++ b/apps/roster/src/test/roster_test.erl @@ -6,6 +6,36 @@ -include("roster.hrl"). -include("micro.hrl"). -include("roster_test.hrl"). +-dialyzer({nowarn_function, + [ + test_roster/0, + test_update_contacts/0, + misc_test_roster/1, + test_reg/0, + test_reg/1, + test_reg_jwt/0, + test_friend_multi/0, + test_muc/0, + test_muc_msgs/0, + test_descs/0, + test_multi_muc/0, + test_room/0, + clear_room_msg_test/0, + myself_chat_test/0, + delete_p2p_history_test/0, + patch_nick_test/0, + transcribe_test/0, + p2p_reader_test/0, + clear_test_only_admin/0, + reply_history_test/0, + history_update_test/0, + muc_remove_test/0, + test_call_room/0, + pagination_test/0, + event_securty_test/0, + test_search/0 + ] +}). -define(MAX_ATTEMPTS, 3). @@ -441,8 +471,8 @@ test_roster() -> roster_client:stop_client([BClientId, AClientId]), ok. -test_huge_messages2(M, N) -> - spawn(fun() -> [roster_client:test_huge_messages(N) || _ <- lists:seq(1, M)] end). +% test_huge_messages2(M, N) -> + % spawn(fun() -> [roster_client:test_huge_messages(N) || _ <- lists:seq(1, M)] end). test_huge_messages(N) -> Phones = [PhoneA, PhoneB] = [integer_to_binary(rand:uniform(99999999)) || _ <- [1, 2]], Counter = length(Phones), @@ -462,12 +492,12 @@ test_huge_messages(N) -> roster_client:receive_drop(), Created = roster:now_msec(), FeedId = roster:feed_key(p2p, From, To), - Msg = kvs:add(#'Message'{feed_id = FeedId, created = Created, status = []}), + {ok, Msg} = kvs:add(#'Message'{feed_id = FeedId, created = Created, status = []}), [begin - kvs:add(Msg#'Message'{id = kvs:next_id('Message', 1), + kvs:add(Msg#'Message'{id = kvs:next_id('Message', 1), from = From, to = To, files = [#'Desc'{id = <<"7">>, payload = <<"TestA!">>}], status = []}), timer:sleep(1), - kvs:add(Msg#'Message'{id = kvs:next_id('Message', 1), + kvs:add(Msg#'Message'{id = kvs:next_id('Message', 1), from = To, to = From, files = [#'Desc'{id = <<"7">>, payload = <<"TestB!">>}], status = []}) end || _ <- lists:seq(1, N)], roster_client:stop_client(AClientId), roster_client:stop_client(BClientId). @@ -647,7 +677,7 @@ test_update_contacts() -> PhoneA = <<"357">>, AClientId = roster_client:gen_name(PhoneA), Phones = [<<"53533">>, <<"53774">>], - length(Phones), + % length(Phones), [roster:purge_user(Phone) || Phone <- [PhoneA | Phones]], PCs = [{B, BClientId, _}, {C, CClientId, TC}, {From, AClientId, TA}] = [begin {ClientId, Token} = roster_client:reg_fake_user(Phone), @@ -1571,9 +1601,15 @@ suite() -> % test_messages() ]. -check() -> case lists:all(fun(X) -> X == ok end, suite()) of - true -> roster:info("ALL TESTS PASSED", []), true; - false -> roster:info("TEST ERRORS", []), false end. +check() -> roster:check(?MODULE). + +test_modules()-> [roster_test, micto_test]. +test_all()-> + + + + Result = lists:flatten([erlang:apply(roster,check, [TestModule]) || TestModule <- test_modules()]), + lists:all(fun(X) -> X == ok end, Result). limit('Message', _) -> 2000000. forbid('Message') -> 20. @@ -1604,7 +1640,7 @@ test_migrate() -> Res -> roster:info(?MODULE, "~p = migresia:check(roster)", [Res]), {error, test_migration} end catch Err:Rea -> - n2o:error(?MODULE, "Catch:~p~n", [n2o:stack_trace(Err, Rea)]), + roster:error(?MODULE, "Catch:~p~n", [{Err, Rea}]), throw({error, migrate}) after catch kvs:delete('schema_migrations', 30171023145947), file:delete(TestFile2) end. diff --git a/apps/service/rebar.config b/apps/service/rebar.config index 3af62d09d982540eee7491d120627685fa701a14..acd1ea7e930daab1b12a39c240ecfe80a53160fb 100644 --- a/apps/service/rebar.config +++ b/apps/service/rebar.config @@ -1 +1 @@ -{deps,[{bert, ".*", {git, "git://github.com/synrc/bert",[]}}]}. \ No newline at end of file +{deps,[]}. \ No newline at end of file diff --git a/priv/protobuf/service_auth/Auth.proto b/priv/protobuf/service_auth/Auth.proto deleted file mode 100644 index f5c0b18ecc1ce9a535bbccc356df41f8165da1e0..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/Auth.proto +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Auth.grpc"; -option java_outer_classname = "AuthCls"; -import public "authOs.proto"; -import public "Feature.proto"; -import public "authType.proto"; -import public "Service.proto"; - -message Auth { - string client_id = 1; - string dev_key = 2; - string user_id = 3; - string token = 4; - string data = 5; - authType type = 6; - int64 attempts = 7; - repeated Feature settings = 8; - repeated Service services = 9; - string push = 10; - authOs os = 11; - int64 created = 12; - int64 last_online = 13; -} diff --git a/priv/protobuf/service_auth/Desc.proto b/priv/protobuf/service_auth/Desc.proto deleted file mode 100644 index a1bdff122639882de16d2365361829b1f23827dc..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/Desc.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Desc.grpc"; -option java_outer_classname = "DescCls"; -import public "Feature.proto"; - -message Desc { - string id = 1; - string mime = 2; - string payload = 3; - string parentid = 4; - repeated Feature data = 5; -} diff --git a/priv/protobuf/service_auth/Service.proto b/priv/protobuf/service_auth/Service.proto deleted file mode 100644 index 5255c11383fad0751fad42cd288351aea27fd6ba..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/Service.proto +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Service.grpc"; -option java_outer_classname = "ServiceCls"; -import public "Feature.proto"; -import public "serverType.proto"; -import public "serverStatus.proto"; - -message Service { - string id = 1; - string data = 2; - serverType type = 3; - repeated Feature setting = 4; - int64 expiration = 5; - serverStatus service_status = 6; -} diff --git a/priv/protobuf/service_auth/Tag.proto b/priv/protobuf/service_auth/Tag.proto deleted file mode 100644 index fb29d81cb4aea95a05444d71d1cd7e9419de1629..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/Tag.proto +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Tag.grpc"; -option java_outer_classname = "TagCls"; -import public "tagType.proto"; - -message Tag { - int64 roster_id = 1; - string name = 2; - string color = 3; - tagType tag_status = 4; -} diff --git a/priv/protobuf/service_auth/authOs.proto b/priv/protobuf/service_auth/authOs.proto deleted file mode 100644 index 4308091b1208cd3bf560d0cf6e99d940110c4fad..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/authOs.proto +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "authOs.grpc"; -option java_outer_classname = "authOsCls"; - -enum authOs { - ios = 0; - android = 1; - web = 2; -} - diff --git a/priv/protobuf/service_auth/presence.proto b/priv/protobuf/service_auth/presence.proto deleted file mode 100644 index 00f79c3f14b24783674e06115917a035e3410fe9..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/presence.proto +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "presence.grpc"; -option java_outer_classname = "presenceCls"; - -enum presence { - online = 0; - offline = 1; -} - diff --git a/priv/protobuf/service_auth/serverType.proto b/priv/protobuf/service_auth/serverType.proto deleted file mode 100644 index 56279a32238e9ae7b34a68269defae2d99553080..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_auth/serverType.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_auth; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "serverType.grpc"; -option java_outer_classname = "serverTypeCls"; - -enum serverType { - email = 0; - wallet = 1; - google_type = 2; - fb = 3; - phone = 4; -} - diff --git a/priv/protobuf/service_friend/Desc.proto b/priv/protobuf/service_friend/Desc.proto deleted file mode 100644 index cfc8b92b45579fc7ec7572b847c4cc8eb984ef3e..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_friend/Desc.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_friend; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Desc.grpc"; -option java_outer_classname = "DescCls"; -import public "Feature.proto"; - -message Desc { - string id = 1; - string mime = 2; - string payload = 3; - string parentid = 4; - repeated Feature data = 5; -} diff --git a/priv/protobuf/service_friend/Feature.proto b/priv/protobuf/service_friend/Feature.proto deleted file mode 100644 index 21240771b56a93cd866c61e8229d5eaf0c5febc4..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_friend/Feature.proto +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_friend; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Feature.grpc"; -option java_outer_classname = "FeatureCls"; - -message Feature { - string id = 1; - string key = 2; - string value = 3; - string group = 4; -} diff --git a/priv/protobuf/service_message/Feature.proto b/priv/protobuf/service_message/Feature.proto deleted file mode 100644 index c525cc9148869e2e972e7383845d2f915f531222..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_message/Feature.proto +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_message; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Feature.grpc"; -option java_outer_classname = "FeatureCls"; - -message Feature { - string id = 1; - string key = 2; - string value = 3; - string group = 4; -} diff --git a/priv/protobuf/service_message/Service.proto b/priv/protobuf/service_message/Service.proto deleted file mode 100644 index fd98188cc7be5d125995a0b2e392b519a4d3b882..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_message/Service.proto +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_message; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Service.grpc"; -option java_outer_classname = "ServiceCls"; -import public "Feature.proto"; -import public "serverType.proto"; -import public "serverStatus.proto"; - -message Service { - string id = 1; - string data = 2; - serverType type = 3; - repeated Feature setting = 4; - int64 expiration = 5; - serverStatus service_status = 6; -} diff --git a/priv/protobuf/service_message/Tag.proto b/priv/protobuf/service_message/Tag.proto deleted file mode 100644 index 9a1632c0de26e45ecd7114e468b20d90054a0aea..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_message/Tag.proto +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_message; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Tag.grpc"; -option java_outer_classname = "TagCls"; -import public "tagType.proto"; - -message Tag { - int64 roster_id = 1; - string name = 2; - string color = 3; - tagType tag_status = 4; -} diff --git a/priv/protobuf/service_message/p2p.proto b/priv/protobuf/service_message/p2p.proto deleted file mode 100644 index 3290d952615c1f2286bb6053b11172fa81b5943f..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_message/p2p.proto +++ /dev/null @@ -1,15 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_message; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "p2p.grpc"; -option java_outer_classname = "p2pCls"; - -message p2p { - string from = 1; - string to = 2; -} diff --git a/priv/protobuf/service_profile/Desc.proto b/priv/protobuf/service_profile/Desc.proto deleted file mode 100644 index 9a5a2dd166166bd8cc75b78d3b673fc6b454fd92..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_profile/Desc.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_profile; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Desc.grpc"; -option java_outer_classname = "DescCls"; -import public "Feature.proto"; - -message Desc { - string id = 1; - string mime = 2; - string payload = 3; - string parentid = 4; - repeated Feature data = 5; -} diff --git a/priv/protobuf/service_profile/Tag.proto b/priv/protobuf/service_profile/Tag.proto deleted file mode 100644 index db4d5d5b4198c748ca798bac521a4aeb5afe9918..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_profile/Tag.proto +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_profile; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Tag.grpc"; -option java_outer_classname = "TagCls"; -import public "tagType.proto"; - -message Tag { - int64 roster_id = 1; - string name = 2; - string color = 3; - tagType tag_status = 4; -} diff --git a/priv/protobuf/service_roster/Desc.proto b/priv/protobuf/service_roster/Desc.proto deleted file mode 100644 index 99c421db4a2cc404394a5ca6f59c76a9ff1968d8..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_roster/Desc.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_roster; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Desc.grpc"; -option java_outer_classname = "DescCls"; -import public "Feature.proto"; - -message Desc { - string id = 1; - string mime = 2; - string payload = 3; - string parentid = 4; - repeated Feature data = 5; -} diff --git a/priv/protobuf/service_roster/Service.proto b/priv/protobuf/service_roster/Service.proto deleted file mode 100644 index 180788cd3120cf232a2ae3d76bfd8b31d2512d8c..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_roster/Service.proto +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_roster; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "Service.grpc"; -option java_outer_classname = "ServiceCls"; -import public "Feature.proto"; -import public "serverType.proto"; -import public "serverStatus.proto"; - -message Service { - string id = 1; - string data = 2; - serverType type = 3; - repeated Feature setting = 4; - int64 expiration = 5; - serverStatus service_status = 6; -} diff --git a/priv/protobuf/service_roster/serverType.proto b/priv/protobuf/service_roster/serverType.proto deleted file mode 100644 index 7ca622a890869f2b71d6dafec6d7f9cdac7bfc7d..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_roster/serverType.proto +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_roster; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "serverType.grpc"; -option java_outer_classname = "serverTypeCls"; - -enum serverType { - email = 0; - wallet = 1; - google_type = 2; - fb = 3; - phone = 4; -} - diff --git a/priv/protobuf/service_roster/tagType.proto b/priv/protobuf/service_roster/tagType.proto deleted file mode 100644 index 73981ba16a735570949d6021bd25098ad4fcc555..0000000000000000000000000000000000000000 --- a/priv/protobuf/service_roster/tagType.proto +++ /dev/null @@ -1,17 +0,0 @@ -// Generated by https://github.com/synrc/bert -// DO NOT EDIT - -syntax = "proto3"; -package service_roster; - -option java_generic_services = true; -option java_multiple_files = true; -option java_package = "tagType.grpc"; -option java_outer_classname = "tagTypeCls"; - -enum tagType { - tag_create = 0; - tag_remove = 1; - tag_edit = 2; -} - diff --git a/rebar.config b/rebar.config index 98ab06150acf5de8477aa38ad4580340e0430c81..f69b98a202d4257346ad5070933d6b0f5c9896a6 100644 --- a/rebar.config +++ b/rebar.config @@ -2,39 +2,39 @@ {lib_dirs,["apps","deps"]}. {deps_dir,"deps"}. {deps, [ - {bert, ".*", {git, "git://github.com/synrc/bert",{tag,"2.4"}}}, - {active, ".*", {git, "git://github.com/synrc/active",{tag,"master"}}}, + {active, ".*", {git, "https://github.com/synrc/active",{branch,"master"}}}, {esockd, ".*", {git, "https://github.com/voxoz/esockd",{ref, "a80634b961c315ffe5f020d73236473b53ae5dc9"}}}, - {bpe, ".*", {git, "git://github.com/synrc/bpe", {tag,"4.4"}}}, - {emqttd, ".*", {git, "git://github.com/synrc/emqttd",{tag,"master"}}}, - {n2o, ".*", {git, "git://github.com/synrc/n2o", {tag,"6.4"}}}, - {emqttc, ".*", {git, "git://github.com/voxoz/emqttc",{tag,"master"}}}, - {rest, ".*", {git, "git://github.com/synrc/rest",{tag,"5.10"}}}, - {gen_smtp, ".*", {git, "git://github.com/voxoz/gen_smtp",{tag,"master"}}}, - {emq_dashboard, ".*", {git, "https://github.com/synrc/emq_dashboard",{tag,"master"}}}, + {bpe, ".*", {git, "https://github.com/synrc/bpe", {tag,"v4.4"}}}, + {emqttd, ".*", {git, "https://github.com/synrc/emqttd",{branch,"master"}}}, + {emqttc, ".*", {git, "https://github.com/voxoz/emqttc",{branch,"master"}}}, + {rest, ".*", {git, "https://github.com/synrc/rest",{tag,"5.10"}}}, + {gen_smtp, ".*", {git, "https://github.com/voxoz/gen_smtp",{branch,"master"}}}, + {emq_dashboard, ".*", {git, "https://github.com/synrc/emq_dashboard",{branch,"master"}}}, {'opencensus-erlang', ".*", {git, "https://github.com/voxoz/opencensus-erlang",{tag, "v0.4.0"}}}, - {libphonenumber_erlang, ".*", {git, "https://github.com/marinakr/libphonenumber_erlang.git",{tag,"master"}}}, - {gproc, ".*", {git, "https://github.com/uwiger/gproc","0.6.1"}}, - {erlydtl, ".*", {git, "git://github.com/voxoz/erlydtl",{tag,"master"}}}, - {mini_s3, ".*", {git, "https://github.com/chef/mini_s3.git",{tag,"master"}}}, + {libphonenumber_erlang, ".*", {git, "https://github.com/marinakr/libphonenumber_erlang.git",{branch,"master"}}}, + {gproc, ".*", {git, "https://github.com/uwiger/gproc", {tag,"0.6.1"}}}, + {erlydtl, ".*", {git, "https://github.com/voxoz/erlydtl",{branch,"master"}}}, + {mini_s3, ".*", {git, "https://github.com/chef/mini_s3.git",{branch,"master"}}}, {jwt, ".*", {git, "https://github.com/artemeff/jwt.git",{tag, "0.1.8"}}}, - {jsx, ".*", {git, "https://github.com/talentdeficit/jsx.git","v2.9.0"}}, - {base64url, ".*", {git, "https://github.com/dvv/base64url.git","v1.0"}}, - {migresia, ".*", {git, "https://github.com/yoonka/migresia.git",{tag,"master"}}}, + {jsx, ".*", {git, "https://github.com/talentdeficit/jsx.git", {tag,"v2.9.0"}}}, + {base64url, ".*", {git, "https://github.com/dvv/base64url.git", {tag,"v1.0"}}}, + {migresia, ".*", {git, "https://github.com/yoonka/migresia.git",{branch,"master"}}}, {counters, ".*", {git, "https://github.com/deadtrickster/counters.erl.git", {tag, "v0.2.0"}}}, - {ctx, ".*", {git, "https://github.com/tsloughter/ctx.git", []}}, - {wts, ".*", {git, "https://github.com/tsloughter/wts.git", []}}, + {ctx, ".*", {git, "https://github.com/tsloughter/ctx.git", {branch,"master"}}}, + {wts, ".*", {git, "https://github.com/tsloughter/wts.git", {branch,"master"}}}, {rfc3339, ".*", {git, "https://github.com/talentdeficit/rfc3339",{tag,"0.2.2"}}}, - {locus, ".*", {git, "https://github.com/g-andrade/locus.git",{tag,"master"}}}, - {prometheus, ".*", {git, "https://github.com/deadtrickster/prometheus.erl",{tag,"master"}}}, - {cowboy, ".*", {git, "git://github.com/voxoz/cowboy", {tag,"master"}}}, - {'jose-erlang', ".*", {git, "https://github.com/manifest/jose-erlang.git", {tag,"master"}}}, + {locus, ".*", {git, "https://github.com/g-andrade/locus.git",{branch,"master"}}}, {json_rec, ".*", {git, "https://github.com/justinkirby/json_rec.git", {tag,"master"}}}, - {'erlang-uuid', ".*", {git, "https://github.com/avtobiff/erlang-uuid.git",{tag,"master"}}}, + {prometheus, ".*", {git, "https://github.com/deadtrickster/prometheus.erl",{branch,"master"}}}, + {cowboy, ".*", {git, "https://github.com/voxoz/cowboy", {branch,"master"}}}, + % ===> Dependency failure: source for jose-erlang does not contain a recognizable project and can not be built + {'jose-erlang', ".*", {git, "https://github.com/manifest/jose-erlang.git", {branch,"master"}}}, + {'erlang-uuid', ".*", {git, "https://github.com/avtobiff/erlang-uuid.git",{branch,"master"}}}, {enenra, ".*", {git, "https://github.com/nlfiedler/enenra", {tag, "0.3.0"}}}, {'qdate', ".*", {git, "https://github.com/enterprizing/qdate.git",{ref,"fba988fc54214bb37a3ce11d5c5a3cc68752c3ce"}}} ]}. -{erl_opts, [{parse_transform,lager_transform},{parse_transform, oc_transform},debug_info]}. + +{erl_opts, [{parse_transform,lager_transform},{parse_transform, oc_transform},debug_info,nowarn_deprecated_function,nowarn_export_all]}. {relx, [{release, {server, "1.0.0"}, [roster, service]}, {sys_config, "./sys.config"}, @@ -49,3 +49,6 @@ {include_erts, true}]} ]} ]}. +{dialyzer, [ + {warnings, [underspecs, no_return]} +]}. \ No newline at end of file diff --git a/rebar.config.script b/rebar.config.script new file mode 100644 index 0000000000000000000000000000000000000000..bd3898f787dc7cae6c0d5b69d6d55d2d2da93321 --- /dev/null +++ b/rebar.config.script @@ -0,0 +1,10 @@ +OSENV = os:getenv("REBAR_DEPS"). +SetAppEnv = fun(App,Config)-> [ application:set_env(App,Key,Value) || {Key,Value} <- proplists:get_value(App,Config)] end. +{ok,[SysConf]}=file:consult('sys.config'). +SetAppEnv(bert,SysConf). +%% io:format("Disallowed: ~p~n",[application:get_env(bert,disallowed,[])]). +case OSENV of + false -> CONFIG; % env var not defined + [] -> CONFIG; % env var set to empty string + Dir ->lists:keystore(deps_dir, 1, CONFIG, {deps_dir, Dir}) +end. diff --git a/rebar.lock b/rebar.lock deleted file mode 100644 index f641a2fbb6bca33e10d4417842103b9f24c3d93d..0000000000000000000000000000000000000000 --- a/rebar.lock +++ /dev/null @@ -1,164 +0,0 @@ -{"1.1.0", -[{<<"base64url">>, - {git,"https://github.com/dvv/base64url.git", - {ref,"f2c64ed8b9bebc536fad37ad97243452b674b837"}}, - 0}, - {<<"bert">>, - {git,"git://github.com/synrc/bert", - {ref,"6cde41b32448e85ecd48225221d6f978943a1bad"}}, - 0}, - {<<"bpe">>, - {git,"git://github.com/synrc/bpe", - {ref,"356c9e621c38e927a8611ecac592bcdc8d689026"}}, - 0}, - {<<"certifi">>,{pkg,<<"certifi">>,<<"2.4.2">>},1}, - {<<"counters">>, - {git,"https://github.com/deadtrickster/counters.erl.git", - {ref,"c3f4aa3acdf71c3db0a4b3fc1343aa45de2c5df0"}}, - 0}, - {<<"cowboy">>, - {git,"git://github.com/voxoz/cowboy", - {ref,"c1cfbfa5dc6b5f6ecd9591ad5bf642b6a107a7f5"}}, - 0}, - {<<"cowlib">>, - {git,"git://github.com/voxoz/cowlib", - {ref,"5cc0038d0a3ae6a829646ddfff998d8c491969ca"}}, - 1}, - {<<"ctx">>, - {git,"https://github.com/tsloughter/ctx.git", - {ref,"a5a6b0948708e02bc7b9cb6248807c9ff8327940"}}, - 0}, - {<<"emq_dashboard">>, - {git,"https://github.com/synrc/emq_dashboard", - {ref,"f711e8d2b0a992f5540123f3504eebabc324a684"}}, - 0}, - {<<"emqttc">>, - {git,"git://github.com/voxoz/emqttc", - {ref,"141fd2e925be854321d22005313762adb1195f48"}}, - 0}, - {<<"emqttd">>, - {git,"git://github.com/synrc/emqttd", - {ref,"c3d0b7b092fffe7bebe27af27dbbfe1714757d1c"}}, - 0}, - {<<"envy">>, - {git,"https://github.com/markan/envy.git", - {ref,"0148fb4b7ed0e188511578e98b42d6e7dde0ebd1"}}, - 1}, - {<<"erlang-uuid">>, - {git,"https://github.com/avtobiff/erlang-uuid.git", - {ref,"cb02a2039a9b29dd2eef0446039c9c6e164df9ef"}}, - 0}, - {<<"erlydtl">>, - {git,"git://github.com/voxoz/erlydtl", - {ref,"bdebe6f87d8f989018facbbf8dc6320936ffe98f"}}, - 0}, - {<<"esockd">>, - {git,"https://github.com/voxoz/esockd", - {ref,"a80634b961c315ffe5f020d73236473b53ae5dc9"}}, - 0}, - {<<"forms">>, - {git,"git://github.com/synrc/forms", - {ref,"845feb45a46dfc2e0e9a156da9c01c218d8fd6cc"}}, - 1}, - {<<"gen_logger">>, - {git,"git://github.com/voxoz/gen_logger", - {ref,"5b14530363feb0b049c4f5c7c606f815aec781d2"}}, - 1}, - {<<"gen_smtp">>, - {git,"git://github.com/voxoz/gen_smtp", - {ref,"89eb26f8a81b0dce76aedae5695a923c8ac98695"}}, - 0}, - {<<"goldrush">>, - {git,"git://github.com/voxoz/goldrush.git", - {ref,"9e92405985827fabd2508b92bdc8b28b9e17b668"}}, - 2}, - {<<"gproc">>, - {git,"https://github.com/uwiger/gproc", - {ref,"1d16f5e6d7cf616eec4395f2385e3a680a4ffc9f"}}, - 0}, - {<<"ibrowse">>, - {git,"git://github.com/cmullaparthi/ibrowse.git", - {ref,"c97136cfb61fcc6f39d4e7da47372a64f7fca04e"}}, - 1}, - {<<"jsx">>, - {git,"https://github.com/talentdeficit/jsx.git", - {ref,"fc2a001073f2300ba38427c23e83d5673c020542"}}, - 0}, - {<<"jwt">>, - {git,"https://github.com/artemeff/jwt.git", - {ref,"6fd754fec1cd2e4577a5d7121233371900aa44e7"}}, - 0}, - {<<"kvs">>, - {git,"git://github.com/synrc/kvs", - {ref,"c0f9bd4766c2751e8f7b1752f8eb949d17f01b87"}}, - 1}, - {<<"lager">>, - {git,"git://github.com/voxoz/lager", - {ref,"1ecf4c17e9e39dd7a1943140477f632d17518f0c"}}, - 1}, - {<<"libphonenumber_erlang">>, - {git,"https://github.com/marinakr/libphonenumber_erlang.git", - {ref,"3a6be75ef4f6fdd40fa8afee2a7fc5cf2ddb8601"}}, - 0}, - {<<"locus">>, - {git,"https://github.com/g-andrade/locus.git", - {ref,"0ea9079ce5686573e0e70e2b1311343dd25feef8"}}, - 0}, - {<<"migresia">>, - {git,"https://github.com/yoonka/migresia.git", - {ref,"40e11825e01502d045e87bf8b5d7dc5a9d6e3f73"}}, - 0}, - {<<"mini_s3">>, - {git,"https://github.com/chef/mini_s3.git", - {ref,"df0c68ea901343b8e0c647142d88d7f3aae27e7b"}}, - 0}, - {<<"mochiweb">>, - {git,"git://github.com/voxoz/mochiweb", - {ref,"c53540557dba6d79c347209fc9980e97dcf3dd3f"}}, - 1}, - {<<"n2o">>, - {git,"git://github.com/synrc/n2o", - {ref,"f59f997d1432515403f505b382ce6717454abaa3"}}, - 0}, - {<<"nitro">>, - {git,"git://github.com/synrc/nitro", - {ref,"1aeb421c332f94b135563f8e855b139c1b067f59"}}, - 1}, - {<<"opencensus-erlang">>, - {git,"https://github.com/voxoz/opencensus-erlang", - {ref,"8dc9ae86f5c1ef69593fe37b49e649afed6bd201"}}, - 0}, - {<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.0">>},2}, - {<<"prometheus">>, - {git,"https://github.com/deadtrickster/prometheus.erl", - {ref,"46ea4b487baf4f6cc44495eae07582808e0369d4"}}, - 0}, - {<<"ranch">>, - {git,"git://github.com/voxoz/ranch", - {ref,"1a75038c82ede22efec46a7dca192b8ce26309e0"}}, - 1}, - {<<"rest">>, - {git,"git://github.com/synrc/rest", - {ref,"9a4e21d50a96b06649944c9a88ad595114db6c31"}}, - 0}, - {<<"rfc3339">>, - {git,"https://github.com/talentdeficit/rfc3339", - {ref,"90effc078c5e673d025b2c1269a153ad4748d3df"}}, - 0}, - {<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.4">>},1}, - {<<"stacktrace_compat">>,{pkg,<<"stacktrace_compat">>,<<"1.0.2">>},1}, - {<<"syn">>, - {git,"git://github.com/ostinelli/syn", - {ref,"9964eb8969b6e1e712249d3aed4f3dfafd3aaac3"}}, - 1}, - {<<"wts">>, - {git,"https://github.com/tsloughter/wts.git", - {ref,"5613b6c4354867fd2b02fde5ef15bf80190b8586"}}, - 0}]}. -[ -{pkg_hash,[ - {<<"certifi">>, <<"75424FF0F3BAACCFD34B1214184B6EF616D89E420B258BB0A5EA7D7BC628F7F0">>}, - {<<"parse_trans">>, <<"09765507A3C7590A784615CFD421D101AEC25098D50B89D7AA1D66646BC571C1">>}, - {<<"ssl_verify_fun">>, <<"F0EAFFF810D2041E93F915EF59899C923F4568F4585904D010387ED74988E77B">>}, - {<<"stacktrace_compat">>, <<"8AD31C32C9A0EADB1EB298F04DC8B0C8D79BCC6233A638B02791FFCA4F331275">>}]} -]. diff --git a/sys.config b/sys.config index 06133854fd8fa5ef960ded9f8ebd0b874375446b..2951883be0d167759c40e1602a45a67ec03ffa9a 100644 --- a/sys.config +++ b/sys.config @@ -3,8 +3,7 @@ {bert,[{js,"apps/roster/priv/macbert/"}, {erl,"apps/roster/src"}, {google,"apps/service/priv/"}, - {disallowed,['feed', 'Whitelist', 'FakeNumbers','Schedule','Index','process']}, - {allowed_hrl, ["roster"]}, + {disallowed,['feed', 'Whitelist', 'FakeNumbers','Schedule','Index','process','cx']}, %% TODO remove the 'cx' record / bring imprevement for bert_validator {custom_validate, {roster, validate}}, {swift,"apps/roster/priv/macbert/"}]}, {roster,[ @@ -66,13 +65,15 @@ {n2o, [{port,8000}, {upload,"./storage"}, {app,review}, - {tables,[ cookies, file, caching, ring, async, nick, names, surnames, system]}, + {tables,[ cookies, file, caching, ring, mqtt, ws, async, nick, names, surnames, system]}, {pickler,nitro_pickle}, {formatter,n2o_bert}, + {mqtt_server,true}, {auth_ttl, 86400}, %% 24 h {protocols,[n2o_nitro,n2o_ftp,roster_proto]}, {log_modules,[roster, n2o_vnode]}, {log_level,roster}, + {mqtt_server,true}, {vnode, {roster, get_vnode}}, {validate, {roster, validate}} ]},