Thursday, December 8, 2016

Provider Hosted Apps in SharePoint 2013


Create Certificate (Cer):
Go to IIS
Click on server certificates
Next click on the right pane select the self-signed certificate and give the name: TrustedCertificate then
Click on OK
Export Certificate (pfx):
In IIS Click on the certificate next click on the export then select location and give password
Copy Certificate (Cer):
In IIS double click the certificate next select details tab click on CopytoFile
Next click on next button select the No do not export the private key
Next click on next button select the DER encoded binary
Next click on next button choose the file where you want save
Next click on finish button
Run the below PowerShell command:
$cert=Get-PfxCertificate -FilePath "C:\Certs\TrustedCertificate.cer"
 $issuerid=[System.Guid]::NewGuid().ToString() // 35f57afc-2895-4825-9c60-bc37a91e2a51
 $realmid=Get-SPAuthenticationRealm -ServiceContext "http://SPSite:41127/sites/DeveloperSite/"
 //7d99f2ba-4f1e-4962-8a71-174f8df35404
$registeredName=$issuerid + "@" + $realmid
New-SPTrustedSecurityTokenIssuer -Name "DevelopmentApp" -RegisteredIssuerName $registeredName -IsTrustBroker -Certificate $cert
Note:
$issuerId will give the Issuer id
$realmid will give the real Id
$registeredName will give the registered name.
Go to Visual studio:
Select the App for SharePoint the app name: PagesCreationUsingPageViewerWebpart click on OK.
Next give developer site URL and select provider hosted
Click on next select the ASP.NET web forms Application
Click on next select use certificate and give the below details: pfx certificate location, password and realmid
Check in Web.config is done properly or not.
Step 9:Run the project in visual studio and check whether client Id is generated or not in web.config.
Step 10:Change the Permission in AppManifest.xml
Step 12:Run the below script  for generating APP ID
$clientid = " bded8c2e-da2d-4c2a-a8c3-0dbcf3e42f8e"
 $appId = $clientid + "@" + $realmid
 Register-SPAppPrincipal -Site "http://SPSite:41127/sites/DeveloperSite/"  -NameIdentifier $appId
 
Step 13:Run the below script
$config = (Get-SPSecurityTokenServiceConfig)
$config.AllowOAuthOverHttp = $true
$config.Update()
 
Step 14 : Deploy it finally.

Monday, July 18, 2016

Read Excel particular column values and ensure the user in SharePoint site using powershell

Declare Parameters:

Param(
  [string]$filePath,
  [string]$sheetName,
  [string]$siteUrl,
  [string]$authFormat,
  [string]$authProviderName
)

#$filePath = "C:\venkat\MDM.xlsx"
#$sheetName = "Sheet1"

$objExcel = New-Object -ComObject Excel.Application
$workbook = $objExcel.Workbooks.Open($filePath)
$sheet = $workbook.Worksheets.Item($sheetName)
$objExcel.Visible=$false

$rowMax = ($sheet.UsedRange.Rows).count

Write-Host ("last row is: "+$lastRow)
# mention column name to read from the Excel (here 2nd column is read)
$rowUserID,$colUserID = 1,2

for ($i=1; $i -le $rowMax-1; $i++)
{
  $UserID = $sheet.Cells.Item($rowUserID+$i,$colUserID).text
  if ($UserID)
   {    
     $loginName="";  
     #$authProviderName ="";
     #$authFormat = "i:0#.w";
   
     if(!$authProviderName)
      {
         # authProviderName is empty value
         $loginName =   $authFormat+"|"+$UserID;        
       }
     else
     {
       $loginName =   $authFormat+"|"+$authProviderName+"|"+$UserID;
     }

     Write-Host ("UserID is: "+$loginName)

     $spsite = new-object Microsoft.SharePoint.SPSite($siteUrl);

     $web = $spsite.openweb()    

     $claim = New-SPClaimsPrincipal -Identity $UserID -IdentityType WindowsSamAccountName

     $user=$web.EnsureUser($claim.ToEncodedString());
   
     #$user=$web.EnsureUser($UserID);

     Write-Host ("valid user is: "+$user)  
   }
}

$objExcel.quit()

Monday, June 27, 2016

content type hub in share point 2013

Procedure to work with content type hub:

1.      Create a web application

2.       Create root site collection for the new web application, I choose developer template but it work for any template.

3.       Create consumer site collection for checking the content type is received or not.

4.       Activate the “Content type syndication Hub” of the site collection. Go to site settings -> Site Collection Administrator-> site collection features

5.       Create Managed Meta data service (MMS).
a.       Go to Central Administration, click the Application Management, under Service Applications, and click the Manage Service Applications and click on new and select Managed metadata service and enter required fields and give subscriber site collection url.
b.       Click on the Managed Metadata service. Make sure there is not error and Verify the properties of the Managed metadata service are entered properly especially Content Type Hub URL.

6.       Now, go to our content type hub site [which created in first step],
a.       Go to Site Actions and then Site Settings. Under Galleries click on Site Content Types, you will find default Content Type Available.
b.       Create a new content type and add few columns and click on manage content type publishing and Check the Publish Radio button and say OK.

7.       Now go to consumer site collection for checking the content type is received or not.
a.       Go to Site Actions and then Site Settings. Under Galleries click on Site Content Types
Here you can observe the recently created content type, if content type is not there run the timer services from the central admin i.e. Content Type Hub and Content Type Subscriber.


8.       Add one new column to content type in subscriber site and republish the content type, if you are not able to see the new column in consumer site collection content type then run the two services: Go to central admin ->monitoring -> timer jobs ->Review job definitions, run the two services  Content Type Hub   and  Content Type Subscriber 

Friday, June 24, 2016

A network-related or instance-specific error occurred while establishing a connection to SQL Server.

Issue:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - No connection could be made because the target machine actively refused it.)

Solution: Start --> SQL Service as follows



Tuesday, May 24, 2016

Get Sharepoint List Items using SP Service


Below code copy and past into script Editor webpart and check

<script type="text/javascript" src="../SiteAssets/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="../SiteAssets/jquery.SPServices-0.7.2.min.js"></scrip>

<script type="text/javascript">
//this is where the script starts after the page is loaded
$(document).ready(function() {

    GetSpeakers();

});

function GetSpeakers()
{
    //The Web Service method we are calling, to read list items we use 'GetListItems'
    var method = "GetListItems";
       
    //The display name of the list we are reading data from
    var list = "Employee";

    //We need to identify the fields we want to return. In this instance, we want the Name (Title),
    //Blog, and Picture fields from the Speakers list. You can see here that we are using the internal field names.
    //The display name field for the Speaker's name is "Name" and the internal name is "Title". You can see it can
    //quickly become confusing if your Display Names are completely differnt from your internal names.
    //For whatever list you want to read from, be sure to specify the fields you want returned.
    var fieldsToRead =     "<ViewFields>" +
                            "<FieldRef Name='Title' />" +
                            "<FieldRef Name='Name' />" +
                            "<FieldRef Name='Description' />" +
                            "<FieldRef Name='DOB' />" +
                            "<FieldRef Name='isActive' />" +
                        "</ViewFields>";
                           
    //this is that wonderful CAML query I was talking about earlier. This simple query returns
    //ALL rows by saying "give me all the rows where the ID field is not equal to 0". I then
    //tell the query to sort the rows by the Title field. FYI: a blank query ALSO returns
    //all rows, but I like to use the below query because it helps me know that I MEANT to
    //return all the rows and didn't just forget to write a query :)
    var query = "<Query>" +
                    "<Where>" +
                        "<Neq>" +
                            "<FieldRef Name='ID'/><Value Type='Number'>0</Value>" +
                        "</Neq>" +
                    "</Where>" +
                    "<OrderBy>" +
                        "<FieldRef Name='Title'/>" +
                    "</OrderBy>" +
                "</Query>";

    //Here is our SPServices Call where we pass in the variables that we set above
    $().SPServices({
        operation: method,
        async: false,  //if you set this to true, you may get faster performance, but your order may not be accurate.
        listName: list,
        CAMLViewFields: fieldsToRead,
        CAMLQuery: query,
        //this basically means "do the following code when the call is complete"
        completefunc: function (xData, Status) {
            //this code iterates through every row of data returned from the web service call
            $(xData.responseXML).SPFilterNode("z:row").each(function() {
                //here is where we are reading the field values and putting them in JavaScript variables
                //notice that when we read a field value there is an "ows_" in front of the internal field name.
                //this is a SharePoint Web Service quirk that you need to keep in mind.
                //so to read a field it is ALWAYS $(this).attr("ows_");
                           
                //get the title field (Speaker's Name)
                var Title = ($(this).attr("ows_Title"));
                           
                //get the blog url, SharePoint stores a url in the form of
                //We only want the . To accomplish this we use the javascript "split" function
                //which will turn into an array where the first element [0]
                //is the url.   Catch all that? if you didn't this is another reason you should be
                //a developer if you are writing JavaScript and jQuery :)
                var Name = ($(this).attr("ows_Name"));
                           
                //same thing as the blog, a picture is stored as
                var Description = ($(this).attr("ows_Description"));

                var DOB = ($(this).attr("ows_DOB"));

                var isActive = ($(this).attr("ows_isActive"));
                if(isActive)
                    isActive="Yes";
                else
                    isActive="No";
                
               // alert("Title: "+Title+"Name: "+Name+"Description:"+Description+"DOB:"+DOB+"is Active"+isActive);
                //call a function to add the data from the row to a table on the screen
                var liHtml = "
  • Name: " + Name +"
    Description: " + Description+"
    DOB: "+DOB+"
    Is active: "+isActive+"
  • "; 
                    $("#ulTasks").append(liHtml);
                               
                });               
            }
        });

    }

    // very simple function that adds a row to a table with the id of "speakerTable"
    // for every row of data returned from our SPServices call.
    // Each row of the table will display the picture of the speaker and
    // below the speaker's picture will be their name that is a hyperlink
    // to the speaker's blog.


    &lt/script>


    <ul id="ulTasks"/&gt




    Get SP List items using javascript object model

    Now we will go through how to get the List Items from SharePoint List using JavaScript Client Object model.


    One restriction in the JavaScript Client Object model is we can’t access the data from different site collections and it can run only in SharePoint environment.
    JavaScript Client Object model gives better performance to the Users since it makes only asynchronous calls to the Server side and retrieves data. It also loads only the requested data and not more that (ie. It retrieves only the Requested content from the server and it doesn’t load all the properties of the object)
    Below code snippet defines the retrieval of list items from SharePoint List using JavaScript model. (Check the inner comments for more details) 
    Below code past into Script Editor webpart and check 
    <script type="text/javascript"/>

    /*Below line will make sure your JavaScript method will be called only after the SP.js file loaded at the client side*/
    ExecuteOrDelayUntilScriptLoaded(QueryFollowUrl, "sp.js");

    function QueryFollowUrl()
    {
        //Gets the Client context of the Web
        var context = new SP.ClientContext.get_current();
        /*if your list exists in the subsite uncomment the below line and remove the above declaration*/
        //var context = new SP.ClientContext(‘/siteurl’);
        var web = context.get_web();

        //Change the List Name with yours
        this.list = web.get_lists().getByTitle('Employee');
           
        var query = SP.CamlQuery.createAllItemsQuery();
          
        listItems = this.list.getItems(query);

        context.load(list); 

        /*Now mention all the required filed internal name, since data from these fields only will be retrieved*/
        context.load(listItems, 'Include(Title,Name,Description,DOB,isActive)');
        //Makes asynchronous call to the Server, which will return the JSON objects
        context.executeQueryAsync(Function.createDelegate(this, this.successFollow), Function.createDelegate(this, this.failedFollow));
        return false;
    }

    //you can get the Error details if your Execution fails using get_message() method
    function failedFollow(sender, args)
    {
        var errorMsg = args.get_message();
    }
    /*Upon successful execution, Success delegate method will be called and all the requested objects will the loaded with contents*/
    function successFollow(sender, args)
    {
        var ListEnumerator = this.listItems.getEnumerator();

        while (ListEnumerator.moveNext())
        {
            var collection = ListEnumerator.get_current();

            /*Using get_item method you can pass the Field Internal name mentioned earlier and get the data in that respective column, if you try to use any other column other than we mentioned earlier, it will throw you error.*/

            var Title = collection.get_item('Title');
            var Name = collection.get_item('Name');
            var Description = collection.get_item('Description');
            var DOB = collection.get_item('DOB');
            var isActive = collection.get_item('isActive');
            //your code here
            var liHtml = "
  • Name: " + Name +"
    Description: " + Description+"
    DOB: "+DOB+"
    Is active: "+isActive+"
  • "; 
            $("#ulTasks").append(liHtml);

        }
    }

    </script&gt

    <!-- table where our speaker rows will go --&gt

    Friday, May 20, 2016

    Recursively walking through a directory tree and listing file names

     
     
    public partial class MainWindow : Window
    {
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            string sourcePath = @"C:\MasterPageArtifacts\";            
    
            static void DirSearch(string sourcePath)
            {
                try
                {
                    foreach (string d in Directory.GetDirectories(sourcePath))
                    {
                        foreach (string f in Directory.GetFiles(d))
                        {
                            listBox1.Items.Add(f);
                        }
                        DirSearch(d);
                    }
                }                      
                catch (Exception ex)
                {
                    listBox1.Items.Add(ex.Message);
                }
            }
        }
    }

    Wednesday, April 20, 2016

    Read xml fille using LINQ Query

    Xml file: DomainList.xml

    <?xml version="1.0" encoding="utf-8"?>
    <DomainList>
      <DomainName name="https://google.com"/>
      <DomainName name="https://gmail.com"/>
      <DomainName name="fonts.googleapis.com"/>
      <DomainName name="fonts.gstatic.com"/>
    </DomainList>

    C# Code: below code check redirecting url contains in the xml file or Not

       Uri sReturnUrl = new Uri(ReturnUrl);
                XElement main = XElement.Load(HttpContext.Current.Server.MapPath("~/ExcelTemplates/DomainList.xml"));

                var query = (from param in main.Descendants("DomainName")
                             where ((string)param.Attribute("name")).Contains(sReturnUrl.Host)
                             select new
                             {
                                 code = (string)param.Attribute("name")
                             }).FirstOrDefault();

    Validate XSS reflection attacking page URL

    Url:
    https://test.com/Support/Employee/AllItems.aspx/?--%3E%3C/script%3E%3Cscript%3Ealert(235213)%3C/script%3E

    In the above url it shows alert bydefault
    Solution for this:
    <script type="text/javascript">
           var pageUrl = window.location.href;
           var htmlTags = ["script", "style", "img", "font"];
           for (i = 0; i < htmlTags.length; i++) {
               var tagName = htmlTags[i].toString();
               if (pageUrl.indexOf(tagName) > -1) {
                   window.location.href = pageUrl.split("?")[0];            
               }
           }
     </script>

    the above code remove alert.