152 lines
7.2 KiB
C#
152 lines
7.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using CoverityWebService.AdministrationService;
|
|
using CoverityWebService.ConfigurationService;
|
|
using CoverityWebService.DefectService;
|
|
using WebServices20.BindingExtenions;
|
|
using componentIdDataObj = CoverityWebService.ConfigurationService.componentIdDataObj;
|
|
using groupIdDataObj = CoverityWebService.ConfigurationService.groupIdDataObj;
|
|
using pageSpecDataObj = CoverityWebService.AdministrationService.pageSpecDataObj;
|
|
|
|
namespace CoverityWebService
|
|
{
|
|
public class CoverityWebServices
|
|
{
|
|
protected readonly AdministrationServiceClient _adminclient;
|
|
protected readonly DefectServiceClient _defectclient;
|
|
protected readonly ConfigurationServiceClient _configclient;
|
|
|
|
public CoverityWebServices(string username, string password, string url)
|
|
{
|
|
var binding = new ClearUsernameBinding();
|
|
binding.SetMessageVersion(System.ServiceModel.Channels.MessageVersion.Soap11);
|
|
|
|
_adminclient = new AdministrationServiceClient(binding, new System.ServiceModel.EndpointAddress(url + "/ws/v3/administrationservice"));
|
|
|
|
_defectclient = new DefectServiceClient(binding, new System.ServiceModel.EndpointAddress(url + "/ws/v3/defectservice"));
|
|
|
|
_configclient = new ConfigurationServiceClient(binding, new System.ServiceModel.EndpointAddress(url + "/ws/v3/configurationservice"));
|
|
|
|
|
|
// ReSharper disable PossibleNullReferenceException
|
|
_adminclient.ClientCredentials.UserName.UserName = username;
|
|
_adminclient.ClientCredentials.UserName.Password = password;
|
|
|
|
_defectclient.ClientCredentials.UserName.UserName = username;
|
|
_defectclient.ClientCredentials.UserName.Password = password;
|
|
|
|
|
|
_configclient.ClientCredentials.UserName.UserName = username;
|
|
_configclient.ClientCredentials.UserName.Password = password;
|
|
// ReSharper restore PossibleNullReferenceException
|
|
}
|
|
|
|
public IEnumerable<string> GetProjects()
|
|
{
|
|
var projects = _configclient.getProjects(new projectFilterSpecDataObj());
|
|
return projects.Select(project => project.id.name).ToList();
|
|
}
|
|
|
|
public IEnumerable<KeyValuePair<string, IEnumerable<string>>> GetComponentMaps()
|
|
{
|
|
var componentmapfilter = new componentMapFilterSpecDataObj {namePattern = "*"};
|
|
var componentmaps = _configclient.getComponentMaps(componentmapfilter);
|
|
return componentmaps.Select(componentmap => new KeyValuePair<string, IEnumerable<string>>(componentmap.componentMapId.name, componentmap.components.Select(component => component.componentId.name))).ToList();
|
|
}
|
|
|
|
public IEnumerable<KeyValuePair<string, IEnumerable<string>>> GetUserGroups()
|
|
{
|
|
var groups = new List<KeyValuePair<string, IEnumerable<string>>>();
|
|
var page = new pageSpecDataObj {pageSize = 100};
|
|
foreach (var group in _adminclient.getAllGroups(page).groups.Where(group => group != null))
|
|
{
|
|
var users = _adminclient.getUsersForGroup(group.name);
|
|
if (users == null)
|
|
continue;
|
|
groups.Add(new KeyValuePair<string, IEnumerable<string>>(group.name.name, users.Select(user => string.Format("{0} {1}", user.givenName, user.familyName)).ToList()));
|
|
}
|
|
return groups;
|
|
}
|
|
|
|
public void CreateComponentMap(string componentmap)
|
|
{
|
|
var componentmapfilter = new componentMapFilterSpecDataObj { namePattern = componentmap };
|
|
var componentmaps = _configclient.getComponentMaps(componentmapfilter);
|
|
if (componentmaps != null && componentmaps.Length > 0)
|
|
{
|
|
Console.Error.WriteLine(string.Format("Create componentmap: {0} already exists!", componentmap));
|
|
return;
|
|
}
|
|
|
|
_configclient.createComponentMap(new componentMapSpecDataObj { componentMapName = componentmap });
|
|
Console.WriteLine(string.Format("Componentmap: {0} created succesfully!", componentmap));
|
|
}
|
|
|
|
public void CreateComponent(string componentmap, string component, string pattern)
|
|
{
|
|
var componentmapfilter = new componentMapFilterSpecDataObj {namePattern = componentmap};
|
|
var componentmaps = _configclient.getComponentMaps(componentmapfilter);
|
|
if (componentmaps == null || componentmaps.Length != 1)
|
|
{
|
|
Console.Error.WriteLine(string.Format("Create component: can't find componentmap: {0}", componentmap));
|
|
return;
|
|
}
|
|
|
|
component = string.Format("{0}.{1}", componentmap, component);
|
|
|
|
// add component
|
|
var components = componentmaps[0].components.ToList();
|
|
if (components.Select(c => c.componentId.name).Where(c => c == component).Any())
|
|
{
|
|
Console.Error.WriteLine(string.Format("Create component: {0} already exists!", componentmap));
|
|
return;
|
|
}
|
|
|
|
components.Add(new componentDataObj
|
|
{
|
|
componentId = new componentIdDataObj {name = component},
|
|
excludeComponent = false,
|
|
groupPermissions = new[] {new groupPermissionDataObj {groupId = new groupIdDataObj {name = "Users"}, accessAllowed = true}}
|
|
});
|
|
|
|
// add file rules
|
|
var componentmaprules = componentmaps[0].componentPathRules == null ? new List<componentPathRuleDataObj>() : componentmaps[0].componentPathRules.ToList();
|
|
componentmaprules.Add(new componentPathRuleDataObj {componentId = new componentIdDataObj {name = component}, pathPattern = pattern});
|
|
_configclient.updateComponentMap(componentmaps[0].componentMapId, new componentMapSpecDataObj
|
|
{
|
|
componentMapName = componentmap,
|
|
components = components.ToArray(),
|
|
componentPathRules = componentmaprules.ToArray(),
|
|
});
|
|
Console.WriteLine(string.Format("Component: {0} created succesfully!", component));
|
|
}
|
|
|
|
public void CreateUser(string url, string familyname, string givenname, string email)
|
|
{
|
|
var username = string.Format("{0}{1}", givenname, familyname.Substring(0, 2));
|
|
var existinguser = _adminclient.getUser(username);
|
|
if (existinguser != null)
|
|
{
|
|
Console.Error.WriteLine(string.Format("Create user: {0} already exists!", username));
|
|
return;
|
|
}
|
|
|
|
var user = new userSpecDataObj
|
|
{
|
|
familyName = familyname,
|
|
givenName = givenname,
|
|
email = email,
|
|
local = true,
|
|
username = username,
|
|
password = "coverity",
|
|
disabled = false,
|
|
locked = false,
|
|
groupNames = new[] {new AdministrationService.groupIdDataObj {name = "Users"} }
|
|
};
|
|
_adminclient.createUser(user);
|
|
Console.WriteLine(string.Format("User: {0} created succesfully!", username));
|
|
_adminclient.notify(new[] { username }, "New Account Created", string.Format("A new account has just been created for you. You can sign in at {0}, with the user name ({1}), and password (coverity).", url, username));
|
|
}
|
|
}
|
|
}
|