public RequestFederationResponse RequestFederation(FederatedAPI.implementation.FederateRecord request)
        {
            RequestFederationResponse response = new RequestFederationResponse();
            List<FederateRecord> federates = mFederateRegister.GetAllFederateRecords();

            //check for collisions in the names of the services
            foreach (FederateRecord fr in federates)
            {
                if (fr.RESTAPI == request.RESTAPI && fr.ActivationState != FederateState.Delisted)
                {
                    response.message = "This URL is already registered to " + fr.OrginizationName + ". Please contact " + fr.OrganizationPOC + " at " + fr.OrganizationPOCEmail;
                    response.status = (int)RequestStatus.AlreadyRegistered; ;
                    return response;
                }
            }

            //check for collisions in the namespace prefix
            foreach (FederateRecord fr in federates)
            {
                if (fr.namespacePrefix == request.namespacePrefix && fr.ActivationState != FederateState.Delisted)
                {
                    response.message = "This prefix is already registered to " + fr.OrginizationName + ". Please choose a different prefix and try again";
                    response.status = (int)RequestStatus.PrefixCollision; ;
                    return response;
                }
                if (fr.namespacePrefix == request.namespacePrefix && fr.ActivationState == FederateState.Delisted && (fr.OrganizationPOCEmail != request.OrganizationPOCEmail || fr.OrganizationPOCPassword != request.OrganizationPOCPassword || fr.OrginizationName != request.OrginizationName))
                {
                    response.message = "This prefix is inactive but reserved for " + fr.OrginizationName + ". If you are the POC for "+ fr.OrginizationName + " please use your original Federation email and password to relist under this namespace.";
                    response.status = (int)RequestStatus.PrefixCollision; ;
                    return response;
                }
            }

            //Check that the json api works
            try
            {
                System.Net.WebClient wc = GetWebClient();

                try
                {
                    wc.DownloadString(request.RESTAPI + "/Search/test/json?ID=00-00-00");
                }
                catch(Exception ex)
                {
                    response.status = (int)RequestStatus.BadURL;
                    response.message = "Could not contact the API. Your API must be online and visible to register with the federation.";
                    return response;
                }
            }
            catch(SystemException e)
            {
                response.status = (int)RequestStatus.BadURL;
                response.message = "Could not contact the API. Your API must be online and visible to register with the federation.";
                return response;
            }

            //Create the record
            request.ActivationState = FederateState.Unapproved;
            mFederateRegister.CreateFederateRecord(request);

            response.assignedPrefix = request.namespacePrefix;
            response.status = (int)RequestStatus.RequestAccepted;
            response.message = "You have been assigned the prefix: " + response.assignedPrefix + "<br/>You will receive an email when the administrator enables this account<br/>status: " + response.status.ToString();
            return response;
        }
 public FederatedAPI.implementation.ApproveFederateResponse ApproveFederate(FederatedAPI.implementation.ApproveFederateRequest request)
 {
     ApproveFederateResponse response = new ApproveFederateResponse();
     if (request.OrganizationPOCEmail != AdminUsername)
     {
         response.message = "Only the Federation Admin may approve this federate.";
         return response;
     }
     if(request.OrganizationPOCPassword != AdminPassword)
     {
         response.message = "Incorrect Federation Admin password.";
         return response;
     }
         FederateRecord f = mFederateRegister.GetFederateRecord(request.NamespacePrefix);
         f.ActivationState = FederateState.Active;
         mFederateRegister.UpdateFederateRecord(f);
     response.message = "The federate has been activated";
     return response;
 }