PageRenderTime 97ms CodeModel.GetById 31ms RepoModel.GetById 7ms app.codeStats 0ms

/WP7.1/Templates/VB/WPCloud.Mem/WindowsPhoneCloud.Web/Infrastructure/UserTablesServiceContext.vb

#
Visual Basic | 185 lines | 132 code | 38 blank | 15 comment | 0 complexity | 650e7fa80b4ec91c5c9faf9b1f86b4bb MD5 | raw file
  1. ' ----------------------------------------------------------------------------------
  2. ' Microsoft Developer & Platform Evangelism
  3. '
  4. ' Copyright (c) Microsoft Corporation. All rights reserved.
  5. '
  6. ' THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
  7. ' EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
  8. ' OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
  9. ' ----------------------------------------------------------------------------------
  10. ' The example companies, organizations, products, domain names,
  11. ' e-mail addresses, logos, people, places, and events depicted
  12. ' herein are fictitious. No association with any real company,
  13. ' organization, product, domain name, email address, logo, person,
  14. ' places, or events is intended or should be inferred.
  15. ' ----------------------------------------------------------------------------------
  16. Imports System.Net
  17. Imports System.ServiceModel.Web
  18. Imports Microsoft.Samples.WindowsPhoneCloud.Web.Models
  19. Imports Microsoft.WindowsAzure
  20. Imports Microsoft.WindowsAzure.StorageClient
  21. Namespace Infrastructure
  22. #If ACS Then
  23. Public Class UserTablesServiceContext
  24. Inherits TableServiceContext
  25. Implements IPushUserEndpointsRepository, IUserPrivilegesRepository, IUserRepository
  26. Public Const UserTableName As String = "Users"
  27. #Else
  28. Public Class UserTablesServiceContext
  29. Inherits TableServiceContext
  30. Implements IPushUserEndpointsRepository, IUserPrivilegesRepository
  31. #End If
  32. Public Const PushUserTableName As String = "PushUserEndpoints"
  33. Public Const UserPrivilegeTableName As String = "UserPrivileges"
  34. Private Const PublicUserId As String = "00000000-0000-0000-0000-000000000000"
  35. Public Sub New()
  36. Me.New(CloudStorageAccount.FromConfigurationSetting("DataConnectionString"))
  37. End Sub
  38. Public Sub New(ByVal account As CloudStorageAccount)
  39. Me.New(account.TableEndpoint.ToString(), account.Credentials)
  40. End Sub
  41. Public Sub New(ByVal baseAddress As String, ByVal credentials As StorageCredentials)
  42. MyBase.New(baseAddress, credentials)
  43. Me.IgnoreResourceNotFoundException = True
  44. Me.IgnoreMissingProperties = True
  45. End Sub
  46. Public ReadOnly Property PushUserEndpoints() As IQueryable(Of PushUserEndpoint)
  47. Get
  48. Return Me.CreateQuery(Of PushUserEndpoint)(PushUserTableName)
  49. End Get
  50. End Property
  51. Public ReadOnly Property UserPrivileges() As IQueryable(Of UserPrivilege)
  52. Get
  53. Return Me.CreateQuery(Of UserPrivilege)(UserPrivilegeTableName)
  54. End Get
  55. End Property
  56. #If ACS Then
  57. Public ReadOnly Property Users() As IQueryable(Of User)
  58. Get
  59. Return Me.CreateQuery(Of User)(UserTableName)
  60. End Get
  61. End Property
  62. Public Sub CreateUser(ByVal userId As String, ByVal userName As String, ByVal email As String) Implements IUserRepository.CreateUser
  63. If Me.Users.Where(Function(u) u.UserId.Equals(userId, StringComparison.OrdinalIgnoreCase) OrElse u.Email.Equals(email, StringComparison.OrdinalIgnoreCase)).AsEnumerable().FirstOrDefault() IsNot Nothing Then
  64. Throw New WebFaultException(Of String)("A user with the same id or email already exists.", HttpStatusCode.BadRequest)
  65. End If
  66. Me.AddObject(UserTableName, New User With {.UserId = userId, .Name = userName, .Email = email})
  67. Me.SaveChanges()
  68. End Sub
  69. Public Function GetAllUsers() As IEnumerable(Of User) Implements IUserRepository.GetAllUsers
  70. Return Me.Users.ToList()
  71. End Function
  72. <CLSCompliant(False)>
  73. Public Function GetUser(ByVal userId As String) As User Implements IUserRepository.GetUser
  74. Return Me.Users.Where(Function(u) u.UserId.Equals(userId, StringComparison.OrdinalIgnoreCase)).AsEnumerable().FirstOrDefault()
  75. End Function
  76. <CLSCompliant(False)>
  77. Public Function GetUserByEmail(ByVal email As String) As User
  78. Return Me.Users.Where(Function(u) u.Email.Equals(email, StringComparison.OrdinalIgnoreCase)).AsEnumerable().FirstOrDefault()
  79. End Function
  80. Public Function UserExists(ByVal userId As String) As Boolean Implements IUserRepository.UserExists
  81. Return Me.GetUser(userId) IsNot Nothing
  82. End Function
  83. #End If
  84. Public Sub AddPushUserEndpoint(ByVal pushUserEndpoint As PushUserEndpoint) Implements IPushUserEndpointsRepository.AddPushUserEndpoint
  85. Me.AddObject(PushUserTableName, pushUserEndpoint)
  86. Me.SaveChanges()
  87. End Sub
  88. <CLSCompliant(False)> _
  89. Public Sub RemovePushUserEndpoint(ByVal pushUserEndpointData As PushUserEndpoint) Implements IPushUserEndpointsRepository.RemovePushUserEndpoint
  90. Dim pushUserEndpoint = Me.GetPushUserByApplicationAndDevice(pushUserEndpointData.PartitionKey, pushUserEndpointData.RowKey)
  91. Me.DeleteObject(pushUserEndpoint)
  92. Me.SaveChanges()
  93. End Sub
  94. Public Function GetAllPushUsers() As IEnumerable(Of String) Implements IPushUserEndpointsRepository.GetAllPushUsers
  95. Return Me.PushUserEndpoints.ToList().GroupBy(Function(u) u.UserId).Select(Function(g) g.Key)
  96. End Function
  97. Public Function GetPushUsersByName(ByVal userId As String) As IEnumerable(Of PushUserEndpoint) Implements IPushUserEndpointsRepository.GetPushUsersByName
  98. Return Me.PushUserEndpoints.Where(Function(u) u.UserId.Equals(userId, StringComparison.OrdinalIgnoreCase)).AsEnumerable()
  99. End Function
  100. Public Function GetPushUserByApplicationAndDevice(ByVal applicationId As String, ByVal deviceId As String) As PushUserEndpoint Implements IPushUserEndpointsRepository.GetPushUserByApplicationAndDevice
  101. Return (Me.PushUserEndpoints.Where(Function(u) u.PartitionKey.Equals(applicationId, StringComparison.OrdinalIgnoreCase) AndAlso u.RowKey.Equals(deviceId, StringComparison.OrdinalIgnoreCase)).FirstOrDefault())
  102. End Function
  103. <CLSCompliant(False)>
  104. Public Sub UpdatePushUserEndpoint(ByVal pushUserEndpoint As PushUserEndpoint) Implements IPushUserEndpointsRepository.UpdatePushUserEndpoint
  105. Me.UpdateObject(pushUserEndpoint)
  106. Me.SaveChanges()
  107. End Sub
  108. Public Function GetUsersWithPrivilege(ByVal privilege As String) As IEnumerable(Of UserPrivilege) Implements IUserPrivilegesRepository.GetUsersWithPrivilege
  109. Return Me.UserPrivileges.Where(Function(p) p.Privilege.Equals(privilege, StringComparison.OrdinalIgnoreCase)).AsEnumerable()
  110. End Function
  111. Public Sub AddPrivilegeToUser(ByVal userId As String, ByVal privilege As String) Implements IUserPrivilegesRepository.AddPrivilegeToUser
  112. If Not Me.HasUserPrivilege(userId, privilege) Then
  113. Me.AddObject(UserPrivilegeTableName, New UserPrivilege With {.UserId = userId, .Privilege = privilege})
  114. Me.SaveChanges()
  115. End If
  116. End Sub
  117. Public Sub AddPublicPrivilege(ByVal privilege As String) Implements IUserPrivilegesRepository.AddPublicPrivilege
  118. Me.AddPrivilegeToUser(PublicUserId, privilege)
  119. End Sub
  120. Public Sub RemovePrivilegeFromUser(ByVal userId As String, ByVal privilege As String) Implements IUserPrivilegesRepository.RemovePrivilegeFromUser
  121. Dim userPrivilege = Me.GetUserPrivilege(userId, privilege)
  122. If userPrivilege IsNot Nothing Then
  123. Me.DeleteObject(userPrivilege)
  124. Me.SaveChanges()
  125. End If
  126. End Sub
  127. Public Sub DeletePublicPrivilege(ByVal privilege As String) Implements IUserPrivilegesRepository.DeletePublicPrivilege
  128. Me.RemovePrivilegeFromUser(PublicUserId, privilege)
  129. End Sub
  130. Public Function HasUserPrivilege(ByVal userId As String, ByVal privilege As String) As Boolean Implements IUserPrivilegesRepository.HasUserPrivilege
  131. Return Me.GetUserPrivilege(userId, privilege) IsNot Nothing
  132. End Function
  133. Public Function PublicPrivilegeExists(ByVal privilege As String) As Boolean Implements IUserPrivilegesRepository.PublicPrivilegeExists
  134. Return Me.HasUserPrivilege(PublicUserId, privilege)
  135. End Function
  136. Public Sub DeletePrivilege(ByVal privilege As String) Implements IUserPrivilegesRepository.DeletePrivilege
  137. Dim userPrivileges = Me.GetUsersWithPrivilege(privilege)
  138. For Each userPrivilege In userPrivileges
  139. Me.DeleteObject(userPrivilege)
  140. Next userPrivilege
  141. Me.SaveChanges()
  142. End Sub
  143. Private Function GetUserPrivilege(ByVal userId As String, ByVal privilege As String) As UserPrivilege
  144. Return Me.UserPrivileges.Where(Function(p) p.UserId.Equals(userId, StringComparison.OrdinalIgnoreCase) AndAlso p.Privilege.Equals(privilege, StringComparison.OrdinalIgnoreCase)).AsEnumerable().FirstOrDefault()
  145. End Function
  146. End Class
  147. End Namespace