// // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.IdentityModel.Configuration; using System.Configuration; using Trade.ActiveStsImplementation; using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Protocols.WSTrust; using System.Net; using System.ServiceModel; using Trade.Utility; using System.IdentityModel.Selectors; namespace Trade.ActiveStsConsole { class ActiveSTS_ConsoleHost { /// /// The program entry class. Note how this simply inherits from the provided base class. /// public class ActiveSTSConsoleHost : IDisposable { private ServiceHost serviceHost; /// /// This is the key call where you will define parameters for the Master host startup, and call /// the base 'startService' method. /// public void start() { string issuerName = ConfigurationManager.AppSettings["IssuerName"]; //string passiveIssuerName = ConfigurationManager.AppSettings["PassiveIssuerName"]; SecurityTokenServiceConfiguration config = new SecurityTokenServiceConfiguration(issuerName); config.SecurityTokenHandlers.AddOrReplace(new CustomUsernameTokenHandler()); config.SecurityTokenService = typeof(CustomSecurityTokenService); SecurityTokenHandlerCollection actAsHandlerCollection = config.SecurityTokenHandlerCollectionManager[SecurityTokenHandlerCollectionManager.Usage.ActAs]; actAsHandlerCollection.Configuration.AudienceRestriction.AudienceMode = AudienceUriMode.Never; actAsHandlerCollection.Configuration.IssuerNameRegistry = new SimpleIssuerNameRegistry(); string shortHostName = System.Net.Dns.GetHostName(); IPHostEntry myEntry = System.Net.Dns.GetHostEntry(shortHostName); string myName = myEntry.HostName; serviceHost = new WSTrustServiceHost(config, new Uri("http://" + myName + ":9001/tradeactivests")); //Describe for Console output StockTraderUtility.DescribeService(serviceHost); serviceHost.Open(); } public void Dispose() { if (serviceHost != null) { serviceHost.Close(); } } } [STAThread] static void Main(string[] args) { Console.Clear(); Console.SetWindowSize(Console.LargestWindowWidth - 30, Console.LargestWindowHeight - 30); Console.Title = ".NET StockTrader Active STS Host"; bool restart = true; while (restart) { using (var serviceHost = new ActiveSTSConsoleHost()) { try { serviceHost.start(); Console.WriteLine(" {0} is started\n", Console.Title); } catch (Exception ex) { StockTraderUtility.Logger.WriteException(ex); } Console.WriteLine("Press Enter to quit or Ctrl+R to restart"); restart = WaitForRestart(); } } } private static bool WaitForRestart() { while (true) { // clear users input Console.CursorLeft = 0; Console.Write(' '); Console.CursorLeft = 0; // read users input var key = Console.ReadKey(); if ((key.Modifiers & ConsoleModifiers.Control) != 0 && key.Key == ConsoleKey.R) { return true; } if (key.Key == ConsoleKey.Enter || key.Key == ConsoleKey.Escape) { return false; } } } } }