Quantcast
Channel: Forum Microsoft Identity Manager
Viewing all 4767 articles
Browse latest View live

Why are the binary attributes defined as "Int" for Photo in person object

0
0
Hello,

I am trying to use this client to set binary attributes such as Photo in FIM but found out that these attributes were defined as "Int' in the client schema instead of "Byte[]".

What is the reason for that?

Does anybody has some sample code to set binary attributes in FIM?



 I am trying to use this client to set binary attributes such as Photo in FIM but found out that these attributes were defined as "Int' in the client schema instead of "Byte[]".

I am writing a WCF service which upload a photo to the FIM but i having issues wit the attribute as it is int.
Here is my code:

 public UploadedFile Upload(Stream Uploading)
        {
            int length = 0;
            UploadedFile upload = new UploadedFile { FilePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) };

            // This  shows the basic steps to modify a resource.
            using (DefaultClient client = new DefaultClient())
            {
                string filterName = "/Person[AccountName='" + HttpContext.Current.User.Identity.Name.Split('\\')[1].ToString() + "']";
                System.Security.Principal.WindowsImpersonationContext ctx = null;
                ctx = ((System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity).Impersonate();

                //set credentials and refresh schema
                client.RefreshSchema();

                // get the person(s) object(s) to modify
                foreach (RmPerson person in client.Enumerate(filterName))
                {
                    // create the object to track changes to the resource
                    RmResourceChanges changes = new RmResourceChanges(person);
                    try
                    {
                        changes.BeginChanges();

                        //byte[] m_Bytes = ReadToEnd(Uploading);
                        //  person.Photo = Convert.ToInt32(m_Bytes.GetValue(0));

                        using (FileStream writer = new FileStream(upload.FilePath, FileMode.Create))
                        {
                            int readCount;
                            var buffer = new byte[8192];
                            byte[] fileContent = null;
                            BinaryReader binaryReader = new BinaryReader(writer);
          

                            while ((readCount = Uploading.Read(buffer, 0, buffer.Length)) != 0)
                            {
                                writer.Write(buffer, 0, readCount);
                                length += readCount;
                            }
                            // change something in the resource
                            person.Photo = binaryreader;
                        }

                        // modify the resource on the server
                        client.Put(changes);
                        // the operation succeeded: accept the changes.
                        changes.AcceptChanges();
                        // NOTE: after calling AcceptChanges the RmResourceChanges 
                        // object does not contain any more changes to propagate to
                        // the server.
                    }
                    catch (Exception ex)
                    {
                        changes.DiscardChanges();
                    }
                }
                upload.FileLength = length;
                return upload;
            }
        }

Can some one please post the solution to this issue? I need this ASAP.

Thanks,
Sravani

Fault exception handling

0
0
Hello, 

My application as been throwing an exception " Policy prohibits the request from completing" when aim trying to update a person object. 
How can i handle this exception, could you please help me ?

Here is my code:

public string ModifyPersonName(string Name)
        {
            // This  shows the basic steps to modify a resource.
            using (DefaultClient client = new DefaultClient())
            {
                string filterName = "/Person[AccountName='" + HttpContext.Current.User.Identity.Name.Split('\\')[1].ToString() + "']";
                System.Security.Principal.WindowsImpersonationContext ctx = null;
                ctx = ((System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity).Impersonate();

                //set credentials and refresh schema
                client.RefreshSchema();

                // get the person(s) object(s) to modify
                foreach (RmPerson person in client.Enumerate(filterName))
                {
                    // create the object to track changes to the resource
                    RmResourceChanges changes = new RmResourceChanges(person);
                    try
                    {
                        changes.BeginChanges();
                        // change something in the resource
                        person.DisplayName = Name.ToString();
                        // modify the resource on the server
                        client.Put(changes);
                        // the operation succeeded: accept the changes.
                        changes.AcceptChanges();
                        // NOTE: after calling AcceptChanges the RmResourceChanges 
                        // object does not contain any more changes to propagate to
                        // the server.
                    }
                    catch (FaultException<AuthorizationRequiredFault> ex)
                    {
                        // approval required
                        return " Requested Submitted, approval is pending";

                        string jsonResponse = new JavaScriptSerializer().Serialize(ex.Message);
                        string aposUnicode = "\\u0027";
                        return jsonResponse.Replace(aposUnicode, "'"); ;
                    }
                    catch (FaultException<PermissionDeniedFault>)
                    {
                        return "Permissions Denied";
                    }
                    catch (Exception ex)
                    {
                        return ex.Message;
                        // an error occurred, so the resource was not modified; 
                        // rollback the changes.
                        changes.DiscardChanges();
                        //throw;
                    }
                    finally
                    {
                        ctx.Undo();
                    }
                }
                return "Requested Submitted, Auto approved";
            }
        }

Thanks,
Sravani

AccountExpires -> EmployeeEndDate Attribute Flow

0
0

Hello,

I'm wondering if anyone has any resources on mapping AccountExpires (AD) -> EmployeeEndDate (FIM). I understand that this has to be done by rules extensions or advance attribute flows. Unfortionatly I do not have experience with either. Any help is appreciated.

thanks,

Josh

Send notification to manager when attributes have been updated by user (Department, Job Title)

0
0

Hello,

I would like to send a notification to a user's manager (\\Target\Manager) if the user updates their Department of Job Title. Does anyone have any idea how to do this without making sets for each department and job title?

Two password reset gates

0
0

Hello,

Is it possible to have one set of users go through a QA gate and another go through One-Time Password Email Gate? We have a small subset of users that we would like to email temp passwords to, instead of making them answer security questions.

thanks,

Josh

How to get a substring in a Workflow Activity?

0
0

I'm concatenating some values into a Summary field in a workflow activity as follows:

IIF(Eq([//Target/Code1],True),"1,","")+IIF(Eq([//Target/Code2],True),"2,","")+IIF(Eq([//Target/Code3],True),"3,","")

So if Code1 and Code2 are true I get a Summary Value of 1,2,

Now I want to trim the trailing comma.

So I did this

Left([//Target/Summary],Add(Length([//Target/Summary]),-1))

This part doesn't work.  It says Left is improperly formatted or missing a parameter.

If I put a numeric value like 1 or 2 as the second value it works.

 Any suggestions on how to get trim a character off the end of a string in a FIM Workflow activity?

PutExportEntries is not being called in ECMA2

0
0

I am developing this ECMA2 based MA, but for some reason, the OpenExportConnection() and the CloseExportConnection() methods are being called, but the PutExportEntries() method is not being called. There is no exceptions thrown anywhere, so I cannot think of any reason why the PutExportEntries() method would not be called. Any insights /suggestions?

namespace FimSync_Ezma
{
    public class EzmaExtension :
    IMAExtensible2CallExport,
    IMAExtensible2GetSchema,
    IMAExtensible2GetCapabilities
    {
        [System.ComponentModel.DefaultValue(1000)]
        public int ExportMaxPageSize { get; set; }

        [System.ComponentModel.DefaultValue(100)]
        public int ExportDefaultPageSize { get; set; }

        //
        // Constructor
        //
        public EzmaExtension() { }

        public MACapabilities Capabilities
        {
            get
            {
                MACapabilities myCapabilities = new MACapabilities();

                myCapabilities.SupportExport = true;
                myCapabilities.FullExport = true;
                myCapabilities.ExportType = MAExportType.ObjectReplace;
                myCapabilities.NoReferenceValuesInFirstExport = true;
                myCapabilities.ExportPasswordInFirstPass = false;

                myCapabilities.SupportImport =false;
                myCapabilities.DeltaImport = false;

                myCapabilities.ConcurrentOperation = false;

                myCapabilities.ObjectRename = false;
                myCapabilities.DeleteAddAsReplace = false;

                myCapabilities.DistinguishedNameStyle = MADistinguishedNameStyle.None;
                myCapabilities.Normalizations = MANormalizations.None;

                return myCapabilities;
            }
        }

        public IList<ConfigParameterDefinition> GetConfigParameters(KeyedCollection<string, ConfigParameter> configParameters,
                                                            ConfigParameterPage page)
        {
            List<ConfigParameterDefinition> configParametersDefinitions = new List<ConfigParameterDefinition>();

            switch (page)
            {
                case ConfigParameterPage.Connectivity:
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("URL", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateEncryptedStringParameter("Username", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Domain", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Password", ""));
                    break;

                case ConfigParameterPage.Global:
                    break;

                case ConfigParameterPage.Partition:
                    break;

                case ConfigParameterPage.RunStep:
                    break;
            }

            return configParametersDefinitions;
        }

        public ParameterValidationResult ValidateConfigParameters(KeyedCollection<string, ConfigParameter> configParameters,
                                                                   ConfigParameterPage page)
        {
            ParameterValidationResult myResults = new ParameterValidationResult();
            return myResults;
        }

        public Schema GetSchema(KeyedCollection<string, ConfigParameter> configParameters)
        {
            Microsoft.MetadirectoryServices.SchemaType personType = Microsoft.MetadirectoryServices.SchemaType.Create("Person", false);

            personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("accountName", AttributeType.String, Microsoft.MetadirectoryServices.AttributeOperation.ExportOnly));
            personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("displayName", AttributeType.String, Microsoft.MetadirectoryServices.AttributeOperation.ExportOnly));

            Schema schema = Schema.Create();
            schema.Types.Add(personType);

            return schema;
        }


        public void OpenExportConnection(KeyedCollection<string, ConfigParameter> configParameters,
                    Schema types,
                    OpenExportConnectionRunStep exportRunStep)
        {
            // Do nothing
        }

        public PutExportEntriesResults PutExportEntries(IList<CSEntryChange> csentries)
        {
            foreach (CSEntryChange csentryChange in csentries)
            {
                string accountName = string.Empty;
                string displayName = string.Empty;

                foreach (string attrib in csentryChange.ChangedAttributeNames)
                {
                    switch (attrib)
                    {
                        case "accountName":
                            accountName = csentryChange.AttributeChanges["accountName"].ValueChanges[0].Value.ToString();
                            break;
                        case "displayName":
                            displayName = csentryChange.AttributeChanges["displayName"].ValueChanges[0].Value.ToString();
                            break;
                        default:
                            //ignore
                            break;
                    }
                }

                // TODO: Make API call
            }

            PutExportEntriesResults exportEntriesResults = new PutExportEntriesResults();
            return exportEntriesResults;
        }

        public void CloseExportConnection(CloseExportConnectionRunStep exportRunStep)
        {
            // Do nothing
        }
    };
}

[URGENT] PutExportEntries is not being called in ECMA2

0
0

I am developing this ECMA2 based MA, but for some reason, the OpenExportConnection() and the CloseExportConnection() methods are being called, but the PutExportEntries() method is not being called. There is no exceptions thrown anywhere, so I cannot think of any reason why the PutExportEntries() method would not be called. Any insights /suggestions?

namespace FimSync_Ezma
{
    public class EzmaExtension :
    IMAExtensible2CallExport,
    IMAExtensible2GetSchema,
    IMAExtensible2GetCapabilities
    {
        [System.ComponentModel.DefaultValue(1000)]
        public int ExportMaxPageSize { get; set; }

        [System.ComponentModel.DefaultValue(100)]
        public int ExportDefaultPageSize { get; set; }

        //
        // Constructor
        //
        public EzmaExtension() { }

        public MACapabilities Capabilities
        {
            get
            {
                MACapabilities myCapabilities = new MACapabilities();

                myCapabilities.SupportExport = true;
                myCapabilities.FullExport = true;
                myCapabilities.ExportType = MAExportType.ObjectReplace;
                myCapabilities.NoReferenceValuesInFirstExport = true;
                myCapabilities.ExportPasswordInFirstPass = false;

                myCapabilities.SupportImport =false;
                myCapabilities.DeltaImport = false;

                myCapabilities.ConcurrentOperation = false;

                myCapabilities.ObjectRename = false;
                myCapabilities.DeleteAddAsReplace = false;

                myCapabilities.DistinguishedNameStyle = MADistinguishedNameStyle.None;
                myCapabilities.Normalizations = MANormalizations.None;

                return myCapabilities;
            }
        }

        public IList<ConfigParameterDefinition> GetConfigParameters(KeyedCollection<string, ConfigParameter> configParameters,
                                                            ConfigParameterPage page)
        {
            List<ConfigParameterDefinition> configParametersDefinitions = new List<ConfigParameterDefinition>();

            switch (page)
            {
                case ConfigParameterPage.Connectivity:
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("URL", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateEncryptedStringParameter("Username", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Domain", ""));
                    configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Password", ""));
                    break;

                case ConfigParameterPage.Global:
                    break;

                case ConfigParameterPage.Partition:
                    break;

                case ConfigParameterPage.RunStep:
                    break;
            }

            return configParametersDefinitions;
        }

        public ParameterValidationResult ValidateConfigParameters(KeyedCollection<string, ConfigParameter> configParameters,
                                                                   ConfigParameterPage page)
        {
            ParameterValidationResult myResults = new ParameterValidationResult();
            return myResults;
        }

        public Schema GetSchema(KeyedCollection<string, ConfigParameter> configParameters)
        {
            Microsoft.MetadirectoryServices.SchemaType personType = Microsoft.MetadirectoryServices.SchemaType.Create("Person", false);

            personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("accountName", AttributeType.String, Microsoft.MetadirectoryServices.AttributeOperation.ExportOnly));
            personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("displayName", AttributeType.String, Microsoft.MetadirectoryServices.AttributeOperation.ExportOnly));

            Schema schema = Schema.Create();
            schema.Types.Add(personType);

            return schema;
        }


        public void OpenExportConnection(KeyedCollection<string, ConfigParameter> configParameters,
                    Schema types,
                    OpenExportConnectionRunStep exportRunStep)
        {
            // Do nothing
        }

        public PutExportEntriesResults PutExportEntries(IList<CSEntryChange> csentries)
        {
            foreach (CSEntryChange csentryChange in csentries)
            {
                string accountName = string.Empty;
                string displayName = string.Empty;

                foreach (string attrib in csentryChange.ChangedAttributeNames)
                {
                    switch (attrib)
                    {
                        case "accountName":
                            accountName = csentryChange.AttributeChanges["accountName"].ValueChanges[0].Value.ToString();
                            break;
                        case "displayName":
                            displayName = csentryChange.AttributeChanges["displayName"].ValueChanges[0].Value.ToString();
                            break;
                        default:
                            //ignore
                            break;
                    }
                }

                // TODO: Make API call
            }

            PutExportEntriesResults exportEntriesResults = new PutExportEntriesResults();
            return exportEntriesResults;
        }

        public void CloseExportConnection(CloseExportConnectionRunStep exportRunStep)
        {
            // Do nothing
        }
    };
}



Synchronization Service Manager-Add Attribute

0
0

Hello,

I was wondering if someone can help me out on adding a new attribute in the FIM Metaverse. It seems that every time I try to add a new attribute to an Object Type, I keep getting this error: "Update metaverse schema failed" "Error HRESULT E_FAIL has been returned from a call to a COM component."

Has anyone else received the same error? What does this error mean?

Would highly appreciate your help, please and thank you!

BHOLD-error on group provisioning

0
0

Hi,

I am getting "cd error" on group provisioning in bhold access management agent.

I am populating all attributes like bholddescription,bholdtaskname,bholdmaxusers,bholdmaxroles,application description and members.

But getting errors.

event viewer reads:-

The extensible extension returned an unsupported error.
 The stack trace is:
 
 "Microsoft.MetadirectoryServices.ExtensibleExtensionException: The anchor attributes were not set in export entry.Forefront Identity Manager 4.1.3419.0"

Any help


shakti

Failed to retrieve the schema - Creating the first MA

0
0

Hello experts,

We are deploying the Self Service Password Reset feature with FIM 2010, and while creating the first Management Agent for FIM Service, we get a problem stating "Failed to retrieve the Schema".

I've already installed Net Framework 4.0 and edited the "miiserver.exe.config".

What is the recommended solution for this one?

Thanks in advance,

GAL Sync for 2 Active Diretory Forests

0
0
We currently are a Domino Shop with no Active Directory interaction. We are migrating to Exchange 2013 SP1 and have two Active Directory Forests with a two way trust. We have one email domain and MX record for the users on these two domains and need it to remain that way. Can FIM 2010 still be designed the same way between these two active directory forest?  We will have to put Exchange Servers on both LAN Domains due to a firewall constraint between the two AD Forests, but we want one centralized GAL.  Please advised the appropriate steps to accomplish this. Thanks, Margaret

How to export users from FIM portal with dispaly name, domain, account name title, office Location, Manager, Employee ID, Manager id and whatever attribute its there in FIM Portal from powershell

0
0

Hi There,

How to export users from FIM portal with dispaly name, domain, account name title, office Location, Manager, Employee ID, Manager id and whatever attribute its there in FIM Portal from powershell or any method.

Even am ot able to export FIM SQl Database.

Please help on this.

Thanks very much in Advance.

Thanks

Veerappa

FIM portal sends email to wrong recepient

0
0

We have got account objects for differnt system in our organization in FIM portal. Each of these account object has a system manager.

Whenever a new account is created a mail is triggered to system manager. We  have a workflow for this activity.

The issues is that FIM portal is sending emails to incorrect recipients. The mail is send out to system manger of other system.

My one guess is that when a new user is created; it also creates around 5 to 6 accounts. So aroung 5-6 emails are sent out using the same MPR/workflow. Could this be the reason?

Group members based on subset of users

0
0

Hi everyone,

What would happen if I import a security group object but only a subset of the users that are members of the group are in FIM? When an outbound rule is performed, will the set of users not in FIM be removed from the group?


"The request failed. The underlying connection was closed: Could not establish trust relationship for the SSL\/TLS secure channel."

0
0

Hello,

Can someone please tell me the solution for this issue. I am trying to connect to my exchange server and its throwing this error. I have also imported the certificate and placed in root folder. But still find the same error. Going craxy from 3 days plz someone help me.Here is my code:

  public string CheckAvailability(string value)
        {
            try
            {
                //ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

                //Connecting to EWS by using the EWS Managed API 2.0
                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

                // Connect by using the default credentials of the authenticated user.
                //service.UseDefaultCredentials = true;

                // Connect by using the credentials of user
                service.Credentials = new NetworkCredential("UID", "PWD", "Domain");

                service.TraceEnabled = true;
                service.TraceFlags = TraceFlags.All;   

                // Use Autodiscover to set the URL endpoint.You should either set the URL explicitly or call AutodiscoverUrl, but you should not do both.
                service.Url = new Uri("https://ad-lab/ews/Services.asmx");
             

                //EmailMessage msg = new EmailMessage(service);
                //msg.ToRecipients.Add(new EmailAddress("xyz@domain.com "));
                //msg.Subject = "Test email";
                //msg.Body = new MessageBody(BodyType.HTML, "<p>Hello Email!</p>");
                //msg.Send();
                GetUserFreeBusy(service);
                return "Hello " + value;

            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally { }
        }

Thanks,

Sravani

RESPONSE REQUEST: FIM Gurus Please Connect with Internet of Thinkers (aka TNWiki)

0
0

May the Thoughts be with you!

Well, a small nod there to Star Wars day, and we turn our thoughts to more the serious matter of ingesting the more valuable brain telemetry from and to our very own Internet of Thinkers!

Connect to the real network, the world wide workers!

Cut through the chatter and produce some pertinent protocols!

All over the world, highly intellegent autominous entities are uploading neural nuggets of gold, words of wisdom and inspirational instructionals!

So step forward... beacons of brain power, and download your technical torrent of tips to the Head Hub - TechNet Wiki!

 

All you have to do is add an article to TechNet Wiki from your own specialist field. Something that fits into one of the categories listed on the submissions page. Copy in your own blog posts, a forum solution, a white paper, or just something you had to solve for your own day's work today.

Drop us some nifty knowledge, or superb snippets, and become MICROSOFT TECHNOLOGY GURU OF THE MONTH!

This is an official Microsoft TechNet recognition, where people such as yourselves can truly get noticed!

HOW TO WIN

1) Please copy over your Microsoft technical solutions and revelations toTechNet Wiki.

2) Add a link to it on THIS WIKI COMPETITION PAGE (so we know you've contributed)

3) Every month, we will highlight your contributions, and select a "Guru of the Month" in each technology.

If you win, we will sing your praises in blogs and forums, similar to the weekly contributor awards. Once "on our radar" and making your mark, you will probably be interviewed for your greatness, and maybe eventually even invited into other inner TechNet/MSDN circles!

Winning this award in your favoured technology will help us learn the active members in each community.

Feel free to ask any questions below.

More about TechNet Guru Awards

Thanks in advance!
Pete Laker


#PEJL
Got any nice code? If you invest time in coding an elegant, novel or impressive answer on MSDN forums, why not copy it over toTechNet Wiki, for future generations to benefit from! You'll never get archived again, and you could win weekly awards!

Have you got what it takes o become this month's TechNet Technical Guru? Join a long list of well known community big hitters, show your knowledge and prowess in your favoured technologies!

Can Modifying Email (Email mapped with DN - in FIM Sync) will link with user that is already provisioned to external system(Google)

0
0

Hi,

 We have provisioned users from FIM to Google(used Generic REST API MA) by mapping "Email" with "DN". Now we need to change that Email at FIM.We want to link the changed Email with the user present in Google.But when we do an export it is creating a new user at Google because of new DN.How we can modify the DN in FIM Sync Provision Code so that the new DN(Email) will be updated to the already existing user at Google.

Please suggest me.

Thanks

Prasanthi.

Where is the validation and error message labels configured in FIM Portal.

0
0

Hi,

In our organization, While creating a security group in FIM Portal, under the Roles tab when we type in the "Group Owner" name who is not in the list of "Membership Manager", it gives an message stating "Please select the Group Owner from the above Membership Managers". I want to understand where is this validation and the error message label configured in FIM Portal?

I looked into the RCDC, and checked the XML file for "Create, Edit and Read" operations of Groups. I could not find the validation or error message in there.

I navigated to the Portal folder which was created during FIM Installation and tried checking in there too. But could not find anything relevant.

Is there any other place where the validation and error message can be configured?

Any help would be appreciated.

Thanks!

Is it possible to provide the manager reference attribute into MV indirectly via a flow rule?

0
0

FIM newbie here.

We have a situation where the HR source provides the user IDs and their manager IDs. Quite normal.

The kink is that many managers are "external" and their IDs are not present in the HR file but exist in AD.

An example 3 line file could be

UserID,FirstName,LastName,ManagerID,Title

123,Joe,Soap,X123,Manager

345,Chris,Spalding,123,Worker

678,David,Soul,123,Worker

Joe Soaps manager identified by X123 exists in AD as do all the other 3 users. The person identified by X123 just isn't present in the HR provided file. So the 'natural' use of anchors and references fail. It is impossible to push External people into the HR system. However,  All AD entries containing IDs are projected/joined into the MV and onwards into the Portal.

Is it possible to build a rules extension on import to get the "manager" via MV search using the key ManagerID?

I was hoping the following might be possible.

Invent a MV attribute to hold the manager reference called myManager type reference.

With the advanced attribute flow rule import to attribute myManager with flow rule XYZ

In the C# code

get the CS.ManagerID

<somehow get the MVobjectID of the MV entry having UserID = CS.ManagerID>

push the MVobjectID found into myManager

and then flow myManager to AD manager and Portal Manager attributes.

I am not sure if it is possible/would work.

Is it possible to grab a MV objectID with FIM C# methods?

Is it possible to work with reference typed attributes with flow rules?

Just what methods are available to work with the MV in C#?

Viewing all 4767 articles
Browse latest View live




Latest Images