Package golp gives Go bindings for LPSolve, a Mixed Integer Linear Programming (MILP) solver. For usage examples, see https://github.com/draffensperger/golp#examples. Not all LPSolve functions have bindings. Feel free to open an issue or contact me if you would like more added. One difference from the LPSolve C library, is that the golp columns are always zero-based. The Go code of golp is MIT licensed, but LPSolve itself is licensed under the LGPL. This roughly means that you can include golp in a closed-source project as long as you do not modify LPSolve itself and you use dynamic linking to access LPSolve (and provide a way for someone to link your program to a different version of LPSolve). For the legal details: http://lpsolve.sourceforge.net/5.0/LGPL.htm
Package saml contains a partial implementation of the SAML standard in golang. SAML is a standard for identity federation, i.e. either allowing a third party to authenticate your users or allowing third parties to rely on us to authenticate their users. In SAML parlance an Identity Provider (IDP) is a service that knows how to authenticate users. A Service Provider (SP) is a service that delegates authentication to an IDP. If you are building a service where users log in with someone else's credentials, then you are a Service Provider. This package supports implementing both service providers and identity providers. The core package contains the implementation of SAML. The package samlsp provides helper middleware suitable for use in Service Provider applications. The package samlidp provides a rudimentary IDP service that is useful for testing or as a starting point for other integrations. Version 0.4.0 introduces a few breaking changes to the _samlsp_ package in order to make the package more extensible, and to clean up the interfaces a bit. The default behavior remains the same, but you can now provide interface implementations of _RequestTracker_ (which tracks pending requests), _Session_ (which handles maintaining a session) and _OnError_ which handles reporting errors. Public fields of _samlsp.Middleware_ have changed, so some usages may require adjustment. See [issue 231](https://github.com/crewjam/saml/issues/231) for details. The option to provide an IDP metadata URL has been deprecated. Instead, we recommend that you use the `FetchMetadata()` function, or fetch the metadata yourself and use the new `ParseMetadata()` function, and pass the metadata in _samlsp.Options.IDPMetadata_. Similarly, the _HTTPClient_ field is now deprecated because it was only used for fetching metdata, which is no longer directly implemented. The fields that manage how cookies are set are deprecated as well. To customize how cookies are managed, provide custom implementation of _RequestTracker_ and/or _Session_, perhaps by extending the default implementations. The deprecated fields have not been removed from the Options structure, but will be in future. In particular we have deprecated the following fields in _samlsp.Options_: - `Logger` - This was used to emit errors while validating, which is an anti-pattern. - `IDPMetadataURL` - Instead use `FetchMetadata()` - `HTTPClient` - Instead pass httpClient to FetchMetadata - `CookieMaxAge` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieName` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieDomain` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieDomain` - Instead assign a custom CookieRequestTracker or CookieSessionProvider Let us assume we have a simple web application to protect. We'll modify this application so it uses SAML to authenticate users. ```golang package main import ( ) ``` Each service provider must have an self-signed X.509 key pair established. You can generate your own with something like this: We will use `samlsp.Middleware` to wrap the endpoint we want to protect. Middleware provides both an `http.Handler` to serve the SAML specific URLs and a set of wrappers to require the user to be logged in. We also provide the URL where the service provider can fetch the metadata from the IDP at startup. In our case, we'll use [samltest.id](https://samltest.id/), an identity provider designed for testing. ```golang package main import ( ) ``` Next we'll have to register our service provider with the identity provider to establish trust from the service provider to the IDP. For [samltest.id](https://samltest.id/), you can do something like: Navigate to https://samltest.id/upload.php and upload the file you fetched. Now you should be able to authenticate. The flow should look like this: 1. You browse to `localhost:8000/hello` 1. The middleware redirects you to `https://samltest.id/idp/profile/SAML2/Redirect/SSO` 1. samltest.id prompts you for a username and password. 1. samltest.id returns you an HTML document which contains an HTML form setup to POST to `localhost:8000/saml/acs`. The form is automatically submitted if you have javascript enabled. 1. The local service validates the response, issues a session cookie, and redirects you to the original URL, `localhost:8000/hello`. 1. This time when `localhost:8000/hello` is requested there is a valid session and so the main content is served. Please see `example/idp/` for a substantially complete example of how to use the library and helpers to be an identity provider. The SAML standard is huge and complex with many dark corners and strange, unused features. This package implements the most commonly used subset of these features required to provide a single sign on experience. The package supports at least the subset of SAML known as [interoperable SAML](http://saml2int.org). This package supports the Web SSO profile. Message flows from the service provider to the IDP are supported using the HTTP Redirect binding and the HTTP POST binding. Message flows from the IDP to the service provider are supported via the HTTP POST binding. The package can produce signed SAML assertions, and can validate both signed and encrypted SAML assertions. It does not support signed or encrypted requests. The _RelayState_ parameter allows you to pass user state information across the authentication flow. The most common use for this is to allow a user to request a deep link into your site, be redirected through the SAML login flow, and upon successful completion, be directed to the originally requested link, rather than the root. Unfortunately, _RelayState_ is less useful than it could be. Firstly, it is not authenticated, so anything you supply must be signed to avoid XSS or CSRF. Secondly, it is limited to 80 bytes in length, which precludes signing. (See section 3.6.3.1 of SAMLProfiles.) The SAML specification is a collection of PDFs (sadly): - [SAMLCore](http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf) defines data types. - [SAMLBindings](http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf) defines the details of the HTTP requests in play. - [SAMLProfiles](http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf) describes data flows. - [SAMLConformance](http://docs.oasis-open.org/security/saml/v2.0/saml-conformance-2.0-os.pdf) includes a support matrix for various parts of the protocol. [SAMLtest](https://samltest.id/) is a testing ground for SAML service and identity providers. Please do not report security issues in the issue tracker. Rather, please contact me directly at ross@kndr.org ([PGP Key `78B6038B3B9DFB88`](https://keybase.io/crewjam)).
Package invoicing provides the API client, operations, and parameter types for AWS Invoicing. You can use Amazon Web Services Invoice Configuration APIs to programmatically create, update, delete, get, and list invoice units. You can also programmatically fetch the information of the invoice receiver. For example, business legal name, address, and invoicing contacts. You can use Amazon Web Services Invoice Configuration to receive separate Amazon Web Services invoices based your organizational needs. By using Amazon Web Services Invoice Configuration, you can configure invoice units that are groups of Amazon Web Services accounts that represent your business entities, and receive separate invoices for each business entity. You can also assign a unique member or payer account as the invoice receiver for each invoice unit. As you create new accounts within your Organizations using Amazon Web Services Invoice Configuration APIs, you can automate the creation of new invoice units and subsequently automate the addition of new accounts to your invoice units. You can use the following endpoints for Amazon Web Services Invoice Configuration:
Package jsontree selects RFC 9535 JSONPaths from one JSON value into a new value. Given a user profile as a JSON object, execute a JSONTree query that creates a copy of the object that contains only fields named "last" and all "primary" contacts of any type.
Package geoplaces provides the API client, operations, and parameter types for Amazon Location Service Places V2. your applications, offering global coverage with rich, detailed information. Key features include: Forward and reverse geocoding for addresses and coordinates Comprehensive place searches with detailed information, including: Business names and addresses Contact information Hours of operation POI (Points of Interest) categories Food types for restaurants Chain affiliation for relevant businesses Global data coverage with a wide range of POI categories Regular data updates to ensure accuracy and relevance
Package radir implements a large subset of "The OID Directory" -- an EXPERIMENTAL Internet-Draft (I-D) series by Jesse Coretta. The Internet-Drafts (henceforth referred to as "the I-D series") is made up of the following individual drafts: These drafts can be viewed on the IETF Data Tracker site, or via the official OID Directory site and GitHub repositories. At present, the current revisions are set to expire on February 23, 2025. The I-D series, and by necessity this package, is thoroughly EXPERIMENTAL. It is not yet approved by the IETF, and thus should NEVER be used in any capacity beyond proof-of-concept or work-in-progress efforts. This package is an abstract, general-use framework supplement. It will aid in the marshaling and unmarshaling of OID registration and registrant (contact) constructs, whether using a proper go-ldap/v3 Entry instance, or through manual assembly. The package can aid in the bidirectional conversion of certain values, such as "dotNotation" and "dn" values, and offers many other useful features in service to the I-D series mentioned above. Implementations which use this package may be of a server-side or client-side nature, or neither. There is no singular use-case for this package. TLDR; its a nifty toolbox; what you build is what the package serves. As the terms are defined throughout the OID Directory I-D series, this package is absolutely not a complete DUA, DIT or DSA. While it can serve as a valuable component in such constructs, its current state does not allow drop-in functionality of that nature, nor was this intended. For instance, those designing a compliant RA DUA, per the RADUA I-D, are expected to install and utilize the go-ldap/v3 package on their own terms and in service to their particular environment or infrastructure. This is done to maximize compatibility across the many potential use-cases and directory products, as well as to limit potential security vulnerabilities relating to this package itself. This approach also has the secondary effect of making potential integration efforts much simpler and far less disruptive. TLDR; this package works with go-ldap/v3, but it does NOT import it directly. Do it yourself. Thanks to the GetOrSetFunc closure type, this package is supremely extensible. Virtually all Registration and Registrant methods -- such as Registration.SetDN or FirstAuthority.POBoxGetFunc -- allow for closure-based behavioral overrides. This allows limitless control over how values manifest during presentation, as well as how they are written to instances of the aforementioned types. For additional information, see the GetOrSetFunc type documentation, as well as the package examples for all methods which allow input of instances of this type. See also the next section regarding storage space considerations with regards to especially -- and unnecessarily -- large values. TLDR; Control value I/O using a closure signature of "func(...any) (any, error)" (GetOrSetFunc) for any "Set<X>" or "<X>GetFunc" methods. Per Section 2.2.3.4 of the RADUA I-D, this package provides a thread-safe, memory-based Cache facility for use by a client. The primary purpose of this facility is to cache, or store temporarily, all *Registration and *Registrant instances that have either been crafted manually, or marshaled by way of a go-ldap/v3 entry instance. While crude, it can help provide considerable I/O savings in terms of LDAP search requests, which may or may not be transmitted over-the-wire. Lifespans of cached entries is directed by manual specification (e.g.: by the end user), or by way of a literal or collectively-inherited TTL obtained within the RA DIT or via the appropriate *DITProfile instance as a global fallback. See the aforementioned RA DUA section for details regarding TTL precedence and other mechanics. Use of this facility is not required to comply with the aforementioned specification. Adopters may freely supplant the package-provided Cache with a caching system of their own choosing or design. TLDR; Caching eligible instances reduces network (LDAP) I/O at the expense of memory. You can use the Cache type, or a third-party one, or abstain from caching entirely. The I-D series offers two (2) directory models in terms of Registration structure and layout, each of which are implemented in this package. The two dimensional model is discussed in Section 3.1.2 of the RADIT I-D. The three dimensional model is discussed in Section 3.1.3 of the RADIT I-D. In most scenarios, use of the three dimensional model is the preferred strategy. TLDR; Use the ThreeDimensional directory model. The I-D series offers two (2) registrant entry policies, each of which are implemented in this package. Dedicated registrants are covered in Section 3.2.1.1.1 of the RADIT I-D. Combined registrants are briefly covered in Section 3.2.1.1.2 of the RADIT I-D. In most scenarios, use of dedicated registrants is the preferred strategy. TLDR; Use *Registrant instances instead of "combining" registrant content with *Registration instances (in-line). As stated in Section 3.2.1.1.1 of the RADIT I-D, it is possible to forego use of the draft-based authority types, such as "sponsorCommonName", in favor of the traditional "cn" type. This logic applies may extend to either "Combined" or "Dedicated" Registrant Policies. See the DITProfile.UseAltAuthorityTypes method for a means of enabling this behavior. Note there are caveats with either standpoint, and thus the reader is advised to review the aforementioned section of the draft to ensure they understand the ramifications of their decision. Please also note it is inadvisable to change this value without a good reason, and inappropriate alteration will result in degraded client behavior and likely a deviation from the established content policies enforced within the directory. You have been warned. See the FirstAuthorityAltAttributeTypes, CurrentAuthorityAltAttributeTypes and SponsorAltAttributeTypes map variables for a complete list of the types that are -- and are not -- subject to the influence of the aforementioned method. TLDR; You may use, for example, "cn" instead of "sponsorCommonName" ... but there are caveats. This package makes conversion (in either direction) between go-ldap/v3 Entry and *Registration or *Registrant instances a breeze! When unmarshaling FROM an instance of go-ldap/v3 Entry TO an instance of *Registration, rather than using the go-ldap/v3 Entry.Unmarshal method directly, simply feed the method to *Registration.Marshal to achieve the same effect: This is necessary because the go-ldap/v3 Entry.Unmarshal method only supports a limited number of struct field value types. To get around this issue, radir simply performs independent marshaling upon any individual struct components within the destination instance (*Registration). In other words, if there are four fields that contain struct values, each of these fields is marshaled independently. This ensures that all of the needed attribute values are collected from the source go-ldap/v3 Entry instance. When unmarshaling FROM an instance of *Registration (or *Registrant) TO an instance of go-ldap/v3 Entry, simply use the Registration.Unmarshal (or Registrant.Unmarshal) method. Feed the output to the go-ldap/v3 NewEntry function: TLDR; Excellent marshal and unmarshal features. And while go-ldap/v3 Entry.Unmarshal is very limited, we have a most suitable workaround: don't "use" it, let us handle it for you. OIDs are virtually infinite in size. Large pools of sibling registrations can be exceedingly difficult to navigate manually; the sequence of number forms may not be contiguous, and there is no guarantee the entries which bear these values will be ordered correctly in directory search results. To that end, the "spatialContext" AUXILIARY class defined within the I-D series is implemented within this package as the *Spatial struct type. Use of this type can help mitigate some of this tedium by allowing any given registration entry to bear direct DN-based references to other spatially-relevant registrations. Specifically, this produces an abstraction of directional movement in the following contexts: Non-collective *Spatial attribute types may be set manually, or they may be present within entries marshaled into Registration instances as literal or collective values. Collective values are not meant for manual assignment, thus no related "set" methods exist in that regard. Like virtually all other methods in this package, the relevant *Spatial methods allow for GetOrSetFunc closure use, thereby letting the user enhance the behavior of instances of this type in a variety of ways: TLDR; RA DIT navigation with a "đšī¸" duct-taped on to it.
* MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) * MetalSoft REST API * * MetalSoft REST API documentation * * API version: 2.0 * Contact: support@metalsoft.io * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
Package micro is a pluggable framework for microservices
Package micro is a pluggable framework for microservices
Package apiserver_runtime contains libraries building Kubernetes style apiservers. Note that this package is experimental and a work in progress. Do not rely on this project for production without first contacting the maintainers at kubebuilder@googlegroups.com.
Package saml contains a partial implementation of the SAML standard in golang. SAML is a standard for identity federation, i.e. either allowing a third party to authenticate your users or allowing third parties to rely on us to authenticate their users. In SAML parlance an Identity Provider (IDP) is a service that knows how to authenticate users. A Service Provider (SP) is a service that delegates authentication to an IDP. If you are building a service where users log in with someone else's credentials, then you are a Service Provider. This package supports implementing both service providers and identity providers. The core package contains the implementation of SAML. The package samlsp provides helper middleware suitable for use in Service Provider applications. The package samlidp provides a rudimentary IDP service that is useful for testing or as a starting point for other integrations. Version 0.4.0 introduces a few breaking changes to the _samlsp_ package in order to make the package more extensible, and to clean up the interfaces a bit. The default behavior remains the same, but you can now provide interface implementations of _RequestTracker_ (which tracks pending requests), _Session_ (which handles maintaining a session) and _OnError_ which handles reporting errors. Public fields of _samlsp.Middleware_ have changed, so some usages may require adjustment. See [issue 231](https://github.com/crewjam/saml/issues/231) for details. The option to provide an IDP metadata URL has been deprecated. Instead, we recommend that you use the `FetchMetadata()` function, or fetch the metadata yourself and use the new `ParseMetadata()` function, and pass the metadata in _samlsp.Options.IDPMetadata_. Similarly, the _HTTPClient_ field is now deprecated because it was only used for fetching metdata, which is no longer directly implemented. The fields that manage how cookies are set are deprecated as well. To customize how cookies are managed, provide custom implementation of _RequestTracker_ and/or _Session_, perhaps by extending the default implementations. The deprecated fields have not been removed from the Options structure, but will be in future. In particular we have deprecated the following fields in _samlsp.Options_: - `Logger` - This was used to emit errors while validating, which is an anti-pattern. - `IDPMetadataURL` - Instead use `FetchMetadata()` - `HTTPClient` - Instead pass httpClient to FetchMetadata - `CookieMaxAge` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieName` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieDomain` - Instead assign a custom CookieRequestTracker or CookieSessionProvider - `CookieDomain` - Instead assign a custom CookieRequestTracker or CookieSessionProvider Let us assume we have a simple web application to protect. We'll modify this application so it uses SAML to authenticate users. ```golang package main import ( ) ``` Each service provider must have an self-signed X.509 key pair established. You can generate your own with something like this: We will use `samlsp.Middleware` to wrap the endpoint we want to protect. Middleware provides both an `http.Handler` to serve the SAML specific URLs and a set of wrappers to require the user to be logged in. We also provide the URL where the service provider can fetch the metadata from the IDP at startup. In our case, we'll use [samltest.id](https://samltest.id/), an identity provider designed for testing. ```golang package main import ( ) ``` Next we'll have to register our service provider with the identity provider to establish trust from the service provider to the IDP. For [samltest.id](https://samltest.id/), you can do something like: Navigate to https://samltest.id/upload.php and upload the file you fetched. Now you should be able to authenticate. The flow should look like this: 1. You browse to `localhost:8000/hello` 1. The middleware redirects you to `https://samltest.id/idp/profile/SAML2/Redirect/SSO` 1. samltest.id prompts you for a username and password. 1. samltest.id returns you an HTML document which contains an HTML form setup to POST to `localhost:8000/saml/acs`. The form is automatically submitted if you have javascript enabled. 1. The local service validates the response, issues a session cookie, and redirects you to the original URL, `localhost:8000/hello`. 1. This time when `localhost:8000/hello` is requested there is a valid session and so the main content is served. Please see `example/idp/` for a substantially complete example of how to use the library and helpers to be an identity provider. The SAML standard is huge and complex with many dark corners and strange, unused features. This package implements the most commonly used subset of these features required to provide a single sign on experience. The package supports at least the subset of SAML known as [interoperable SAML](http://saml2int.org). This package supports the Web SSO profile. Message flows from the service provider to the IDP are supported using the HTTP Redirect binding and the HTTP POST binding. Message flows from the IDP to the service provider are supported via the HTTP POST binding. The package can produce signed SAML assertions, and can validate both signed and encrypted SAML assertions. It does not support signed or encrypted requests. The _RelayState_ parameter allows you to pass user state information across the authentication flow. The most common use for this is to allow a user to request a deep link into your site, be redirected through the SAML login flow, and upon successful completion, be directed to the originally requested link, rather than the root. Unfortunately, _RelayState_ is less useful than it could be. Firstly, it is not authenticated, so anything you supply must be signed to avoid XSS or CSRF. Secondly, it is limited to 80 bytes in length, which precludes signing. (See section 3.6.3.1 of SAMLProfiles.) The SAML specification is a collection of PDFs (sadly): - [SAMLCore](http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf) defines data types. - [SAMLBindings](http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf) defines the details of the HTTP requests in play. - [SAMLProfiles](http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf) describes data flows. - [SAMLConformance](http://docs.oasis-open.org/security/saml/v2.0/saml-conformance-2.0-os.pdf) includes a support matrix for various parts of the protocol. [SAMLtest](https://samltest.id/) is a testing ground for SAML service and identity providers. Please do not report security issues in the issue tracker. Rather, please contact me directly at ross@kndr.org ([PGP Key `78B6038B3B9DFB88`](https://keybase.io/crewjam)).
Package dsp provides processors that can be chained together to build digital signal processing systems. Digital signals are represented as sequence of numbers where each number is associated with a disctrete time. Discrete time is represented as a squence of integers that can correspond to physycal time sampled at fixed time intervals. Sequences are divided into equally-spaced frames such that each frame corresponds to a fixed number of samples. Processors can return values for a frame index or a global value for the entire sequence. To compute frame-level values, the processor must implement the Framer interface which defines the "Get(int) (Value, error)" method. To return a global value the processor must implement the OneValuer interface which defines the "Get() (Value, error.)" method. The application is a graph of processors where the input of a processor is read from the output of another processor. Processors exchange values of interface type Value. To perform operations, the Processors must agree on the underlying types of Value. Values are lazily computed when they are requested by a consumer. That is, when a value is requested for one of the processor's outputs, the computation chain propagates all the way to the source. To achieve high performance, computed frames are cached by the processors. If the cache capacity is big enough, values are only computed once. (For example, to do a moving average, the same input frames may be requested multiple times.) For a comrehensive example see examples/speech2/main.go. Convention: Input values should be treated as read-only because they may be shared with other processors. CONTACT: Leo Neumeyer leo@akualab.com