/// <summary> /// Gets current credentials /// </summary> private IDisposable GetCredentials(IRestClient client, out Credentials credentials) { var retVal = AuthenticationContextExtensions.EnterDeviceContext(); credentials = client.Description.Binding.Security.CredentialProvider.GetCredentials(AuthenticationContext.Current.Principal); return(retVal); }
/// <summary> /// Get a service client /// </summary> protected AmiServiceClient GetClient(IPrincipal principal = null) { var retVal = new AmiServiceClient(ApplicationContext.Current.GetRestClient("ami")); if (principal == null) { principal = AuthenticationContext.Current.Principal; } // Don't allow anonymous principals if (!principal.Identity.IsAuthenticated || principal == AuthenticationContext.SystemPrincipal || principal == AuthenticationContext.AnonymousPrincipal) { using (AuthenticationContextExtensions.TryEnterDeviceContext()) { retVal.Client.Credentials = retVal.Client.Description.Binding.Security.CredentialProvider.GetCredentials(AuthenticationContext.Current.Principal); } } else { retVal.Client.Credentials = retVal.Client.Description.Binding.Security.CredentialProvider.GetCredentials(principal); } return(retVal); }
/// <summary> /// Gets current credentials /// </summary> private IDisposable Authenticate(IRestClient client, out Credentials credentials) { var appConfig = ApplicationContext.Current.Configuration.GetSection <SecurityConfigurationSection>(); var retVal = AuthenticationContextExtensions.TryEnterDeviceContext(); credentials = client.Description.Binding.Security.CredentialProvider.GetCredentials(AuthenticationContext.Current.Principal); return(retVal); }
/// <summary> /// Gets current credentials /// </summary> private Credentials GetCredentials(IRestClient client) { try { using (AuthenticationContextExtensions.EnterDeviceContext()) { return(client.Description.Binding.Security.CredentialProvider.GetCredentials(AuthenticationContext.Current.Principal)); } } catch (Exception) { return(null); } }
/// <summary> /// Gets current credentials /// </summary> private Credentials GetCredentials(IRestClient client) { try { using (AuthenticationContextExtensions.EnterDeviceContext()) { return(client.Description.Binding.Security.CredentialProvider.GetCredentials(AuthenticationContext.Current.Principal)); } } catch (Exception e) { this.m_tracer.TraceError("Error authentication for synchronization: {0}", e); throw new SecurityException("Error authenticating for synchronization. Perhaps the device has been reconfigured?", e); } }
/// <summary> /// Serialize the reply /// </summary> public override void SerializeResponse(RestResponseMessage response, object[] parameters, object result) { try { // Outbound control var httpRequest = RestOperationContext.Current.IncomingRequest; string accepts = httpRequest.Headers["Accept"]?.ToLower(), contentType = httpRequest.Headers["Content-Type"]?.ToLower(); // The request was in JSON or the accept is JSON if (result is Stream) // TODO: This is messy, clean it up { contentType = "application/octet-stream"; response.Body = result as Stream; } else if (accepts?.StartsWith("application/json+sdb-viewmodel") == true && typeof(IdentifiedData).IsAssignableFrom(result?.GetType())) { var viewModel = httpRequest.Headers["X-SanteDB-ViewModel"] ?? httpRequest.QueryString["_viewModel"]; // Create the view model serializer using (AuthenticationContextExtensions.TryEnterDeviceContext()) { var viewModelSerializer = new JsonViewModelSerializer(); viewModelSerializer.LoadSerializerAssembly(typeof(ActExtensionViewModelSerializer).Assembly); if (!String.IsNullOrEmpty(viewModel)) { var viewModelDescription = ApplicationContext.Current.GetService <IAppletManagerService>()?.Applets.GetViewModelDescription(viewModel); viewModelSerializer.ViewModel = viewModelDescription; } else { viewModelSerializer.ViewModel = m_defaultViewModel; } using (var tms = new MemoryStream()) using (StreamWriter sw = new StreamWriter(tms, Encoding.UTF8)) using (JsonWriter jsw = new JsonTextWriter(sw)) { viewModelSerializer.Serialize(jsw, result as IdentifiedData); jsw.Flush(); sw.Flush(); response.Body = new MemoryStream(tms.ToArray()); } } contentType = "application/json+sdb-viewModel"; } // The request was in XML and/or the accept is JSON else if ((accepts?.StartsWith("application/xml") == true || contentType?.StartsWith("application/xml") == true) && result?.GetType().GetCustomAttribute <XmlTypeAttribute>() != null) { XmlSerializer xsz = XmlModelSerializerFactory.Current.CreateSerializer(result.GetType()); MemoryStream ms = new MemoryStream(); xsz.Serialize(ms, result); contentType = "application/xml"; ms.Seek(0, SeekOrigin.Begin); response.Body = ms; } else if (result is XmlSchema) { MemoryStream ms = new MemoryStream(); (result as XmlSchema).Write(ms); ms.Seek(0, SeekOrigin.Begin); contentType = "text/xml"; response.Body = ms; } else if (result != null) { // Prepare the serializer JsonSerializer jsz = new JsonSerializer(); jsz.Converters.Add(new StringEnumConverter()); // Write json data using (MemoryStream ms = new MemoryStream()) using (StreamWriter sw = new StreamWriter(ms, Encoding.UTF8)) using (JsonWriter jsw = new JsonTextWriter(sw)) { jsz.DateFormatHandling = DateFormatHandling.IsoDateFormat; jsz.NullValueHandling = NullValueHandling.Ignore; jsz.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; jsz.TypeNameHandling = TypeNameHandling.Auto; jsz.Converters.Add(new StringEnumConverter()); jsz.Serialize(jsw, result); jsw.Flush(); sw.Flush(); response.Body = new MemoryStream(ms.ToArray()); } // Prepare reply for the WCF pipeline contentType = "application/json"; } else if (response.StatusCode == 0) { response.StatusCode = 204; // no content } RestOperationContext.Current.OutgoingResponse.ContentType = RestOperationContext.Current.OutgoingResponse.ContentType ?? contentType; } catch (Exception e) { this.m_traceSource.TraceError("Error Serializing Dispatch Reply: {0}", e.ToString()); new AgsErrorHandlerServiceBehavior().ProvideFault(e, response); } }