//
// 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;
}
}
}
}
}