public bool Equals(ZeroToken other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            bool audEqual = Audiences.Count == other.Audiences.Count &&
                            Audiences.All(other.Audiences.Contains);
            bool claimsEqual = Claims.Count == other.Claims.Count &&
                               Claims.All(other.Claims.Contains);
            bool result = audEqual &&
                          string.Equals(Issuer, other.Issuer) &&
                          CreationTime.Equals(other.CreationTime) &&
                          Lifetime == other.Lifetime &&
                          string.Equals(Type, other.Type) &&
                          string.Equals(ClientId, other.ClientId) &&
                          AccessTokenType == other.AccessTokenType &&
                          claimsEqual &&
                          Version == other.Version;

            return(result);
        }
        private string ProduceToken(long?pkSystemUser, string client_id, ApiContext context)
        {
            var apiSession = Aparte.WebApi.BeginApiSession.Execute(context, pkSystemUser);

            Aparte.WebApi.GetTenant.Execute(context, apiSession);
            context = null;

            var token = new JWEAsymmetric();

            try
            {
                token.AsymmetricKey = Audiences.Item(client_id).PublicKey;
                token.SetExpiry(apiSession.TokenExpiry);
                token.AddClaim(JWTConstant.PK_SYSTEM_USER, apiSession.PKSystemUser.ToString());
                token.AddClaim(JWTConstant.USER_NAME, apiSession.UserName);
                token.AddClaim(JWTConstant.USER_CODE, apiSession.UserCode);
                token.AddClaim(JWTConstant.ACCESS_TOKEN, apiSession.AccessToken.ToString());
                token.AddClaim(JWTConstant.REFRESH_TOKEN, apiSession.RefreshToken.ToString());
            }
            catch (Exception ex)
            {
            }

            var encryptedToken = token.SerializeToBase64UrlString();

            UserList.Add(apiSession.PKSystemUser, apiSession.UserName, apiSession.UserCode, apiSession.AccessToken, apiSession.RefreshToken, apiSession.TokenExpiry);
            return(encryptedToken);
        }
Example #3
0
        /// <summary>
        /// Initialize entities for scenario
        /// </summary>
        public override void InitializeEntities()
        {
            //Aggiungo l'amministrator
            Users.Add(new User
            {
                Id             = Guid.NewGuid().ToString("D"),
                UserName       = "******",
                Email          = "*****@*****.**",
                IsEnabled      = true,
                IsLocked       = false,
                PersonName     = "Digital",
                PersonSurname  = "ZenProgramming",
                PasswordHash   = ShaProcessor.Sha256Encrypt("password"),
                LastAccessDate = DateTime.UtcNow.AddDays(-1),
                PhotoBinary    = new byte[] {}
            });

            //Creo l'audience corrente (Nativa)
            Audiences.Add(new Audience
            {
                Id                      = Guid.NewGuid().ToString("D"),
                Name                    = "Heimdallr Api",
                ClientId                = "heimdallr.api",
                ClientSecret            = "IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw",
                HasAdministrativeAccess = true,
                IsEnabled               = true,
                IsNative                = true,
                AllowedOrigin           = "*",
                RefreshTokenLifeTime    = 30
            });
        }
Example #4
0
        public bool TriedWholeDomain(ValuePickingHeuristic heuristic, FilteringHeuristic filtering) //TO DO: reduce code
        {
            if (filtering != FilteringHeuristic.NONE)
            {
                if (PossibleValues.Count == 0)
                {
                    FillPossibleValues();
                    return(true);
                }

                return(false);
            }

            switch (heuristic)
            {
            case ValuePickingHeuristic.LCV:
                if (PossibleValues.Count == 0)
                {
                    FillPossibleValues();
                    return(true);
                }

                return(false);

            default:
                var lastDayTime = Value.DayValue == Days.Last() && Value.TimeValue == Times.Last();
                return(lastDayTime && Value.AudienceValue == Audiences.Last() &&
                       Value.TeacherValue == Teachers.Last());
            }
        }
Example #5
0
 StepByStepPicking(
     FilteringHeuristic filtering)     //choosing next value (tries all possible variations of parametrs, if doesnt fit - backtracking will solve the issue)
 {
     if (filtering == FilteringHeuristic.NONE)
     {
         if (Value.TeacherValue != Teachers.Last())
         {
             Value.TeacherValue = Teachers.ElementAt(Teachers.IndexOf(Value.TeacherValue) + 1);
         }
         else if (Value.AudienceValue != Audiences.Last())
         {
             Value.TeacherValue  = Teachers.First(); // resetting previous data element
             Value.AudienceValue = Audiences.ElementAt(Audiences.IndexOf(Value.AudienceValue) + 1);
         }
         else if (Value.TimeValue != Times.Last())
         {
             Value.AudienceValue = Audiences.First(); // resetting previous data element
             Value.TimeValue     = Times.ElementAt(Times.IndexOf(Value.TimeValue) + 1);
         }
         else if (Value.DayValue != Days.Last())
         {
             Value.TimeValue = Times.First(); // resetting previous data element
             Value.DayValue  = Days.ElementAt(Days.IndexOf(Value.DayValue) + 1);
         }
     }
     else
     {
         Value = new Value(PossibleValues.First());
         PossibleValues.RemoveAt(0);
     }
 }
Example #6
0
 public void SendAlert()
 {
     if (IsValid())
     {
         var props = Writer.EnsureProperties(properties);
         props.Add(XFConstants.EventWriter.EventType, EventTypeOption.Alert);
         props.Add(XFConstants.Alert.Title, Title);
         props.Add(XFConstants.Alert.Message, Message);
         props.Add(XFConstants.Alert.Categories, Categories.ToString());
         props.Add(XFConstants.Alert.Urgency, Urgency.ToString());
         props.Add(XFConstants.Alert.Importance, Importance.ToString());
         props.Add(XFConstants.Alert.Targets, Audiences.ToString());
         props.Add(XFConstants.Alert.Source, Source);
         props.Add(XFConstants.Alert.CreatedAt, DateTime.Now.ToString(XFConstants.DateTimeFormat));
         if (!String.IsNullOrEmpty(Error))
         {
             props.Add(XFConstants.Alert.Error, Error);
         }
         if (!String.IsNullOrWhiteSpace(Stacktrace))
         {
             props.Add(XFConstants.Alert.StackTrace, Stacktrace);
         }
         if (!String.IsNullOrWhiteSpace(NamedRecipient))
         {
             props.Add(XFConstants.Alert.NamedTarget, NamedRecipient);
         }
         if (!String.IsNullOrWhiteSpace(Topic))
         {
             props.Add(XFConstants.Alert.Topic, Topic);
         }
         List <TypedItem> list = Writer.Convert(props);
         EventWriter.Write(EventTypeOption.Alert, list);
     }
 }
Example #7
0
        /// <summary>
        /// Initialize entities for scenario
        /// </summary>
        public override void InitializeEntities()
        {
            //Inizializzazione base
            base.InitializeEntities();

            //Aggiungo l'amministrator
            Users.Add(new User
            {
                Id             = Guid.NewGuid().ToString("D"),
                UserName       = "******",
                Email          = "*****@*****.**",
                IsEnabled      = true,
                IsLocked       = false,
                PersonName     = "Mario",
                PersonSurname  = "Rossi",
                PasswordHash   = ShaProcessor.Sha256Encrypt("password"),
                LastAccessDate = DateTime.UtcNow.AddDays(-1),
                PhotoBinary    = new byte[] { }
            });

            //Creo l'audience corrente (Nativa)
            Audiences.Add(new Audience
            {
                Id                      = Guid.NewGuid().ToString("D"),
                Name                    = "Sample Resource",
                ClientId                = "sample.resource",
                ClientSecret            = "_IqrVEUhwO19o9nQ-9DtOfzYAL5THZrGcWgCO1-Xa0k",
                HasAdministrativeAccess = false,
                IsEnabled               = true,
                IsNative                = true,
                AllowedOrigin           = "*",
                RefreshTokenLifeTime    = 30
            });
        }
        private void RemoveRoomData_ButtonClick(object sender, RoutedEventArgs e)
        {
            try
            {
                if (SelectedRoom != null)
                {
                    var messageBoxResult = MessageBox.Show("Вы действительно удалить данную аудиторию?", "Подтверждение действия",
                                                           MessageBoxButton.YesNo, MessageBoxImage.Question);

                    if (messageBoxResult == MessageBoxResult.Yes)
                    {
                        Connection.Database.audiences.Remove(SelectedRoom);
                        Audiences.Remove(SelectedRoom);

                        Connection.Database.SaveChanges();
                    }
                }
                else
                {
                    MessageBox.Show("Аудитория не выбрана.", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "Ошибка сохранения", MessageBoxButton.OK, MessageBoxImage.Warning);
                Connection.Database.audiences.Remove(SelectedRoom);
            }
        }
        public AddLecturesViewModel()
        {
            foreach (var uniqueGroup in _lecturesStorageModel.UniqueGroups)
            {
                Audiences.Add(uniqueGroup);
            }

            foreach (var uniqueTeacher in _lecturesStorageModel.UniqueTeachers)
            {
                Lecturers.Add(uniqueTeacher);
            }

            foreach (var combinedLecture in _lecturesStorageModel.CombinedLectures)
            {
                Lectures.Add(combinedLecture);
            }
            _lectures = new List <Lecture>(_lecturesStorageModel.Lectures);

            if (_lecturesStorageModel.CombinedLectures != null && _lecturesStorageModel.CombinedLectures.Count > 0)
            {
                FillCombinedLectures();
            }

            UpdateLists();
            UpdateLectures();
        }
Example #10
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Id.Length != 0)
            {
                hash ^= Id.GetHashCode();
            }
            if (Issuer.Length != 0)
            {
                hash ^= Issuer.GetHashCode();
            }
            if (JwksUri.Length != 0)
            {
                hash ^= JwksUri.GetHashCode();
            }
            if (Audiences.Length != 0)
            {
                hash ^= Audiences.GetHashCode();
            }
            if (AuthorizationUrl.Length != 0)
            {
                hash ^= AuthorizationUrl.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Example #11
0
 public void InitValue()
 {
     Value.DayValue      = Days.First();
     Value.TimeValue     = Times.First();
     Value.AudienceValue = Audiences.First();
     Value.TeacherValue  = Teachers.First();
     Value.Empty         = false;
 }
Example #12
0
        public IHttpActionResult VerifyClient([FromBody] Aparte.Credentials.ApplicationCredential application)
        {
            var token = new JWEAsymmetric();

            token.AddClaim(JWTConstant.CLAIM_SYMMETRIC_KEY, Audiences.Item(KeyFile.JEDIX_WIN_CLIENT_NAME).SecretSymmetricKey);
            token.AsymmetricKey = Audiences.Item(KeyFile.JEDIX_WIN_CLIENT_NAME).PublicKey;
            return(Ok <string>(token.SerializeToBase64UrlString()));
        }
Example #13
0
        /// <summary>
        /// Resets this instance.
        /// </summary>
        private void Reset()
        {
            IsAddReportOpen = Visibility.Collapsed;
            Title           = string.Empty;

            Audiences.Single(a => a.Value == (int)Audience.Professionals).IsSelected = true;
            Audiences.Where(a => a.Value != (int)Audience.Professionals).ForEach(a => a.IsSelected = false);
        }
Example #14
0
 private void CutOffStaticLimitations(string subject, LessonType type)
 {
     if (type == LessonType.Lecture)
     {
         Audiences = Audiences.Where(x => _lectureAudiences.Contains(x)).ToList();
         Teachers  = new List <string> {
             _subjectLecturer[subject]
         };
     }
 }
Example #15
0
 public App()
 {
     Web                    = new AppWeb();
     SignInAudience         = new Audiences();
     RequiredResourceAccess = new List <RequiredResourceAccess>();
     PasswordCredentials    = new List <PasswordCredential>();
     KeyCredentials         = new List <KeyCredential>();
     IdentifierUris         = new List <string>();
     PublicClient           = new PublicClient();
 }
Example #16
0
        public override ICommandResponse Handle(StopJamCommand command)
        {
            var bout  = _boutDataService.Load(command.BoutId);
            var state = _boutRunnerService.GetBoutState(command.BoutId);

            //State must be in jam
            if (state.Phase != BoutPhase.Jam)
            {
                throw new InvalidBoutPhaseException(state.Phase);
            }

            //Check to see if bout is over
            if (state.GameClock.Elapsed.Seconds < bout.RuleSet.PeriodDurationSeconds)
            {
                //Still good
                state.LineupStart = DateTime.Now;
                state.Phase       = BoutPhase.Lineup;
                state.CreateNextJam();

                //keep the jam clock going in case of undo
            }
            else
            {
                //Intermission
                if (state.Period < bout.RuleSet.NumberOfPeriods)
                {
                    state.JamNumber = 1;
                    state.Period++;
                    state.GameClock.Clear();
                    state.Phase = BoutPhase.Halftime;
                }
                else
                //Game Over
                {
                    state.Phase = BoutPhase.UnofficialFinal;
                }
            }


            state.JamStart = DateTime.Now;
            state.GameClock.Start();

            var response = new UpdateBoutStateResponse(state);

            state.PenaltyBox.ForEach(x =>
            {
                x.StopWatch.Stop();
                response.AddEvent(new ChairUpdatedEvent(state.BoutId, x), Audiences.Bout(state.BoutId));
            });

            return(response);
        }
        private void AudienceTextBox_DropDownOpened(object sender, EventArgs e)
        {
            var ownerEditorWindowInstance = (this.Owner as LessonsWindow).Owner as EditorWindow;
            var data = ownerEditorWindowInstance.HomePage.AudiencesWindowInstance?.AudiencesList.Items;

            if (data != null)
            {
                foreach (var item in data)
                {
                    Audiences.Add(item as SchoolAudience);
                }
            }
        }
        public override ICommandResponse Handle(CreatePenaltyCommand command)
        {
            var state = _boutRunner.GetBoutState(command.BoutId);
            var data  = _boutData.Load(command.BoutId);

            var penalty = new Penalty(command.Team, command.Period, command.Jam, state.GameClock.Elapsed, data.RuleSet.PenaltyDurationSeconds);

            state.Penalties.Add(penalty);

            var response = new CommandResponse();

            response.AddEvent(new PenaltyUpdatedEvent(command.BoutId, penalty), Audiences.Bout(command.BoutId));
            return(response);
        }
        public override ICommandResponse Handle(ButtHitSeatCommand command)
        {
            var response = new CommandResponse();
            var state    = _boutRunner.GetBoutState(command.BoutId);

            if (state.PenaltyBox.Any(x => x.Id == command.Chair.Id))
            {
                throw new ButtAlreadyInChairException(command.Chair.Id);
            }

            if (state.Phase == Entities.BoutPhase.Jam)
            {
                command.Chair.StopWatch.Start();
            }

            if (command.Chair.IsJammer)
            {
                var jammer = state.GetCurrentJammer(command.Chair.Team);
                if (jammer.HasValue)
                {
                    command.Chair.Number = jammer.Value;

                    command.Chair.SecondsOwed = state.Penalties.Any(x => x.Number == command.Chair.Number)
                        ? state.Penalties.Where(x => x.Number == command.Chair.Number).Sum(x => x.SecondsOwed)
                        : command.Chair.SecondsOwed;
                }

                var otherTeam        = command.Chair.Team == "left" ? "right" : "left";
                var otherJammerInBox = state.PenaltyBox.SingleOrDefault(x => x.Team == otherTeam && x.IsJammer);
                if (otherJammerInBox != null)
                {
                    var timeRemaining = Math.Max(otherJammerInBox.SecondsOwed - (int)Math.Round(otherJammerInBox.StopWatch.Elapsed.TotalSeconds), 0);
                    if (timeRemaining < command.Chair.SecondsOwed)
                    {
                        otherJammerInBox.SecondsOwed -= timeRemaining;
                        command.Chair.SecondsOwed    -= timeRemaining;
                    }
                    else
                    {
                        otherJammerInBox.SecondsOwed -= command.Chair.SecondsOwed;
                        command.Chair.SecondsOwed     = 0;
                    }
                    response.AddEvent(new ChairUpdatedEvent(command.BoutId, otherJammerInBox), Audiences.Bout(command.BoutId));
                }
            }

            state.PenaltyBox.Add(command.Chair);
            response.AddEvent(new ChairUpdatedEvent(command.BoutId, command.Chair), Audiences.Bout(command.BoutId));
            return(response);
        }
Example #20
0
        void FillCombos(bool refresh = false)
        {
            if (!refresh)
            {
                Audiences = WebsiteDataService.Audiences.Select(o => new SelectListItem {
                    Value = ((Audience)o.Value).ToString(), Text = o.Name, Model = o
                }).ToObservableCollection();
                Audiences.RemoveAt(0);
                Audiences.Insert(0, new SelectListItem {
                    Value = Audience.None.ToString(), Text = DEFAULT_AUDIENCE_SELECT_TEXT, Model = null
                });

                Years = BaseDataService.ReportingYears.Select(o => new SelectListItem {
                    Value = o, Text = o, Model = o
                }).ToObservableCollection();
                Years.RemoveAt(0);
                Years.Insert(0, new SelectListItem {
                    Value = string.Empty, Text = DEFAULT_YEAR_SELECT_TEXT, Model = null
                });

                Quarters = BaseDataService.ReportingQuarters.Select(o => new SelectListItem {
                    Value = o.Id, Text = o.Text, Model = o
                }).ToObservableCollection();
                Quarters.RemoveAt(0);
                Quarters.Insert(0, new SelectListItem {
                    Value = -1, Text = DEFAULT_QUARTER_SELECT_TEXT, Model = null
                });

                RegionContextItems = new ObservableCollection <SelectListItem>();
                // RegionContextItems.Insert( 0, new SelectListItem { Text= "Please Select Region", Value = null, Model = null } );
                RegionContextItems.Add(new SelectListItem {
                    Text = Inflector.Titleize(typeof(HospitalServiceArea).Name), Value = typeof(HospitalServiceArea).Name, Model = null
                });
                RegionContextItems.Add(new SelectListItem {
                    Text = Inflector.Titleize(typeof(HealthReferralRegion).Name), Value = typeof(HealthReferralRegion).Name, Model = null
                });
                RegionContextItems.Add(new SelectListItem {
                    Text = Inflector.Titleize(typeof(CustomRegion).Name), Value = typeof(CustomRegion).Name, Model = null
                });
            }

            StateContextItems = new ObservableCollection <SelectListItem>();
            // StateContextItems.Insert(0, new SelectListItem { Text = "Please Select State(s)", Value = null, Model = null });

            StateContextItems = WebsiteDataService.GetStates().ToObservableCollection();
            // else
            //    StateContextItems =
            //        WebsiteDataService.GetApplicableReportingStates(
            //            ManageViewModel.WebsiteViewModel.Website.StateContext.ToArray()).ToObservableCollection();
        }
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (Audiences != null ? Audiences.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Issuer != null ? Issuer.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ CreationTime.GetHashCode();
         hashCode = (hashCode * 397) ^ Lifetime;
         hashCode = (hashCode * 397) ^ (Type != null ? Type.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ClientId != null ? ClientId.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (int)AccessTokenType;
         hashCode = (hashCode * 397) ^ (Claims != null ? Claims.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ Version;
         return(hashCode);
     }
 }
Example #22
0
        public void AssignFrom(ReportManifest manifest)
        {
            //Filters = new List<Filter>();
            Columns            = Columns ?? new List <ReportColumn>();
            WebsitePages       = WebsitePages ?? new List <ReportWebsitePage>();
            ComparisonKeyIcons = ComparisonKeyIcons ?? new List <ComparisonKeyIconSet>();
            _rptfilters        = _rptfilters ?? new List <RptFilter>();
            Audiences          = Audiences ?? new List <Audience>();

            Columns.Clear();
            WebsitePages.Clear();
            ComparisonKeyIcons.Clear();
            _rptfilters.Clear();
            Audiences.Clear();

            ComparisonKeyIcons.AddRange(manifest.ToComparisonKeyIconSet(manifest.IconSets, this).ToList());
            Audiences.AddRange(manifest.Audiences.Select(a => a.AudienceType).ToList());
            Category   = manifest.Category;
            IsTrending = manifest.IsTrending;
            Datasets   = manifest.Datasets.Select(d => d.Name).ToList();
            manifest.Columns.ForEach(col => new ReportColumn(this, col.Name)
            {
                IsMeasure = col.IsMeasure, MeasureCode = col.MeasureCode, IsIncluded = true
            });
            manifest.WebsitePages.ForEach(wp => new ReportWebsitePage(this, wp));

            Name                      = manifest.Name;
            ReportAttributes          = manifest.ReportAttributes;
            SourceTemplate            = manifest;
            Description               = !string.IsNullOrWhiteSpace(manifest.Description) ? manifest.Description.TrimStart().TrimEnd() : null;
            Filter                    = CandidateFilters.ToReportFilter();
            RequiresCmsProviderId     = manifest.RequiresCmsProviderId;
            RequiresCostToChargeRatio = manifest.RequiresCostToChargeRatio;
            ReportType                = manifest.Name;
            ShowInterpretationText    = manifest.ShowInterpretationText;
            InterpretationText        = !string.IsNullOrWhiteSpace(manifest.InterpretationText) ? manifest.InterpretationText.TrimStart().TrimEnd() : null;
            Footnote                  = !string.IsNullOrWhiteSpace(manifest.Footer) ? manifest.Footer.TrimStart().TrimEnd() : null;
            ReportOutputSql           = !string.IsNullOrWhiteSpace(manifest.ReportOutputSql) ? manifest.ReportOutputSql.TrimStart().TrimEnd() : null;
            OutputFileName            = !string.IsNullOrWhiteSpace(manifest.OutputFileName) ? manifest.OutputFileName.TrimStart().TrimEnd() : null;
            OutputJsNamespace         = !string.IsNullOrWhiteSpace(manifest.OutputJsNamespace) ? manifest.OutputJsNamespace.TrimStart().TrimEnd() : null;

            _rptfilters.AddRange(RptFilter.FromFilterList(manifest.Filters, this).ToList());

            LastReportManifestUpdate = manifest.FileLastModifiedDate;
        }
Example #23
0
        public IHttpActionResult RefreshToken([FromBody] Aparte.Credentials.UserToken userToken)
        {
            var accessToken  = AsymmetricEncryption.Decrypt(userToken.AccessToken, AuthenticationServer.PRIVATE_KEY);
            var refreshToken = AsymmetricEncryption.Decrypt(userToken.RefreshToken, AuthenticationServer.PRIVATE_KEY);

            var context    = new ApiContext();
            var apiSession = Aparte.WebApi.RefreshApiSession.Execute(context, userToken.PKSystemUser, accessToken, refreshToken);
            var token      = new JWEAsymmetric();

            token.AsymmetricKey = Audiences.Item(KeyFile.JEDIX_WIN_CLIENT_NAME).PublicKey;
            token.SetExpiry(apiSession.TokenExpiry);
            token.AddClaim(JWTConstant.PK_SYSTEM_USER, apiSession.PKSystemUser.ToString());
            token.AddClaim(JWTConstant.ACCESS_TOKEN, apiSession.AccessToken.ToString());
            var encryptedToken = token.SerializeToBase64UrlString();

            UserList.Add(apiSession.PKSystemUser, apiSession.UserName, apiSession.UserCode, apiSession.AccessToken, apiSession.RefreshToken, apiSession.TokenExpiry);
            return(Ok <string>(encryptedToken));
        }
        public override ICommandResponse Handle(UpdatePenaltyCommand command)
        {
            var state  = _boutRunner.GetBoutState(command.BoutId);
            var target = state.Penalties.SingleOrDefault(x => x.Id == command.Penalty.Id);

            if (target == null)
            {
                throw new NoSuchPenaltyException(command.Penalty.Id);
            }
            var source = command.Penalty;

            target.Team = source.Team;
            if (target.Number != source.Number)
            {
                // If the penalty is moving off of a skater in the box, remove time
                // If it's moving to a skater in the box, add time
                var skaterInBox = state.PenaltyBox.SingleOrDefault(x => x.Number == target.Number);
                if (skaterInBox != null)
                {
                    skaterInBox.SecondsOwed -= 30;
                }

                target.Number = source.Number;

                skaterInBox = state.PenaltyBox.SingleOrDefault(x => x.Number == target.Number);
                if (skaterInBox != null)
                {
                    skaterInBox.SecondsOwed += 30;
                }
            }

            target.SecondsOwed = source.SecondsOwed;
            target.PenaltyCode = source.PenaltyCode;
            target.Period      = source.Period;
            target.JamNumber   = source.JamNumber;
            target.GameClock   = source.GameClock;

            var response = new CommandResponse();

            response.AddEvent(new PenaltyUpdatedEvent(command.BoutId, target), Audiences.Bout(command.BoutId));
            return(response);
        }
Example #25
0
        public Audiences AddAudience(string name)
        {
            var audienceId = Guid.NewGuid();

            var key = new byte[32];

            RandomNumberGenerator.Create().GetBytes(key);

            var base64Secret = Convert.ToBase64String(key);

            Audiences a = new Audiences
            {
                Id           = audienceId,
                Name         = name,
                Base64Secret = base64Secret
            };

            db.Audiences.Add(a);
            db.SaveChanges();

            return(a);
        }
        public IActionResult Authenticate(string name, string password)
        {
            // 此处需补充用户校验与用户具体信息获取

            var user            = new UserProviderDto(name, password);
            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(Const.SecurityKey);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Audience           = Audiences.UpdateAudience(user.Name),
                Subject            = user.GetClaimsIdentity(),
                Expires            = DateTime.UtcNow.AddDays(0.5),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token       = tokenHandler.CreateToken(tokenDescriptor);
            var tokenString = tokenHandler.WriteToken(token);

            return(Ok(new
            {
                access_token = tokenString
            }));
        }
Example #27
0
        public IHttpActionResult RequestToken()
        {
            var     content      = Request.Content.ReadAsStringAsync().Result;
            dynamic json         = JsonConvert.DeserializeObject(content);
            long    pkSystemUser = json.PKSystemUser.Value;
            string  clientId     = json.ClientId.Value;
            string  publicKey    = json.PublicKey;

            if (!Audiences.Exists(clientId))
            {
                var key = Aparte.Security.Cryptography.SymmetricKey.GenerateSymmetricKey();
                try
                {
                    Audiences.Add(clientId, publicKey, key);
                }
                catch (Exception ex)
                {
                }
            }
            var encryptedToken = ProduceToken(pkSystemUser, clientId, new ApiContext());

            return(Ok <string>(encryptedToken));
        }
        public override ICommandResponse Handle(ReleaseSkaterCommand command)
        {
            var response = new CommandResponse();
            var state    = _boutRunner.GetBoutState(command.BoutId);
            var sit      = state.PenaltyBox.SingleOrDefault(x => x.Id == command.ChairId);

            if (sit == null)
            {
                return(response);
            }

            var timeServed = sit.SecondsOwed;
            var penalties  = state.Penalties.Where(x => x.Team == sit.Team && x.Number == sit.Number).ToList();

            while (timeServed > 0 && penalties.Any())
            {
                var penalty = penalties.First();
                if (timeServed > penalty.SecondsOwed)
                {
                    timeServed         -= penalty.SecondsOwed;
                    penalty.SecondsOwed = 0;
                    penalties.Remove(penalty);
                }
                else
                {
                    penalty.SecondsOwed -= timeServed;
                    timeServed           = 0;
                }

                response.AddEvent(new PenaltyUpdatedEvent(command.BoutId, penalty), Audiences.Bout(command.BoutId));
            }

            state.PenaltyBox.Remove(sit);
            response.AddEvent(new ChairRemovedEvent(command.BoutId, command.ChairId),
                              Audiences.Bout(command.BoutId));
            return(response);
        }
        /// <summary>
        /// Serialize and sign the authentication ticket.
        /// </summary>
        /// <returns>The serialized and signed ticket.</returns>
        public Task <string> SerializeTicketAsync()
        {
            if (SecurityTokenHandler == null)
            {
                return(Task.FromResult <string>(null));
            }

            // Work around a bug introduced in System.IdentityModel.Tokens for ASP.NET 5.
            // See https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/133
            var identity = (ClaimsIdentity)AuthenticationTicket.Principal.Identity;

            for (var actor = identity.Actor; actor != null; actor = actor.Actor)
            {
                actor.BootstrapContext = new JwtSecurityToken(claims: actor.Claims);
            }

            // When creating an identity token intended for a single audience, it's usually better
            // to format the "aud" claim as a string, but CreateToken doesn't support multiple audiences:
            // to work around this limitation, audience is initialized with a single resource and
            // JwtPayload.Aud is replaced with an array containing the multiple resources if necessary.
            // See http://openid.net/specs/openid-connect-core-1_0.html#IDToken
            var token = SecurityTokenHandler.CreateToken(
                subject: identity, issuer: Issuer,
                audience: Audiences.ElementAtOrDefault(0),
                signatureProvider: SignatureProvider,
                signingCredentials: SigningCredentials,
                notBefore: AuthenticationTicket.Properties.IssuedUtc.Value.UtcDateTime,
                expires: AuthenticationTicket.Properties.ExpiresUtc.Value.UtcDateTime);

            if (Audiences.Count() > 1)
            {
                token.Payload[JwtRegisteredClaimNames.Aud] = Audiences.ToArray();
            }

            return(Task.FromResult(SecurityTokenHandler.WriteToken(token)));
        }
Example #30
0
        public override ICommandResponse Handle(StartJamCommand command)
        {
            var response = new CommandResponse();
            var bout     = _boutDataService.Load(command.BoutId);
            var state    = _boutRunnerService.GetBoutState(command.BoutId);

            //State must be in lineup
            if (state.Phase != BoutPhase.Lineup)
            {
                throw new InvalidBoutPhaseException(state.Phase);
            }

            //There must be time left on the game clock
            var elapsed = state.GameClock.Elapsed.TotalSeconds;

            if (elapsed > bout.RuleSet.PeriodDurationSeconds)
            {
                response.AddEvent(
                    MessageBaseEvent.Error($"Call to start jam came too late.  Elapsed: {state.GameClock.Elapsed.TotalSeconds}"),
                    command.Originator);
                return(response);
            }

            state.Phase    = BoutPhase.Jam;
            state.JamStart = DateTime.Now;
            state.GameClock.Start();

            state.PenaltyBox.ForEach(x =>
            {
                x.StopWatch.Start();
                response.AddEvent(new ChairUpdatedEvent(state.BoutId, x), Audiences.Bout(state.BoutId));
            });

            response.AddEvent(new BoutStateUpdatedEvent(state), Audiences.Bout(state.BoutId));
            return(response);
        }
Example #31
0
 public Audiences GetAudiences()
 {
     OAuthResponse response = null;
     List<Audience> audiences = new List<Audience>();
     Audiences audiencesResponse = new Audiences();
     try
     {
         response = _manager.GetOAuthResponse("GET", "audience/audiences");
         if (response.ErrorFlag) throw response.Error;
         else
         {
             var repeatFlag = true;
             while (repeatFlag)
             {
                 Audiences s = JsonConvert.DeserializeObject<Audiences>(response.ResponseString);
                 repeatFlag = (s.next != null);
                 audiences.AddRange(s.audiences);
             }
         }
         audiencesResponse.audiences = audiences.ToArray();
     }
     catch (Exception ex)
     {
         audiencesResponse.ErrorFlag = true;
         audiencesResponse.Error = ex;
         if (response != null) audiencesResponse.ErrorMessage = response.ResponseString;
     }
     return audiencesResponse;
 }