PeerCastStation.FLV.RTMP.RTMPOutputStream.CheckAuthotization C# (CSharp) Method

CheckAuthotization() public method

public CheckAuthotization ( string auth ) : bool
auth string
return bool
    public bool CheckAuthotization(string auth)
    {
      if (!accessControl.AuthorizationRequired || accessControl.AuthenticationKey==null) return true;
      if (auth==null) return false;
      var authorized = false;
      try {
        var authorization = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(auth)).Split(':');
        if (authorization.Length>=2) {
          var user = authorization[0];
          var pass = String.Join(":", authorization.Skip(1).ToArray());
          authorized = accessControl.CheckAuthorization(user, pass);
        }
      }
      catch (FormatException) {
      }
      catch (ArgumentException) {
      }
      return authorized;
    }

Usage Example

Beispiel #1
0
        protected override async Task OnCommandPlay(CommandMessage msg, CancellationToken cancel_token)
        {
            if (msg.Arguments[0].Type == AMFValueType.Boolean && ((bool)msg.Arguments[0].Value) == false)
            {
                await OnCommandPlayStop(msg, cancel_token);

                return;
            }
            var stream_name = StreamName.Parse((string)msg.Arguments[0]);
            var start       = msg.Arguments.Count > 1 ? (int)msg.Arguments[1] : -2;
            var duration    = msg.Arguments.Count > 2 ? (int)msg.Arguments[2] : -1;
            var reset       = msg.Arguments.Count > 3 ? (bool)msg.Arguments[3] : false;

            logger.Debug("Play: {0}, {1}, {2}, {3}", stream_name.ToString(), start, duration, reset);
            if (owner.CheckAuthotization(stream_name.GetParameter("auth")))
            {
                this.Channel = await RequestChannel(stream_name, cancel_token).ConfigureAwait(false);

                this.StreamId = msg.StreamId;
                await SendMessage(2, new UserControlMessage.StreamBeginMessage(this.Now, 0, msg.StreamId), cancel_token).ConfigureAwait(false);

                if (this.Channel != null)
                {
                    if (reset)
                    {
                        await SendOnStatus(
                            this.StreamId,
                            msg.TransactionId + 1,
                            "status",
                            "NetStream.Play.Reset",
                            stream_name.ToString(),
                            cancel_token).ConfigureAwait(false);
                    }
                    await SendOnStatus(
                        this.StreamId,
                        msg.TransactionId + 1,
                        "status",
                        "NetStream.Play.Start",
                        stream_name.ToString(),
                        cancel_token).ConfigureAwait(false);
                }
                else
                {
                    await SendOnStatus(
                        this.StreamId,
                        msg.TransactionId + 1,
                        "error",
                        "NetStream.Play.StreamNotFound",
                        stream_name.ToString(),
                        cancel_token).ConfigureAwait(false);
                }
            }
            else
            {
                await SendOnStatus(
                    this.StreamId,
                    msg.TransactionId + 1,
                    "error",
                    "NetStream.Play.Failed",
                    "auth failed",
                    cancel_token).ConfigureAwait(false);
            }
            if (msg.TransactionId != 0)
            {
                var result = CommandMessage.Create(
                    this.ObjectEncoding,
                    this.Now,
                    msg.StreamId,
                    "_result",
                    msg.TransactionId,
                    null
                    );
                await SendMessage(3, result, cancel_token).ConfigureAwait(false);
            }
            if (this.Channel != null)
            {
                await base.OnCommandPlay(msg, cancel_token).ConfigureAwait(false);

                channelSubscription = this.Channel.AddContentSink(this);
            }
            else
            {
                Close();
            }
        }