Esempio n. 1
0
        public void Print()
        {
            if (RunAsUser)
            {
                MemoryStream stdin  = new MemoryStream();
                MemoryStream stdout = new MemoryStream();
                MemoryStream stderr = new MemoryStream();

                try
                {
                    Serialize(stdin, this);
                    stdin.Flush();
                    stdin.Position = 0;

                    int retcode = WindowsIdentityStore.RunProcessAsUser(UserName, stdin, stdout, stderr, Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Assembly.GetExecutingAssembly().Location, new string[] { "-print" });

                    if (retcode != 0)
                    {
                        stderr.Position = 0;
                        Logger.Log(LogLevel.Info, "Error printing file:\n{0}", System.Text.Encoding.ASCII.GetString(stderr.ToArray()));
                        throw new AggregateException((Exception)Deserialize(stderr));
                    }
                }
                finally
                {
                    stdin.Dispose();
                    stdout.Dispose();
                    stderr.Dispose();
                }
            }
            else
            {
                Run();
            }
        }
Esempio n. 2
0
        public HttpResponseMessage Get()
        {
            bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

            if (isadmin)
            {
                if (!PrintProxy.IsRegistered)
                {
                    return(Page(
                               new XElement("div", GetRegistrationRequestForm())
                               ));
                }
                else
                {
                    return(Page(
                               new XElement("div", "This print proxy is already registered."),
                               new XElement("div", new XElement("a", new XAttribute("href", Url.Route("default", new { controller = "Home" })), "Return to Print Proxy information page"))
                               ));
                }
            }
            else
            {
                return(Forbidden());
            }
        }
Esempio n. 3
0
        public HttpResponseMessage Get(string JobID)
        {
            CloudPrintJob job = PrintProxy.GetCloudPrintJobById(JobID);

            if (job == null)
            {
                return(new HttpResponseMessage(System.Net.HttpStatusCode.NotFound));
            }

            string username = Request.GetSession()["username"];

            bool isadmin = WindowsIdentityStore.IsUserAdmin(username);

            if (isadmin || username == job.Username)
            {
                HttpResponseMessage response = new HttpResponseMessage
                {
                    Content = new StreamContent(new MemoryStream(job.GetPrintData()))
                };
                response.Content.Headers.ContentType.MediaType = "application/pdf";

                return(response);
            }
            else
            {
                return(new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden));
            }
        }
Esempio n. 4
0
        public static bool Authenticate(Session session, string username, SecureString password)
        {
            var identity = WindowsIdentityStore.Login(username, password);

            if (identity != null && identity.IsAuthenticated)
            {
                session["username"] = username;
                return(true);
            }

            return(false);
        }
        public HttpResponseMessage Get()
        {
            bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

            if (isadmin)
            {
                return(GetUserIds());
            }
            else
            {
                return(Forbidden());
            }
        }
Esempio n. 6
0
        private void ProcessPrintJob(CloudPrintJob job)
        {
            if (DateTime.Now > job.CreateTime.AddDays(Config.MaxJobAgeInDays))
            {
                Logger.Log(LogLevel.Info, "Job {0} from {1}@{2} expired (Job created {3}, maxage: {4} days)", job.JobID, job.Username, job.Domain, job.CreateTime, Config.MaxJobAgeInDays);
                job.SetError("Expired", "Job expired in queue");
            }
            else if (!WindowsIdentityStore.IsAcceptedDomain(job.Domain))
            {
                Logger.Log(LogLevel.Info, "Job {0} deferred because {1}@{2} is not in an accepted domain", job.JobID, job.Username, job.Domain);
            }
            else
            {
                using (JobPrinter printer = Activator.CreateInstance(job.Printer.GetJobPrinterType()) as JobPrinter)
                {
                    if (!printer.UserCanPrint(job.Username))
                    {
                        if (printer.NeedUserAuth)
                        {
                            Logger.Log(LogLevel.Debug, "Job {0} deferred because {1} has not logged in", job.JobID, job.Username);

                            if (!job.DeliveryAttempted)
                            {
                                NotifyUserToLogin(job);
                            }
                        }

                        job.SetDeliveryAttempted();
                        UserDeferredJobs.GetOrAdd(job.Username, new ConcurrentQueue <CloudPrintJob>()).Enqueue(job);
                    }
                    else
                    {
                        job.SetStatus(CloudPrintJobStatus.IN_PROGRESS);
                        try
                        {
                            Logger.Log(LogLevel.Info, "Starting job {0}", job.JobID);
                            printer.Print(job);
                            Logger.Log(LogLevel.Info, "Job {0} Finished", job.JobID);
                            job.SetStatus(CloudPrintJobStatus.DONE);
                        }
                        catch (Exception ex)
                        {
                            Logger.Log(LogLevel.Info, "Job {0} in error:\nException:\n{1}\n{2}", job.JobID, ex.Message, ex.ToString());
                            job.SetStatus(CloudPrintJobStatus.QUEUED);
                            //job.SetError(ex.GetType().Name, ex.Message);
                        }
                    }
                }
            }
        }
Esempio n. 7
0
        public HttpResponseMessage Post(FormDataCollection form)
        {
            bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

            if (isadmin && !PrintProxy.IsRegistered)
            {
                switch (form.Get("Action"))
                {
                case "RegisterProxy": return(Register());

                case "GetAuthCode": return(GetAuthCode(form.Get("Email")));
                }
            }

            return(Forbidden());
        }
Esempio n. 8
0
        public HttpResponseMessage Get()
        {
            bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

            if (!PrintProxy.IsRegistered)
            {
                return(Page(
                           new XElement("div", "This cloud print proxy is not yet registered"),
                           isadmin ? new XElement("div", new XElement("a", new XAttribute("href", Url.Route("default", new { controller = "Register" })), "Register the print proxy")) : null
                           ));
            }
            else
            {
                HttpResponseMessage page = Page();
                this.PrintProxy.RestartDeferredJobs(Session["username"]);
                return(page);
            }
        }
        public HttpResponseMessage Post(FormDataCollection form)
        {
            bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

            if (isadmin)
            {
                switch (form.Get("Action"))
                {
                case "Delete": return(Delete(form));

                case "AddUsers": return(AddUsers(form.Get("UserId"), CSVToList(form.Get("Usernames"))));

                case "AddUserId": return(AddUserId(form.Get("UserId"), CSVToList(form.Get("Usernames"))));
                }
            }

            return(Forbidden());
        }
        public HttpResponseMessage Get(string username)
        {
            bool         isauthenticated = WindowsIdentityStore.HasWindowsIdentity(username);
            int          jobswaiting     = PrintProxy.GetCloudPrintJobsForUser(username).Where(j => j.Status == CloudPrintJobStatus.QUEUED).Count();
            StringWriter writer          = new StringWriter();

            JsonHelper.WriteJson(writer, new
            {
                isauthenticated = isauthenticated,
                jobswaiting     = jobswaiting
            });

            HttpResponseMessage response = new HttpResponseMessage();

            response.Content = new StringContent(writer.ToString(), Encoding.UTF8, "application/json");
            response.Headers.Add("Access-Control-Allow-Origin", "*");
            return(response);
        }
Esempio n. 11
0
        protected bool IsAuthorized(HttpActionContext actionContext)
        {
            Session session  = actionContext.Request.GetSession();
            string  username = session["username"];

            if (username != null)
            {
                if (WindowsIdentityStore.HasWindowsIdentity(username))
                {
                    return(true);
                }
            }

            var auth = actionContext.Request.Headers.Authorization;

            if (auth != null)
            {
                byte[] authdata = Convert.FromBase64String(auth.Parameter);
                username = Encoding.UTF8.GetString(authdata.TakeWhile(c => c != (byte)':').ToArray());
                return(Authenticate(session, username, authdata.SkipWhile(c => c != (byte)':').Skip(1).ToArray()));
            }

            return(false);
        }
Esempio n. 12
0
        protected HttpResponseMessage Page(params object[] elements)
        {
            try
            {
                bool isadmin = WindowsIdentityStore.IsUserAdmin(Session["username"]);

                return(Html(
                           Head("Cloud Print Server"),
                           Body(
                               H1("Cloud Print Server"),
                               new XElement("p", "Welcome to the Cloud Print Server, " + Session["username"]),
                               elements,
                               new XElement("p",
                                            "Please go to ",
                                            new XElement("a",
                                                         new XAttribute("href", "http://google.com/cloudprint"),
                                                         "Google Cloud Print"
                                                         ),
                                            " to manage your printers."
                                            ),
                               PrintProxy.OAuthTicket == null ? null: new XElement("p", new XElement("p", PrintProxy.OAuthTicket.AccessToken)),
                               //isadmin ? new XElement("p", new XElement("a", new XAttribute("href", Url.Route("default", new { controller = "Auditron" })), "Auditron Username to Printer Code mapping")) : null,
                               this.PrintProxy.Queues == null ? null : new XElement("dl",
                                                                                    new XElement("dt", "This server is sharing the following printers:"),
                                                                                    new XElement("dd",
                                                                                                 new XElement("ul",
                                                                                                              this.PrintProxy.Queues.Select(q =>
                                                                                                                                            new XElement("li",
                                                                                                                                                         new XElement("a",
                                                                                                                                                                      new XAttribute("href", "https://www.google.com/cloudprint#printer/id/" + q.PrinterID),
                                                                                                                                                                      q.Name
                                                                                                                                                                      )
                                                                                                                                                         )
                                                                                                                                            )
                                                                                                              )
                                                                                                 ),
                                                                                    new XElement("dt", "This server has received the following print jobs:"),
                                                                                    this.PrintProxy.PrintJobs == null ? null : new XElement("dd",
                                                                                                                                            new XElement("ul",
                                                                                                                                                         this.PrintProxy.PrintJobs.Where(j => isadmin || j.Username == Session["username"])
                                                                                                                                                         .OrderByDescending(j => j.CreateTime)
                                                                                                                                                         .Select(j =>
                                                                                                                                                                 new XElement("li",
                                                                                                                                                                              new XElement("dl",
                                                                                                                                                                                           new XElement("dt",
                                                                                                                                                                                                        new XElement("a",
                                                                                                                                                                                                                     new XAttribute("href", "JobData/?JobID=" + j.JobID),
                                                                                                                                                                                                                     j.JobTitle
                                                                                                                                                                                                                     )
                                                                                                                                                                                                        ),
                                                                                                                                                                                           isadmin ? new XElement("dd", "Username: "******"dd", "Status: " + j.Status.ToString()),
                                                                                                                                                                                           new XElement("dd", "Last Updated: " + j.UpdateTime.ToLocalTime().ToString("dd MMM yyyy  hh:mm tt"))
                                                                                                                                                                                           )
                                                                                                                                                                              )
                                                                                                                                                                 )
                                                                                                                                                         )
                                                                                                                                            )
                                                                                    )
                               )
                           ));
            }
            catch (Exception ex)
            {
                return(Html(
                           Head("Cloud Print Server"),
                           Body(
                               H1("Cloud Print Server"),
                               new XElement("pre", "Error: " + ex.ToString())
                               )
                           ));
            }
        }
Esempio n. 13
0
 public override bool UserCanPrint(string username)
 {
     return(WindowsIdentityStore.HasWindowsIdentity(username));
 }
Esempio n. 14
0
 public IEnumerable <CloudPrintJob> GetCloudPrintJobsForUser(string username)
 {
     return(PrintJobs.Where(j => WindowsIdentityStore.IsAcceptedDomain(j.Domain) && j.Username == username));
 }
 public HttpResponseMessage Get()
 {
     return(Html(
                Head("Print Proxy Status"),
                Body(
                    H1("Print Proxy Status"),
                    new XElement("h2", "Users with print jobs waiting"),
                    new XElement("table",
                                 new XAttribute("border", "1"),
                                 new XElement("thead",
                                              new XElement("tr",
                                                           new XElement("th", "Username"),
                                                           new XElement("th", "Logged In?"),
                                                           new XElement("th", "Number of jobs waiting")
                                                           )
                                              ),
                                 new XElement("tbody",
                                              PrintProxy.PrintJobs.Where(j => j.Status == CloudPrintJobStatus.QUEUED).GroupBy(j => j.Username).OrderBy(j => j.Key).Select(j =>
                                                                                                                                                                          new XElement("tr",
                                                                                                                                                                                       new XElement("td", j.Key),
                                                                                                                                                                                       new XElement("td", WindowsIdentityStore.HasWindowsIdentity(j.Key) ? "Yes" : "No"),
                                                                                                                                                                                       new XElement("td", j.Count())
                                                                                                                                                                                       )
                                                                                                                                                                          )
                                              )
                                 )
                    )
                ));
 }