using System; using System.Net.Http.Headers; using Octokit.Internal; namespace Octokit { /// /// A Client for the GitHub API v3. You can read more about the api here: http://developer.github.com. /// public class GitHubClient : IGitHubClient { public static readonly Uri GitHubApiUrl = new Uri("https://api.github.com/"); /// /// Create a new instance of the GitHub API v3 client pointing to /// https://api.github.com/ /// /// /// The name (and optionally version) of the product using this library. This is sent to the server as part of /// the user agent for analytics purposes. /// public GitHubClient(ProductHeaderValue productInformation) : this(new Connection(productInformation)) { } /// /// Create a new instance of the GitHub API v3 client pointing to /// https://api.github.com/ /// /// /// The name (and optionally version) of the product using this library. This is sent to the server as part of /// the user agent for analytics purposes. /// /// Provides credentials to the client when making requests. public GitHubClient(ProductHeaderValue productInformation, ICredentialStore credentialStore) : this(new Connection(productInformation, credentialStore)) { } /// /// Create a new instance of the GitHub API v3 client pointing to the specified baseAddress. /// /// /// The name (and optionally version) of the product using this library. This is sent to the server as part of /// the user agent for analytics purposes. /// /// /// The address to point this client to. Typically used for GitHub Enterprise /// instances public GitHubClient(ProductHeaderValue productInformation, Uri baseAddress) : this(new Connection(productInformation, FixUpBaseUri(baseAddress))) { } /// /// Create a new instance of the GitHub API v3 client pointing to the specified baseAddress. /// /// /// The name (and optionally version) of the product using this library. This is sent to the server as part of /// the user agent for analytics purposes. /// /// Provides credentials to the client when making requests. /// /// The address to point this client to. Typically used for GitHub Enterprise /// instances public GitHubClient(ProductHeaderValue productInformation, ICredentialStore credentialStore, Uri baseAddress) : this(new Connection(productInformation, FixUpBaseUri(baseAddress), credentialStore)) { } /// /// Create a new instance of the GitHub API v3 client using the specified connection. /// /// The underlying used to make requests. public GitHubClient(IConnection connection) { Ensure.ArgumentNotNull(connection, "connection"); Connection = connection; var apiConnection = new ApiConnection(connection); Authorization = new AuthorizationsClient(apiConnection); Issue = new IssuesClient(apiConnection); Miscellaneous = new MiscellaneousClient(connection); Notification = new NotificationsClient(apiConnection); Organization = new OrganizationsClient(apiConnection); Repository = new RepositoriesClient(apiConnection); Release = new ReleasesClient(apiConnection); User = new UsersClient(apiConnection); SshKey = new SshKeysClient(apiConnection); GitDatabase = new GitDatabaseClient(apiConnection); } /// /// Convenience property for getting and setting credentials. /// /// /// You can use this property if you only have a single hard-coded credential. Otherwise, pass in an /// to the constructor. /// Setting this property will change the to use /// the default with just these credentials. /// public Credentials Credentials { get { return Connection.Credentials; } // Note this is for convenience. We probably shouldn't allow this to be mutable. set { Ensure.ArgumentNotNull(value, "value"); Connection.Credentials = value; } } /// /// The base address of the GitHub API. This defaults to https://api.github.com, /// but you can change it if needed (to talk to a GitHub:Enterprise server for instance). /// public Uri BaseAddress { get { return Connection.BaseAddress; } } /// /// Provides a client connection to make rest requests to HTTP endpoints. /// public IConnection Connection { get; private set; } public IAuthorizationsClient Authorization { get; private set; } public IIssuesClient Issue { get; private set; } public IMiscellaneousClient Miscellaneous { get; private set; } public IOrganizationsClient Organization { get; private set; } public IRepositoriesClient Repository { get; private set; } public IReleasesClient Release { get; private set; } public ISshKeysClient SshKey { get; private set; } public IUsersClient User { get; private set; } public INotificationsClient Notification { get; private set; } public IGitDatabaseClient GitDatabase { get; private set; } static Uri FixUpBaseUri(Uri uri) { Ensure.ArgumentNotNull(uri, "uri"); if (uri.Host.Equals("github.com") || uri.Host.Equals("api.github.com")) { return GitHubApiUrl; } return new Uri(uri, new Uri("/api/v3/", UriKind.Relative)); } } }