コード例 #1
0
		public OAuth2User GetUser(string identifier, string password)
		{
			OAuth2User entity = null;

			using (IEntityContext context = DependencyInjection.Get<IEntityContext>())
			{
				using (IOAuth2UserRepository repository = DependencyInjection.Get<IOAuth2UserRepository>(InjectionParameter.Create("context", context)))
				{
					OAuth2Scope scope = null;
					QueryOver<OAuth2UserScope, OAuth2UserScope> subQuery =
						QueryOver.Of<OAuth2UserScope>()
							.Where(x => x.ValidFrom <= DateTime.UtcNow)
							.And(x => x.ValidUntil > DateTime.UtcNow)

							// Join with OAUTH2SCOPE, search for valid data.
							.JoinAlias(x => x.Scope, () => scope)
							.And(() => scope.ValidFrom <= DateTime.UtcNow)
							.And(() => scope.ValidUntil > DateTime.UtcNow)

							// Just keep the USER.ID to use in the query.
							.Select(t => t.User.ID);

					IQueryOver<OAuth2User, OAuth2User> query =
						repository.Query()
							.Fetch(x => x.UserScopes).Eager
							.Fetch(x => x.UserIdentities).Eager
							.Where(x => x.Identifier == identifier)
							.And(x => x.Password == password)
							.WithSubquery.WhereProperty(x => x.ID).In(subQuery)
							.TransformUsing(Transformers.DistinctRootEntity);

					entity = query.List().SingleOrDefault();
				}

				context.Commit();
			}

			return entity;
		}
コード例 #2
0
		public OAuth2UserIdentity SignUpUser(OAuth2UserIdentity entity)
		{
			using (IEntityContext context = DependencyInjection.Get<IEntityContext>())
			{
				using (IOAuth2UserRepository repository = DependencyInjection.Get<IOAuth2UserRepository>(InjectionParameter.Create("context", context)))
				{
					IList<OAuth2Scope> scopes =
						repository.Context.Query<OAuth2Scope>()
								  .Where(x => x.Code == "application.role.user.default")
						          .List();

					bool isValidIdentifier = this.IsValidEmail(entity.User.Identifier);
					if (isValidIdentifier)
					{
						OAuth2User user = new OAuth2User();
						user.ID = Guid.NewGuid();
						user.Identifier = entity.User.Identifier;
						user.Password = entity.User.Password;
						user.CreationTimestamp = DateTime.UtcNow;
						user.ValidFrom = DateTime.UtcNow;
						user.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc);

						repository.Context.AddOrUpdate(user);

						Identity identity = new Identity();
						identity.ID = Guid.NewGuid();
						identity.FirstName = entity.Identity.FirstName;
						identity.Name = entity.Identity.Name;
						identity.Locale = entity.Identity.Locale;

						repository.Context.AddOrUpdate(identity);

						OAuth2UserScope userScope = new OAuth2UserScope();
						userScope.ID = Guid.NewGuid();
						userScope.Scope = scopes.Single();
						userScope.User = user;
						userScope.CreationTimestamp = DateTime.UtcNow;
						userScope.ValidFrom = DateTime.UtcNow;
						userScope.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc);

						repository.Context.AddOrUpdate(userScope);

						OAuth2UserIdentity userIdentity = new OAuth2UserIdentity();
						userIdentity.ID = Guid.NewGuid();
						userIdentity.User = user;
						userIdentity.Identity = identity;
						userIdentity.CreationTimestamp = DateTime.UtcNow;
						userIdentity.ValidFrom = DateTime.UtcNow;
						userIdentity.ValidUntil = new DateTime(DateTime.Parse("2100-01-01").Ticks, DateTimeKind.Utc);

						repository.Context.AddOrUpdate(userIdentity);
					}
					else
					{
						throw new Exception("Invalid e-mail address.");
					}
				}

				context.Commit();
			}

			Domain.Entity.OAuth2UserIdentity _entity = this.GetUserIdentity(entity.User.Identifier);
			return _entity;
		}