Beispiel #1
0
 private void WriteHeader(AMFHeader header, ObjectEncoding objectEncoding)
 {
     base.Reset();
     base.WriteUTF(header.Name);
     base.WriteBoolean(header.MustUnderstand);
     base.WriteInt32(-1);
     base.WriteData(objectEncoding, header.Content);
 }
Beispiel #2
0
 /// <summary>
 /// Removes the named header from teh AMF packet.
 /// </summary>
 /// <param name="header">The name of the header.</param>
 public void RemoveHeader(string header)
 {
     for (int i = 0; _headers != null && i < _headers.Count; i++)
     {
         AMFHeader amfHeader = _headers[i] as AMFHeader;
         if (amfHeader.Name == header)
         {
             _headers.RemoveAt(i);
         }
     }
 }
Beispiel #3
0
 /// <summary>
 /// Gets the value of a single AMF header object by name.
 /// </summary>
 /// <param name="header">The name of the header.</param>
 /// <returns>The header referenced by name.</returns>
 public AMFHeader GetHeader(string header)
 {
     for (int i = 0; _headers != null && i < _headers.Count; i++)
     {
         AMFHeader amfHeader = _headers[i] as AMFHeader;
         if (amfHeader.Name == header)
         {
             return(amfHeader);
         }
     }
     return(null);
 }
		public override void Invoke(AMFContext context) {
			MessageBroker messageBroker = _endpoint.GetMessageBroker();
			try {
				AMFHeader amfHeader = context.AMFMessage.GetHeader(AMFHeader.CredentialsHeader);
				if (amfHeader != null && amfHeader.Content != null) {
					string userId = ((ASObject)amfHeader.Content)["userid"] as string;
					string password = ((ASObject)amfHeader.Content)["password"] as string;
					//Clear credentials header, further requests will not send the credentials
					ASObject asoObject = new ASObject();
					asoObject["name"] = AMFHeader.CredentialsHeader;
					asoObject["mustUnderstand"] = false;
					asoObject["data"] = null;//clear
					AMFHeader header = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObject);
					context.MessageOutput.AddHeader(header);
					IPrincipal principal = _endpoint.GetMessageBroker().LoginManager.Login(userId, amfHeader.Content as IDictionary);
					string key = EncryptCredentials(_endpoint, principal, userId, password);
					ASObject asoObjectCredentialsId = new ASObject();
					asoObjectCredentialsId["name"] = AMFHeader.CredentialsIdHeader;
					asoObjectCredentialsId["mustUnderstand"] = false;
					asoObjectCredentialsId["data"] = key;//set
					AMFHeader headerCredentialsId = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObjectCredentialsId);
					context.MessageOutput.AddHeader(headerCredentialsId);
				} else {
					amfHeader = context.AMFMessage.GetHeader(AMFHeader.CredentialsIdHeader);
					if (amfHeader != null) {
						string key = amfHeader.Content as string;
						if (key != null)
							_endpoint.GetMessageBroker().LoginManager.RestorePrincipal(key);
					} else {
						_endpoint.GetMessageBroker().LoginManager.RestorePrincipal();
					}
				}
			} catch (UnauthorizedAccessException exception) {
				for (int i = 0; i < context.AMFMessage.BodyCount; i++) {
					AMFBody amfBody = context.AMFMessage.GetBodyAt(i);
					ErrorResponseBody errorResponseBody = new ErrorResponseBody(amfBody, exception);
					context.MessageOutput.AddBody(errorResponseBody);
				}
			} catch (Exception exception) {
				if (log != null && log.IsErrorEnabled)
					log.Error(exception.Message, exception);
				for (int i = 0; i < context.AMFMessage.BodyCount; i++) {
					AMFBody amfBody = context.AMFMessage.GetBodyAt(i);
					ErrorResponseBody errorResponseBody = new ErrorResponseBody(amfBody, exception);
					context.MessageOutput.AddBody(errorResponseBody);
				}
			}
		}
Beispiel #5
0
		public override void Invoke(AMFContext context) {
			MessageOutput messageOutput = context.MessageOutput;
			for (int i = 0; i < context.AMFMessage.BodyCount; i++) {
				AMFBody amfBody = context.AMFMessage.GetBodyAt(i);
				//Check for Flex2 messages
				if (amfBody.IsEmptyTarget) {
					object content = amfBody.Content;
					if (content is IList)
						content = (content as IList)[0];
					IMessage message = content as IMessage;
					if (message != null) {
						Client client = null;
						HttpSession session = null;
						if (FluorineContext.Current.Client == null) {
							IClientRegistry clientRegistry = _endpoint.GetMessageBroker().ClientRegistry;
							string clientId = message.GetFlexClientId();
							if (!clientRegistry.HasClient(clientId)) {
								lock (clientRegistry.SyncRoot) {
									if (!clientRegistry.HasClient(clientId)) {
										client = _endpoint.GetMessageBroker().ClientRegistry.GetClient(clientId) as Client;
									}
								}
							}
							if (client == null)
								client = _endpoint.GetMessageBroker().ClientRegistry.GetClient(clientId) as Client;
							FluorineContext.Current.SetClient(client);
						}
						session = _endpoint.GetMessageBroker().SessionManager.GetHttpSession(HttpContext.Current);
						FluorineContext.Current.SetSession(session);
						//Context initialized, notify listeners.
						if (session != null && session.IsNew)
							session.NotifyCreated();
						if (client != null) {
							if (session != null)
								client.RegisterSession(session);
							if (client.IsNew) {
								client.Renew(_endpoint.ClientLeaseTime);
								client.NotifyCreated();
							}
						}
						/*
						RemotingConnection remotingConnection = null;
						foreach (IConnection connection in client.Connections)
						{
							if (connection is RemotingConnection)
							{
								remotingConnection = connection as RemotingConnection;
								break;
							}
						}
						if (remotingConnection == null)
						{
							remotingConnection = new RemotingConnection(_endpoint, null, client.Id, null);
							remotingConnection.Initialize(client, session);
						}
						FluorineContext.Current.SetConnection(remotingConnection);
						*/
					}
				} else {
					//Flash remoting
					AMFHeader amfHeader = context.AMFMessage.GetHeader(AMFHeader.AMFDSIdHeader);
					string amfDSId = null;
					if (amfHeader == null) {
						amfDSId = Guid.NewGuid().ToString("D");
						ASObject asoObjectDSId = new ASObject();
						asoObjectDSId["name"] = AMFHeader.AMFDSIdHeader;
						asoObjectDSId["mustUnderstand"] = false;
						asoObjectDSId["data"] = amfDSId;//set
						AMFHeader headerDSId = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObjectDSId);
						context.MessageOutput.AddHeader(headerDSId);
					} else
						amfDSId = amfHeader.Content as string;

					Client client = null;
					HttpSession session = null;
					if (FluorineContext.Current.Client == null) {
						IClientRegistry clientRegistry = _endpoint.GetMessageBroker().ClientRegistry;
						string clientId = amfDSId;
						if (!clientRegistry.HasClient(clientId)) {
							lock (clientRegistry.SyncRoot) {
								if (!clientRegistry.HasClient(clientId)) {
									client = _endpoint.GetMessageBroker().ClientRegistry.GetClient(clientId) as Client;
								}
							}
						}
						if (client == null)
							client = _endpoint.GetMessageBroker().ClientRegistry.GetClient(clientId) as Client;
					}
					FluorineContext.Current.SetClient(client);
					session = _endpoint.GetMessageBroker().SessionManager.GetHttpSession(HttpContext.Current);
					FluorineContext.Current.SetSession(session);
					//Context initialized, notify listeners.
					if (session != null && session.IsNew)
						session.NotifyCreated();
					if (client != null) {
						if (session != null)
							client.RegisterSession(session);
						if (client.IsNew) {
							client.Renew(_endpoint.ClientLeaseTime);
							client.NotifyCreated();
						}
					}
				}
			}
		}
Beispiel #6
0
 /// <summary>
 /// Adds a header to the AMF packet.
 /// </summary>
 /// <param name="header">The header object to add.</param>
 public void AddHeader(AMFHeader header)
 {
     this._headers.Add(header);
 }
Beispiel #7
0
		public bool Logout() {
			bool result = false;
			if (_loginCommand != null) {
				result = _loginCommand.Logout(this.Principal);
				if (this.IsPerClientAuthentication) {
					if (FluorineContext.Current.Client != null)
						FluorineContext.Current.Client.Principal = null;
				} else {
					if (FluorineContext.Current.Session != null)
						FluorineContext.Current.Session.Invalidate();
				}
			} else {
				if (FluorineContext.Current.Session != null)
					FluorineContext.Current.Session.Invalidate();

				if (log.IsErrorEnabled)
					log.Error(__Res.GetString(__Res.Security_LoginMissing));
				//GodLesZ.Library.Amf.Messaging.SecurityException se = new GodLesZ.Library.Amf.Messaging.SecurityException(NoLoginCommand, GodLesZ.Library.Amf.Messaging.SecurityException.ServerAuthorizationCode);
				//throw se;
				throw new UnauthorizedAccessException(__Res.GetString(__Res.Security_LoginMissing));
			}
			if (HttpContext.Current != null) {
				/*
				HttpCookie authCookie = HttpContext.Current.Request.Cookies.Get(FormsAuthCookieName);
				if (authCookie != null)
				{
					FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
					if (ticket != null && ticket.UserData != null && ticket.UserData.StartsWith(FluorineContext.FluorineTicket))
					{
						HttpRuntime.Cache.Remove(ticket.UserData);
					}
				}
				*/
				FormsAuthentication.SignOut();

			}
			if (AMFContext.Current != null) {
				AMFContext amfContext = AMFContext.Current;
				AMFHeader amfHeader = amfContext.AMFMessage.GetHeader(AMFHeader.CredentialsIdHeader);
				if (amfHeader != null) {
					amfContext.AMFMessage.RemoveHeader(AMFHeader.CredentialsIdHeader);
					ASObject asoObjectCredentialsId = new ASObject();
					asoObjectCredentialsId["name"] = AMFHeader.CredentialsIdHeader;
					asoObjectCredentialsId["mustUnderstand"] = false;
					asoObjectCredentialsId["data"] = null;//clear
					AMFHeader headerCredentialsId = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObjectCredentialsId);
					amfContext.MessageOutput.AddHeader(headerCredentialsId);
				}
			}
			return result;
		}