Example #1
0
        internal static string ToLink(Storage.Publication publication, Storage.CompilationRequest compilationRequest)
        {
            // Used only for public publications; for the private ones it's better to check
            Storage.StorageManager.PartialPublication ppublication = new Storage.StorageManager.PartialPublication();
            ppublication.publicationID     = publication.publicationID;
            ppublication.externalServiceID = (int)publication.externalServiceID;
            ppublication.isPublic          = publication.isPublic;

            return(ToLink(ppublication, compilationRequest));
        }
Example #2
0
        /// <summary>
        /// FORSE QUESTO METODO NON SERVE
        /// SERVE ECCOMEEEE!!
        /// </summary>
        /// <returns>una lista vuota</returns>
        public List <ComputableWorkflowReference> GetToBeCompiledWorkflows()
        {
            List <ComputableWorkflowReference> ret = new List <ComputableWorkflowReference>();

            if (!_registered)
            {
                return(ret);
            }

            Storage.StorageManager db   = new Storage.StorageManager();
            Storage.User           user = db.getEntityByID <Storage.User>(_userId);
            List <Storage.StorageManager.Pair <string, int> > tempcontacts = new List <Storage.StorageManager.Pair <string, int> >();

            foreach (Storage.ExternalAccount extAcc in user.ExternalAccount)
            {
                Storage.StorageManager.Pair <string, int> pair = new Storage.StorageManager.Pair <string, int>();
                pair.First  = extAcc.username;
                pair.Second = extAcc.serviceID;
                tempcontacts.Add(pair);
            }
            List <Storage.Contact> mycontacts = db.getContactsByExtID(tempcontacts);

            foreach (Storage.Contact mycontact in mycontacts)
            {
                List <Storage.Publication> pubs = db.getListPublicationsByContactID(mycontact.contactID);
                foreach (Storage.Publication pub in pubs)
                {
                    Storage.CompilationRequest req = db.getCompilationRequestByPulicationAndContact(mycontact.contactID, pub.publicationID);
                    if (!req.compiled)
                    {
                        ret.Add(new ComputableWorkflowReference(_userId, pub.publicationID, pub.namePublication, pub.description,
                                                                pub.themeID, req.compilReqID, !pub.isPublic, true, pub.expirationDate));
                    }
                }
            }
            return(ret);
        }
Example #3
0
        /// <summary>
        /// Get all public forms links with names and descriptions
        /// </summary>
        /// <returns>A Dictionary containing pairs of FormLink/&lt;FormName,FormDescription&rt;</returns>
        public static Dictionary <string, Storage.StorageManager.Pair <string, string> > GetPublicFormsLinks()
        {
            int fakeId = 1;

            Storage.StorageManager sto = new Storage.StorageManager();

            // We likes very long types
            List <Storage.StorageManager.Pair <
                      Storage.StorageManager.PartialPublication,
                      Storage.CompilationRequest
                      > > completelypublicpubs = sto.getPublicationsCompilationRequestByContactID(fakeId);
            List <Storage.StorageManager.PartialPublication> publicpubs = sto.getPublicationsPublic();
            Dictionary <string, Storage.StorageManager.Pair <string, string> > result = new Dictionary <string, Storage.StorageManager.Pair <string, string> >();
            int i = 0;

            foreach (Storage.StorageManager.PartialPublication pub in publicpubs)
            {
                Storage.CompilationRequest creq = null;
                if (pub.publicationID == completelypublicpubs[i].First.publicationID)
                {
                    // Completely public
                    creq = completelypublicpubs[i].Second;
                    i++;
                    // If reached the last one, stay there
                    if (i == completelypublicpubs.Count)
                    {
                        i--;
                    }
                }
                Storage.StorageManager.Pair <string, string> pair = new Storage.StorageManager.Pair <string, string>();
                pair.First  = pub.namePublication;
                pair.Second = pub.descr;
                result.Add(ToLink(pub, creq), pair);
                Console.WriteLine(ToLink(pub, creq));
            }
            return(result);
        }
Example #4
0
        public static ComputableWorkflowReference GetWorkflow(string wid, string crid, string username, string service, string token)
        {
            Storage.StorageManager sto = new Storage.StorageManager();
            int pubid  = -1;
            int creqid = -1;

            try
            {
                pubid  = int.Parse(wid);
                creqid = int.Parse(crid);
            }
            catch (Exception)
            { // Storage-style exception catching :P
                return(null);
            }
            Storage.Publication pub = sto.getEntityByID <Storage.Publication>(pubid);
            if (pub == null)
            {
                return(null);
            }
            FormType ftype = GetWorkflowType(pub);

            switch (ftype)
            {
            case FormType.PUBLIC_WITH_REPLICATION:
            {
                Storage.CompilationRequest creq = sto.getEntityByID <Storage.CompilationRequest>(creqid);
                if (creq == null)
                {
                    return(null);
                }
                // Public, check strings
                if (creq.publicationID == pub.publicationID &&
                    String.IsNullOrEmpty(username) &&
                    String.IsNullOrEmpty(service) &&
                    String.IsNullOrEmpty(token))
                {
                    // All ok, create and returns the wf
                    return(new ComputableWorkflowReference(pub.userID, pub.publicationID, pub.namePublication, pub.description, pub.themeID, creqid, false, true, pub.expirationDate));
                }
                else
                {
                    // Public publication, but not null parameters, forged link
                    return(null);
                }
            }

            case FormType.PUBLIC_WITHOUT_REPLICATION:
            {
                // Check with contact authentication
                int serviceID = -1;
                try
                {
                    serviceID = int.Parse(service);
                }
                catch (Exception)
                {
                    serviceID = -1;
                }
                if (serviceID == -1)
                {
                    // Errore
                    return(null);
                }
                Storage.Contact contact = sto.getContactByUserService(username, serviceID);
                if (contact == null)
                {
                    // All right, we create it now
                    contact = sto.addContact(username, serviceID, "Filler_Only_Contact");
                    if (contact == null)
                    {
                        // No way
                        return(null);
                    }
                }
                // Get the right CompilationRequest
                Storage.CompilationRequest creq = sto.getCompilationRequestByPulicationAndContact(contact.contactID, pub.publicationID);
                if (creq == null)
                {
                    // The user has surely not compiled it before
                    creq = sto.addContactToPublication(pub.publicationID, contact.contactID, "DUMMY_TOKEN");
                    if (creq == null)
                    {
                        // No way
                        return(null);
                    }
                }
                if (creq.compiled)
                {
                    // Already Compiled
                    return(null);
                }
                else
                {
                    return(new ComputableWorkflowReference(pub.userID, pub.publicationID, pub.namePublication, pub.description, pub.themeID, creq.compilReqID, true, true, pub.expirationDate));
                }
            }

            case FormType.PUBLIC_BY_SERVICE:
            {
                // Check with contact authentication
                int serviceID = -1;
                try
                {
                    serviceID = int.Parse(service);
                }
                catch (Exception)
                {
                    serviceID = -1;
                }
                if (serviceID == -1)
                {
                    // Errore
                    return(null);
                }
                if (pub.Service.serviceID != serviceID)
                {
                    // This serviceID is not allowed to fill the publication
                    return(null);
                }
                Storage.Contact contact = sto.getContactByUserService(username, serviceID);
                if (contact == null)
                {
                    // All right, we create it now
                    contact = sto.addContact(username, serviceID, "Filler_Only_Contact");
                    if (contact == null)
                    {
                        // No way
                        return(null);
                    }
                }
                // Get the right CompilationRequest
                Storage.CompilationRequest creq = sto.getCompilationRequestByPulicationAndContact(contact.contactID, pub.publicationID);
                if (creq == null)
                {
                    // The user has surely not compiled it before
                    creq = sto.addContactToPublication(pub.publicationID, contact.contactID, "DUMMY_TOKEN");
                    if (creq == null)
                    {
                        // No way
                        return(null);
                    }
                }
                if (creq.compiled)
                {
                    // Already Compiled
                    return(null);
                }
                else
                {
                    return(new ComputableWorkflowReference(pub.userID, pub.publicationID, pub.namePublication, pub.description, pub.themeID, creq.compilReqID, true, true, pub.expirationDate));
                }
            }

            case FormType.PRIVATE_NOT_ANONYM:
            case FormType.PRIVATE_ANONYM:
            {
                // Private, check strings
                if (creqid != -1)
                {
                    // Check with token
                    Storage.CompilationRequest creq = sto.getEntityByID <Storage.CompilationRequest>(creqid);
                    if (creq == null)
                    {
                        return(null);
                    }
                    if (creq.publicationID == pub.publicationID &&
                        creq.token.Equals(token) &&
                        ((creq.Contact.nameContact).ToUpper()).Equals(username) &&
                        creq.Contact.Service.nameService.Equals(service) &&
                        !creq.compiled)
                    {
                        // Right compilation request, all done!
                        return(new ComputableWorkflowReference(pub.userID, pub.publicationID, pub.namePublication, pub.description, pub.themeID, creqid, true, true, pub.expirationDate));
                    }
                    else
                    {
                        // Wrong authentication parameters
                        return(null);
                    }
                }
                else
                {
                    // Check with contact authentication
                    int serviceID = -1;
                    try
                    {
                        serviceID = int.Parse(service);
                    }
                    catch (Exception)
                    {
                        serviceID = -1;
                    }
                    if (serviceID == -1)
                    {
                        // Errore
                        return(null);
                    }
                    Storage.Contact contact = sto.getContactByUserService(username, serviceID);
                    if (contact == null)
                    {
                        // In this case, if the contact doesn't exists, is an error
                        return(null);
                    }
                    // Get the right CompilationRequest
                    Storage.CompilationRequest creq = sto.getCompilationRequestByPulicationAndContact(contact.contactID, pub.publicationID);
                    if (creq == null)
                    {
                        // L'utente non ha il permesso per riempire la form
                        return(null);
                    }
                    if (creq.compiled)
                    {
                        // L'utente ha giĆ  inserito la form
                        return(null);
                    }
                    else
                    {
                        return(new ComputableWorkflowReference(pub.userID, pub.publicationID, pub.namePublication, pub.description, pub.themeID, creq.compilReqID, true, true, pub.expirationDate));
                    }
                }
            }

            default:
            {
                return(null);
            }
            }
        }
Example #5
0
        internal static string ToLink(Storage.StorageManager.PartialPublication publication, Storage.CompilationRequest compilationRequest)
        {
            string webServerAddress = Storage.StorageManager.getEnvValue("webServerAddress");
            string fillingPage      = "/FormFillier/Filling.aspx";
            string ret = null;

            if (publication.isPublic)
            {
                if (compilationRequest == null)
                {
                    ret = "http://"
                          + webServerAddress + fillingPage
                          + "?WorkflowID=" + publication.publicationID
                          + "&CompilationRequestID=" + "-1";
                    if (publication.externalServiceID == 1)
                    {
                        ret += "&Service=-1";
                    }
                    else
                    {
                        ret += "&Service=" + publication.externalServiceID;
                    }
                }
                else
                {
                    ret = "http://"
                          + webServerAddress + fillingPage
                          + "?WorkflowID=" + publication.publicationID
                          + "&CompilationRequestID=" + compilationRequest.compilReqID;
                }
            }
            return(ret);
        }
Example #6
0
        public WorkflowInformations GetWorkflow(int compilationRequestId, string username, string service, string token)
        {
            Storage.StorageManager     manager            = new Storage.StorageManager();
            Storage.CompilationRequest compilationRequest = manager.getEntityByID <Storage.CompilationRequest>(compilationRequestId);

            WorkflowInformations infs = new WorkflowInformations();

            infs.status = ResultStatus.OK;

            if (compilationRequest == null)
            {
                infs.status = ResultStatus.WRONG_COMPILATION_REQUEST_ID;
                return(infs);
            }

            Storage.Publication publication         = compilationRequest.Publication;
            Security.ComputableWorkflowReference cw = Security.Token.GetWorkflow("" + publication.publicationID, "" + compilationRequestId, username, service, token);
            if (cw == null)
            {
                infs.status = ResultStatus.WRONG_COMPILATION_REQUEST_ID;
                return(infs);
            }

            infs.description            = cw.GetWorkflow().GetEntireWorkflowDescription();
            infs.publicationDescription = cw.GetWorkflowDescription();
            infs.status = ResultStatus.OK;

            /*
             * if (publication.isPublic)
             * {
             * //pubblico
             * IComputableWorkflow cw = (IComputableWorkflow)manager.getWorkflowByPublication(publication);
             * cw.setWFname(publication.namePublication);
             * infs.description = cw.GetEntireWorkflowDescription();
             * infs.publicationDescription = publication.description;
             * }
             * else
             * {
             * //privato
             * if (token==null || !compilationRequest.token.Equals(token))
             * {
             * infs.status = ResultStatus.WRONG_TOKEN;
             * return infs;
             * }
             * Storage.Contact contact = compilationRequest.Contact;
             * if (username==null || service == null ||
             * !(contact.externalUserID.Equals(username) && (contact.Service.nameService.Equals(service))))
             * {
             * infs.status = ResultStatus.WRONG_USERNAME_OR_SERVICE;
             * return infs;
             * }
             * if (compilationRequest.compiled)
             * {
             * infs.status = ResultStatus.ALREADY_COMPILED;
             * }
             * IComputableWorkflow cw = (IComputableWorkflow)manager.getWorkflowByPublication(publication);
             * cw.setWFname(publication.namePublication);
             * infs.description = cw.GetEntireWorkflowDescription();
             * infs.publicationDescription = publication.description;
             * }
             */
            return(infs);
        }
Example #7
0
        public bool SendFilledDocument(int compilationRequestId, string username, string service, string token, string dataStr)
        {
            XmlDocument data = new XmlDocument();

            data.LoadXml(dataStr);

            Storage.StorageManager     manager            = new Storage.StorageManager();
            Storage.CompilationRequest compilationRequest = manager.getEntityByID <Storage.CompilationRequest>(compilationRequestId);
            if (compilationRequest == null)
            {
                return(false);
            }
            Storage.Publication publication = compilationRequest.Publication;

            IComputableWorkflow cw;

            if (publication.isPublic)
            {
                //pubblico
                cw = (IComputableWorkflow)manager.getWorkflowByPublication(publication);
            }
            else
            {
                //privato
                if (token == null || !compilationRequest.token.Equals(token))
                {
                    return(false);
                }
                Storage.Contact contact = compilationRequest.Contact;
                if (username == null || service == null ||
                    !(contact.externalUserID.Equals(username) && (contact.Service.nameService.Equals(service))))
                {
                    return(false);
                }
                if (compilationRequest.compiled)
                {
                    return(false);
                }
                cw = (IComputableWorkflow)manager.getWorkflowByPublication(publication);
            }
            cw.setWFname(publication.namePublication);

            System.Xml.Schema.XmlSchemaSet schema = cw.GetCollectedDocumentSchemas();
            data.Schemas = schema;
            try
            {
                data.Validate(null);
            }
            catch (XmlSchemaValidationException)
            {
                return(false);
            }
            Storage.Result           res          = null;
            System.Xml.Linq.XElement dataXElement = Storage.StorageManager.xmlDocumentToXElement(data);
            res = (Storage.Result)manager.addResult(compilationRequest.compilReqID, dataXElement);
            if (res == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }