DOCS: Migrated documentation website to Gitbook (#1809)
1
.gitbook.yaml
Normal file
|
@ -0,0 +1 @@
|
|||
root: ./documentation/
|
|
@ -104,7 +104,7 @@ Running `dnscontrol preview` will talk to the providers (here name.com as regist
|
|||
|
||||
Running `dnscontrol push` will make those changes with the provider and my dns records will be correctly updated.
|
||||
|
||||
See [Getting Started](https://stackexchange.github.io/dnscontrol/getting-started) page on documentation site.
|
||||
See [Getting Started](https://docs.dnscontrol.org/getting-started/getting-started) page on documentation site.
|
||||
|
||||
## Benefits
|
||||
|
||||
|
@ -141,7 +141,7 @@ See [Getting Started](https://stackexchange.github.io/dnscontrol/getting-started
|
|||
|
||||
## Installation
|
||||
|
||||
DNSControl can be installed via packages for macOS, Linux and Windows, or from source code. See the [official instructions](https://stackexchange.github.io/dnscontrol/getting-started#1-install-the-software).
|
||||
DNSControl can be installed via packages for macOS, Linux and Windows, or from source code. See the [official instructions](https://docs.dnscontrol.org/getting-started/getting-started#1-install-the-software).
|
||||
|
||||
## Via GitHub Actions (GHA)
|
||||
|
||||
|
@ -151,10 +151,10 @@ See [dnscontrol-action](https://github.com/koenrh/dnscontrol-action) or [gacts/i
|
|||
|
||||
- **Call for new volunteer maintainers for NAMECHEAP, NAMEDOTCOM, and SOFTLAYER.** These providers have no maintainer. Maintainers respond to PRs and fix bugs in a timely manner, and try to stay on top of protocol changes.
|
||||
- **ACME/Let's Encrypt support is frozen and will be removed after December 31, 2022.** The `get-certs` command (renews certs via Let's Encrypt) has no maintainer. There are other projects that do a better job. If you don't use this feature, please do not start. If you do use this feature, please plan on migrating to something else. See discussion in [issues/1400](https://github.com/StackExchange/dnscontrol/issues/1400)
|
||||
- **get-zones syntax changes in v3.16** Starting in v3.16, the command line arguments for `dnscontrol get-zones` changes. For backwards compatibility change `provider` to `-`. See documentation for details.
|
||||
- **get-zones syntax changes in v3.16** Starting in [v3.16](v316.md), the command line arguments for `dnscontrol get-zones` changes. For backwards compatibility change `provider` to `-`. See documentation for details.
|
||||
|
||||
## More info at our website
|
||||
|
||||
The website: [https://stackexchange.github.io/dnscontrol/](https://stackexchange.github.io/dnscontrol/)
|
||||
|
||||
The getting started guide: [https://stackexchange.github.io/dnscontrol/getting-started](https://stackexchange.github.io/dnscontrol/getting-started)
|
||||
The getting started guide: [https://docs.dnscontrol.org/getting-started/getting-started](https://docs.dnscontrol.org/getting-started/getting-started)
|
||||
|
|
|
@ -1,167 +1,281 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"html/template"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
"fmt"
|
||||
"github.com/StackExchange/dnscontrol/v3/providers"
|
||||
_ "github.com/StackExchange/dnscontrol/v3/providers/_all"
|
||||
"github.com/fbiville/markdown-table-formatter/pkg/markdown"
|
||||
"sort"
|
||||
)
|
||||
|
||||
func generateFeatureMatrix() error {
|
||||
allNames := map[string]bool{}
|
||||
for n := range providers.RegistrarTypes {
|
||||
allNames[n] = true
|
||||
matrix := matrixData()
|
||||
markdownTable, err := markdownTable(matrix)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for n := range providers.DNSProviderTypes {
|
||||
allNames[n] = true
|
||||
|
||||
fmt.Print(markdownTable)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func markdownTable(matrix *FeatureMatrix) (string, error) {
|
||||
var tableHeaders []string
|
||||
tableHeaders = append(tableHeaders, "Provider name")
|
||||
for _, featureName := range matrix.Features {
|
||||
tableHeaders = append(tableHeaders, featureName)
|
||||
}
|
||||
providerTypes := []string{}
|
||||
for n := range allNames {
|
||||
providerTypes = append(providerTypes, n)
|
||||
|
||||
var tableData [][]string
|
||||
for _, providerName := range allProviderNames() {
|
||||
featureMap := matrix.Providers[providerName]
|
||||
|
||||
var tableDataRow []string
|
||||
tableDataRow = append(tableDataRow, "`"+providerName+"`")
|
||||
for _, featureName := range matrix.Features {
|
||||
tableDataRow = append(tableDataRow, featureEmoji(featureMap, featureName))
|
||||
}
|
||||
tableData = append(tableData, tableDataRow)
|
||||
}
|
||||
sort.Strings(providerTypes)
|
||||
|
||||
var markdownTable, err = markdown.NewTableFormatterBuilder().
|
||||
Build(tableHeaders...).
|
||||
Format(tableData)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return markdownTable, nil
|
||||
}
|
||||
|
||||
func featureEmoji(
|
||||
featureMap FeatureMap,
|
||||
featureName string,
|
||||
) string {
|
||||
if featureMap[featureName] == nil {
|
||||
return "❔"
|
||||
}
|
||||
|
||||
if featureMap[featureName].HasFeature == true {
|
||||
return "✅"
|
||||
} else if featureMap[featureName].Unimplemented == true {
|
||||
return "❔"
|
||||
}
|
||||
return "❌"
|
||||
}
|
||||
|
||||
func matrixData() *FeatureMatrix {
|
||||
const (
|
||||
OfficialSupport = "Official Support"
|
||||
ProviderDnsProvider = "DNS Provider"
|
||||
ProviderRegistrar = "Registrar"
|
||||
DomainModifierAlias = "ALIAS"
|
||||
DomainModifierDnssec = "AUTODNSSEC"
|
||||
DomainModifierCaa = "CAA"
|
||||
DomainModifierPtr = "PTR"
|
||||
DomainModifierNaptr = "NAPTR"
|
||||
DomainModifierSoa = "SOA"
|
||||
DomainModifierSrv = "SRV"
|
||||
DomainModifierSshfp = "SSHFP"
|
||||
DomainModifierTlsa = "TLSA"
|
||||
DomainModifierDs = "DS"
|
||||
DualHost = "dual host"
|
||||
CreateDomains = "create-domains"
|
||||
NoPurge = "NO_PURGE"
|
||||
GetZones = "get-zones"
|
||||
)
|
||||
|
||||
matrix := &FeatureMatrix{
|
||||
Providers: map[string]FeatureMap{},
|
||||
Features: []FeatureDef{
|
||||
{"Official Support", "This means the provider is actively used at Stack Exchange, bugs are more likely to be fixed, and failing integration tests will block a release. See below for details"},
|
||||
{"DNS Provider", "Can manage and serve DNS zones"},
|
||||
{"Registrar", "The provider has registrar capabilities to set nameservers for zones"},
|
||||
{"ALIAS", "Provider supports some kind of ALIAS, ANAME or flattened CNAME record type"},
|
||||
{"AUTODNSSEC", "Provider can automatically manage DNSSEC"},
|
||||
{"CAA", "Provider can manage CAA records"},
|
||||
{"PTR", "Provider supports adding PTR records for reverse lookup zones"},
|
||||
{"NAPTR", "Provider can manage NAPTR records"},
|
||||
{"SOA", "Provider can manage SOA records"},
|
||||
{"SRV", "Driver has explicitly implemented SRV record management"},
|
||||
{"SSHFP", "Provider can manage SSHFP records"},
|
||||
{"TLSA", "Provider can manage TLSA records"},
|
||||
{"R53_ALIAS", "Provider supports Route 53 limited ALIAS"},
|
||||
{"AZURE_ALIAS", "Provider supports Azure DNS limited ALIAS"},
|
||||
{"DS", "Provider supports adding DS records"},
|
||||
{"AKAMAICDN", "Provider supports adding AKAMAICDN records"},
|
||||
|
||||
{"dual host", "This provider is recommended for use in 'dual hosting' scenarios. Usually this means the provider allows full control over the apex NS records"},
|
||||
{"create-domains", "This means the provider can automatically create domains that do not currently exist on your account. The 'dnscontrol create-domains' command will initialize any missing domains"},
|
||||
{"no_purge", "indicates you can use NO_PURGE macro to prevent deleting records not managed by dnscontrol. A few providers that generate the entire zone from scratch have a problem implementing this."},
|
||||
{"get-zones", "indicates the dnscontrol get-zones subcommand is implemented."},
|
||||
Features: []string{
|
||||
OfficialSupport,
|
||||
ProviderDnsProvider,
|
||||
ProviderRegistrar,
|
||||
DomainModifierAlias,
|
||||
DomainModifierDnssec,
|
||||
DomainModifierCaa,
|
||||
DomainModifierPtr,
|
||||
DomainModifierNaptr,
|
||||
DomainModifierSoa,
|
||||
DomainModifierSrv,
|
||||
DomainModifierSshfp,
|
||||
DomainModifierTlsa,
|
||||
DomainModifierDs,
|
||||
DualHost,
|
||||
CreateDomains,
|
||||
NoPurge,
|
||||
GetZones,
|
||||
},
|
||||
}
|
||||
for _, p := range providerTypes {
|
||||
if p == "NONE" {
|
||||
continue
|
||||
|
||||
for _, providerName := range allProviderNames() {
|
||||
featureMap := FeatureMap{}
|
||||
providerNotes := providers.Notes[providerName]
|
||||
if providerNotes == nil {
|
||||
providerNotes = providers.DocumentationNotes{}
|
||||
}
|
||||
fm := FeatureMap{}
|
||||
notes := providers.Notes[p]
|
||||
if notes == nil {
|
||||
notes = providers.DocumentationNotes{}
|
||||
}
|
||||
setCap := func(name string, cap providers.Capability) {
|
||||
if notes[cap] != nil {
|
||||
fm[name] = notes[cap]
|
||||
|
||||
setCapability := func(
|
||||
featureName string,
|
||||
capability providers.Capability,
|
||||
) {
|
||||
if providerNotes[capability] != nil {
|
||||
featureMap[featureName] = providerNotes[capability]
|
||||
return
|
||||
}
|
||||
fm.SetSimple(name, true, func() bool { return providers.ProviderHasCapability(p, cap) })
|
||||
featureMap.SetSimple(
|
||||
featureName,
|
||||
true,
|
||||
func() bool { return providers.ProviderHasCapability(providerName, capability) },
|
||||
)
|
||||
}
|
||||
setDoc := func(name string, cap providers.Capability, defaultNo bool) {
|
||||
if notes[cap] != nil {
|
||||
fm[name] = notes[cap]
|
||||
|
||||
setDocumentation := func(
|
||||
featureName string,
|
||||
capability providers.Capability,
|
||||
defaultNo bool,
|
||||
) {
|
||||
if providerNotes[capability] != nil {
|
||||
featureMap[featureName] = providerNotes[capability]
|
||||
} else if defaultNo {
|
||||
fm[name] = &providers.DocumentationNote{
|
||||
featureMap[featureName] = &providers.DocumentationNote{
|
||||
HasFeature: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
setDoc("Official Support", providers.DocOfficiallySupported, true)
|
||||
fm.SetSimple("DNS Provider", false, func() bool { return providers.DNSProviderTypes[p].Initializer != nil })
|
||||
fm.SetSimple("Registrar", false, func() bool { return providers.RegistrarTypes[p] != nil })
|
||||
setCap("AKAMAICDN", providers.CanUseAKAMAICDN)
|
||||
setCap("ALIAS", providers.CanUseAlias)
|
||||
setCap("AUTODNSSEC", providers.CanAutoDNSSEC)
|
||||
setCap("AZURE_ALIAS", providers.CanUseAzureAlias)
|
||||
setCap("CAA", providers.CanUseCAA)
|
||||
setCap("DS", providers.CanUseDS)
|
||||
setCap("NAPTR", providers.CanUseNAPTR)
|
||||
setCap("PTR", providers.CanUsePTR)
|
||||
setCap("R53_ALIAS", providers.CanUseRoute53Alias)
|
||||
setCap("SOA", providers.CanUseSOA)
|
||||
setCap("SRV", providers.CanUseSRV)
|
||||
setCap("SSHFP", providers.CanUseSSHFP)
|
||||
setCap("TLSA", providers.CanUseTLSA)
|
||||
setCap("get-zones", providers.CanGetZones)
|
||||
setDoc("create-domains", providers.DocCreateDomains, true)
|
||||
setDoc("dual host", providers.DocDualHost, false)
|
||||
|
||||
setDocumentation(
|
||||
OfficialSupport,
|
||||
providers.DocOfficiallySupported,
|
||||
true,
|
||||
)
|
||||
featureMap.SetSimple(
|
||||
ProviderDnsProvider,
|
||||
false,
|
||||
func() bool { return providers.DNSProviderTypes[providerName].Initializer != nil },
|
||||
)
|
||||
featureMap.SetSimple(
|
||||
ProviderRegistrar,
|
||||
false,
|
||||
func() bool { return providers.RegistrarTypes[providerName] != nil },
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierAlias,
|
||||
providers.CanUseAlias,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierDnssec,
|
||||
providers.CanAutoDNSSEC,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierCaa,
|
||||
providers.CanUseCAA,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierDs,
|
||||
providers.CanUseDS,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierNaptr,
|
||||
providers.CanUseNAPTR,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierPtr,
|
||||
providers.CanUsePTR,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierSoa,
|
||||
providers.CanUseSOA,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierSrv,
|
||||
providers.CanUseSRV,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierSshfp,
|
||||
providers.CanUseSSHFP,
|
||||
)
|
||||
setCapability(
|
||||
DomainModifierTlsa,
|
||||
providers.CanUseTLSA,
|
||||
)
|
||||
setCapability(
|
||||
GetZones,
|
||||
providers.CanGetZones,
|
||||
)
|
||||
setDocumentation(
|
||||
CreateDomains,
|
||||
providers.DocCreateDomains,
|
||||
true,
|
||||
)
|
||||
setDocumentation(
|
||||
DualHost,
|
||||
providers.DocDualHost,
|
||||
false,
|
||||
)
|
||||
|
||||
// no purge is a freaky double negative
|
||||
cap := providers.CantUseNOPURGE
|
||||
if notes[cap] != nil {
|
||||
fm["no_purge"] = notes[cap]
|
||||
cantUseNOPURGE := providers.CantUseNOPURGE
|
||||
if providerNotes[cantUseNOPURGE] != nil {
|
||||
featureMap[NoPurge] = providerNotes[cantUseNOPURGE]
|
||||
} else {
|
||||
fm.SetSimple("no_purge", false, func() bool { return !providers.ProviderHasCapability(p, cap) })
|
||||
featureMap.SetSimple(
|
||||
NoPurge,
|
||||
false,
|
||||
func() bool { return !providers.ProviderHasCapability(providerName, cantUseNOPURGE) },
|
||||
)
|
||||
}
|
||||
matrix.Providers[p] = fm
|
||||
matrix.Providers[providerName] = featureMap
|
||||
}
|
||||
buf := &bytes.Buffer{}
|
||||
err := tmpl.Execute(buf, matrix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile("docs/_includes/matrix.html", buf.Bytes(), 0644)
|
||||
return matrix
|
||||
}
|
||||
|
||||
// FeatureDef describes features.
|
||||
type FeatureDef struct {
|
||||
Name, Desc string
|
||||
func allProviderNames() []string {
|
||||
const ProviderNameNone = "NONE"
|
||||
|
||||
allProviderNames := map[string]bool{}
|
||||
for providerName := range providers.RegistrarTypes {
|
||||
if providerName == ProviderNameNone {
|
||||
continue
|
||||
}
|
||||
allProviderNames[providerName] = true
|
||||
}
|
||||
for providerName := range providers.DNSProviderTypes {
|
||||
if providerName == ProviderNameNone {
|
||||
continue
|
||||
}
|
||||
allProviderNames[providerName] = true
|
||||
}
|
||||
|
||||
var allProviderNamesAsString []string
|
||||
for providerName := range allProviderNames {
|
||||
allProviderNamesAsString = append(allProviderNamesAsString, providerName)
|
||||
}
|
||||
sort.Strings(allProviderNamesAsString)
|
||||
|
||||
return allProviderNamesAsString
|
||||
}
|
||||
|
||||
// FeatureMap maps provider names to compliance documentation.
|
||||
type FeatureMap map[string]*providers.DocumentationNote
|
||||
|
||||
// SetSimple configures a provider's setting in fm.
|
||||
func (fm FeatureMap) SetSimple(name string, unknownsAllowed bool, f func() bool) {
|
||||
// SetSimple configures a provider's setting in featureMap.
|
||||
func (featureMap FeatureMap) SetSimple(
|
||||
name string,
|
||||
unknownsAllowed bool,
|
||||
f func() bool,
|
||||
) {
|
||||
if f() {
|
||||
fm[name] = &providers.DocumentationNote{HasFeature: true}
|
||||
featureMap[name] = &providers.DocumentationNote{HasFeature: true}
|
||||
} else if !unknownsAllowed {
|
||||
fm[name] = &providers.DocumentationNote{HasFeature: false}
|
||||
featureMap[name] = &providers.DocumentationNote{HasFeature: false}
|
||||
}
|
||||
}
|
||||
|
||||
// FeatureMatrix describes features and which providers support it.
|
||||
type FeatureMatrix struct {
|
||||
Features []FeatureDef
|
||||
Features []string
|
||||
Providers map[string]FeatureMap
|
||||
}
|
||||
|
||||
var tmpl = template.Must(template.New("").Funcs(template.FuncMap{
|
||||
"safe": func(s string) template.HTML { return template.HTML(s) },
|
||||
}).Parse(`{% comment %}
|
||||
Matrix generated by build/generate/featureMatrix.go. DO NOT HAND EDIT!
|
||||
{% endcomment %}{{$providers := .Providers}}
|
||||
<figure class="full-width">
|
||||
<table class="table-header-rotated">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="row-header rotate"><div><span> </span></div></th>
|
||||
{{range $key,$val := $providers}}<th class="rotate"><div><span>{{$key}}</span></div></th>
|
||||
{{end -}}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .Features}}{{$name := .Name}}<tr>
|
||||
<th class="row-header" style="text-decoration: underline;" data-toggle="tooltip" data-container="body" data-placement="top" title="{{.Desc}}">{{$name}}</th>
|
||||
{{range $pname, $features := $providers}}{{$f := index $features $name}}{{if $f -}}
|
||||
<td class="{{if $f.HasFeature}}success{{else if $f.Unimplemented}}info{{else}}danger{{end}}"
|
||||
{{- if $f.Comment}} data-toggle="tooltip" data-container="body" data-placement="top" title="{{$f.Comment}}"{{end}}>
|
||||
{{if $f.Link}}<a href="{{$f.Link}}">{{end}}<i class="fa {{if and $f.Comment (not $f.Unimplemented)}}has-tooltip {{end}}
|
||||
{{- if $f.HasFeature}}fa-check text-success{{else if $f.Unimplemented}}fa-circle-o text-info{{else}}fa-times text-danger{{end}}" aria-hidden="true"></i>{{if $f.Link}}</a>{{end}}
|
||||
</td>
|
||||
{{- else}}<td><i class="fa fa-minus dim"></i></td>{{end}}
|
||||
{{end -}}
|
||||
</tr>
|
||||
{{end -}}
|
||||
</tbody>
|
||||
</table>
|
||||
</figure>
|
||||
`))
|
||||
|
|
|
@ -54,7 +54,7 @@ var returnTypes = map[string]string{
|
|||
func generateFunctionTypes() (string, error) {
|
||||
funcs := []Function{}
|
||||
|
||||
srcRoot := join("docs", "_functions")
|
||||
srcRoot := join("docs", "functions")
|
||||
types, err := os.ReadDir(srcRoot)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
@ -89,13 +89,13 @@ func generateFunctionTypes() (string, error) {
|
|||
}
|
||||
|
||||
body = body + "\n"
|
||||
body = strings.ReplaceAll(body, "{{site.github.url}}", "https://dnscontrol.org/")
|
||||
body = strings.ReplaceAll(body, "{% capture example %}", "")
|
||||
body = strings.ReplaceAll(body, "{% capture example2 %}", "")
|
||||
body = strings.ReplaceAll(body, "{% endcapture %}", "")
|
||||
body = strings.ReplaceAll(body, "{% include example.html content=example %}", "")
|
||||
body = strings.ReplaceAll(body, "{% include example.html content=example2 %}", "")
|
||||
body = strings.ReplaceAll(body, "](#", "](https://dnscontrol.org/js#")
|
||||
body = strings.ReplaceAll(body, "{% hint style=\"danger\" %}", "")
|
||||
body = strings.ReplaceAll(body, "{% hint style=\"info\" %}", "")
|
||||
body = strings.ReplaceAll(body, "{% hint style=\"success\" %}", "")
|
||||
body = strings.ReplaceAll(body, "{% hint style=\"warning\" %}", "")
|
||||
body = strings.ReplaceAll(body, "{% endhint %}", "")
|
||||
body = strings.ReplaceAll(body, "**NOTE**", "NOTE")
|
||||
body = strings.ReplaceAll(body, "**WARNING**", "WARNING")
|
||||
body = fixRuns(body)
|
||||
|
||||
paramNames := []string{}
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
collections:
|
||||
providers:
|
||||
output: true
|
||||
functions:
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
name: IGNORE
|
||||
ts_ignore: true
|
||||
---
|
||||
|
||||
IGNORE has been renamed to `IGNORE_NAME`. IGNORE will continue to function, but its use is deprecated. Please update your configuration files to use `IGNORE_NAME`.
|
|
@ -1 +0,0 @@
|
|||
<div class="alert alert-warning" role="alert"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> {{include.text}}</div>
|
|
@ -1,6 +0,0 @@
|
|||
<span style='font-weight: bold' class='example-collapse'> Example{% if include.name %} ({{ include.name }}){%endif%}:
|
||||
<span class='expand-arrow'><i class="fa fa-caret-right" aria-hidden="true"></i></span>
|
||||
<span class='collapse-arrow'><i class="fa fa-caret-down" aria-hidden="true"></i></span></span>
|
||||
<div class='collapse'>
|
||||
{{ include.content | markdownify }}
|
||||
</div>
|
|
@ -5,4 +5,4 @@
|
|||
<div class="col-md-10">
|
||||
<p class="smaller">{{include.text}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
{% assign f = include.f %}
|
||||
|
||||
<div class="panel panel-default" id="{{f.name}}">
|
||||
<div class="panel-heading"><h4><code>
|
||||
{{f.name}}( {% for p in f.parameters %}{% unless forloop.first == true %}, {%endunless%}<i>{{p}}</i>{%endfor%} )
|
||||
{% if f.return %} -> {{f.return}}{%endif%}
|
||||
</code></h4></div>
|
||||
<div class="panel-body">
|
||||
{{f.content}}
|
||||
</div>
|
||||
</div>
|
|
@ -1,12 +0,0 @@
|
|||
## {{include.title}}
|
||||
{% assign fs = site.functions %}
|
||||
{% if include.dir == "global" %}
|
||||
{% assign fs = fs | reverse %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% for f in fs %}
|
||||
{% if f.path contains include.dir %}
|
||||
{% include func.html f=f %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
|
@ -1,28 +0,0 @@
|
|||
<a href="#{{include.html-anchor}}">
|
||||
<strong>{{include.title}}</strong>
|
||||
</a>
|
||||
{% if include.provider-jsId != nill %}
|
||||
for
|
||||
<a href="{{ site.github.url }}/providers/{{include.provider-jsId | downcase}}">
|
||||
<strong>
|
||||
{{include.provider-name}}
|
||||
</strong>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<ul>
|
||||
{% for function in site.functions %}
|
||||
{% if function.path contains include.docs-functions-dir %}
|
||||
{% if include.docs-functions-dir == "domain" %}
|
||||
{% if include.provider-jsId == nill and function.provider == nill %}
|
||||
<li><a href="#{{function.name}}">{{function.name}}</a></li>
|
||||
{% endif %}
|
||||
{% if include.provider-jsId != nill and function.provider == include.provider-jsId %}
|
||||
<li><a href="#{{function.name}}">{{function.name}}</a></li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<li><a href="#{{function.name}}">{{function.name}}</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -35,10 +35,10 @@
|
|||
</div>
|
||||
<div class="collapse navbar-collapse" id="nav-collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a class="hidden-xs" href="{{site.github.url}}/getting-started">Getting Started</a></li>
|
||||
<li><a class="hidden-xs" href="{{site.github.url}}/js">Language Reference</a></li>
|
||||
<li><a class="hidden-xs" href="{{site.github.url}}/provider-list">Providers</a></li>
|
||||
<li><a class="visible-xs" href="{{site.github.url}}/#getting-started">Getting Started</a></li>
|
||||
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a></li>
|
||||
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/language-reference/js">Language Reference</a></li>
|
||||
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/service-providers/providers">Providers</a></li>
|
||||
<li><a class="visible-xs" href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a></li>
|
||||
<li><a class="visible-xs" href="{{site.github.url}}/#reference">Reference</a></li>
|
||||
<li><a class="visible-xs" href="{{site.github.url}}/#advanced-features">Advanced features</a></li>
|
||||
<li><a class="visible-xs" href="{{site.github.url}}/#commands">Commands</a></li>
|
||||
|
@ -53,19 +53,5 @@
|
|||
<div class='container'>
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
{% comment %} This script makes the examples collapse appropriately {% endcomment %}
|
||||
|
||||
<script>
|
||||
$('.example-collapse').click(function (e) {
|
||||
e.preventDefault();
|
||||
$(this).parent().next().collapse('toggle');
|
||||
$(this).toggleClass('expanded')
|
||||
});
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -1,132 +1,7 @@
|
|||
.expanded>.expand-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.expanded>.collapse-arrow {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.collapse-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body {
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.table-header-rotated {
|
||||
border-collapse: collapse;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.table-header-rotated td {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.table-header-rotated th {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.table-header-rotated th:first-child {
|
||||
max-width: 120px;
|
||||
}
|
||||
|
||||
.table-header-rotated td {
|
||||
text-align: center;
|
||||
padding: 10px 5px;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.table-header-rotated th.rotate {
|
||||
height: 140px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.table-header-rotated th.rotate>div {
|
||||
-webkit-transform: translate(26px, 51px) rotate(315deg);
|
||||
-ms-transform: translate(26px, 51px) rotate(315deg);
|
||||
transform: translate(26px, 51px) rotate(315deg);
|
||||
width: 30px;
|
||||
position: relative;
|
||||
bottom: 1px;
|
||||
}
|
||||
|
||||
.table-header-rotated th.rotate>div>span {
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
.table-header-rotated th.row-header {
|
||||
padding: 0 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
/* box-shadow since border-right doesn’t work */
|
||||
box-shadow: 0.5px 0 0 #ccc;
|
||||
background-color: white;
|
||||
position: sticky;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.table-header-rotated thead tr:first-child th.row-header {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.table-header-rotated th.row-header.rotate>div {
|
||||
position: relative;
|
||||
left: 43px;
|
||||
bottom: 27px;
|
||||
}
|
||||
.table-header-rotated th.row-header.rotate>div>span {
|
||||
display: inline-block;
|
||||
width: 190px;
|
||||
background-color: white;
|
||||
line-height: 90px;
|
||||
}
|
||||
|
||||
|
||||
.full-width {
|
||||
width: 100vw;
|
||||
max-width: 100vw;
|
||||
margin-left: -50vw;
|
||||
margin-right: -50vw;
|
||||
left: 50%;
|
||||
right: 50%;
|
||||
position: relative;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.success {
|
||||
background-color: #dff0d8;
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color: #faf2cc;
|
||||
}
|
||||
|
||||
.danger {
|
||||
background-color: #f2dede;
|
||||
}
|
||||
|
||||
.info {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
|
||||
.fa {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
.has-tooltip:before {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.dim {
|
||||
color: #eeeeee
|
||||
}
|
||||
|
||||
.table-of-contents {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.table-of-contents td {
|
||||
vertical-align: top;
|
||||
width: 50%;
|
||||
}
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
.highlight { background: #ffffff; }
|
||||
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { font-weight: bold } /* Keyword */
|
||||
.highlight .o { font-weight: bold } /* Operator */
|
||||
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #999999 } /* Generic.Heading */
|
||||
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
||||
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
||||
.highlight .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #009999 } /* Literal.Number */
|
||||
.highlight .s { color: #d14 } /* Literal.String */
|
||||
.highlight .na { color: #008080 } /* Name.Attribute */
|
||||
.highlight .nb { color: #0086B3 } /* Name.Builtin */
|
||||
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #008080 } /* Name.Constant */
|
||||
.highlight .ni { color: #800080 } /* Name.Entity */
|
||||
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
|
||||
.highlight .nn { color: #555555 } /* Name.Namespace */
|
||||
.highlight .nt { color: #000080 } /* Name.Tag */
|
||||
.highlight .nv { color: #008080 } /* Name.Variable */
|
||||
.highlight .ow { font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #009999 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #d14 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #d14 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #d14 } /* Literal.String.Double */
|
||||
.highlight .se { color: #d14 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #d14 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #d14 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #d14 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #008080 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #008080 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
|
@ -1,43 +0,0 @@
|
|||
---
|
||||
layout: default
|
||||
title: How to edit the documentation
|
||||
---
|
||||
|
||||
# Working with the docs
|
||||
|
||||
The website is a static website generated by [Jekyll](https://jekyllrb.com/docs/).
|
||||
|
||||
The website is generated from the files in `$GIT/dnscontrol/docs`. If a file
|
||||
has a `.md` extension, it will be turned into an HTML file. Otherwise it is
|
||||
copied verbatim.
|
||||
|
||||
# Directory Hierarchy
|
||||
|
||||
* `docs`: The root directory. index.md is the homepage.
|
||||
* `docs/_includes`: Functions and templates.
|
||||
* `docs/css`: CSS
|
||||
* `docs/_functions/record`: Things that augment a record.
|
||||
* `docs/_functions/domain`: Things inside a `D()`
|
||||
* `docs/_functions/global`: Features at the global (file) level.
|
||||
* `docs/_layouts`: Main layout
|
||||
* `docs/public`: Static content
|
||||
* `docs/_site`: The generated site (not in Git)
|
||||
* `docs/assets`: Static files
|
||||
* `docs/flattener`: The SPF flatter
|
||||
|
||||
# How to preview
|
||||
|
||||
The documentation can be viewed via Docker:
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
./runDocker.sh
|
||||
```
|
||||
|
||||
FYI: Alternative Docker command:
|
||||
|
||||
```bash
|
||||
docker run --rm -it --volume="$PWD:/srv/jekyll" --volume="$PWD/vendor/bundle:/ usr/local/bundle" --env JEKYLL_ENV=production jekyll/jekyll:3.8 jekyll build -V
|
||||
# Open docs/_site/index.html in your web browser to see the results.
|
||||
# (Note: The preview isn't perfect. Links that use the site.github.url variable won't work.
|
||||
```
|
|
@ -5,58 +5,57 @@
|
|||
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
||||
<script src="flattener.js"></script>
|
||||
<style>
|
||||
|
||||
ul {
|
||||
margin: 0px 0px 0px 20px;
|
||||
list-style: none;
|
||||
line-height: 2em;
|
||||
font-family: Arial;
|
||||
}
|
||||
ul li {
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
}
|
||||
ul li:before {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
top: 0px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 1em;
|
||||
border-bottom: 1px solid #ddd;
|
||||
width: 10px;
|
||||
}
|
||||
ul li:after {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
bottom: -7px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 100%;
|
||||
}
|
||||
ul li.root {
|
||||
margin: 0px 0px 0px -20px;
|
||||
}
|
||||
ul li.root:before {
|
||||
display: none;
|
||||
}
|
||||
ul li.root:after {
|
||||
display: none;
|
||||
}
|
||||
ul li:last-child:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
ul {
|
||||
margin: 0px 0px 0px 20px;
|
||||
list-style: none;
|
||||
line-height: 2em;
|
||||
font-family: Arial;
|
||||
}
|
||||
ul li {
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
}
|
||||
ul li:before {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
top: 0px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 1em;
|
||||
border-bottom: 1px solid #ddd;
|
||||
width: 10px;
|
||||
}
|
||||
ul li:after {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
bottom: -7px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 100%;
|
||||
}
|
||||
ul li.root {
|
||||
margin: 0px 0px 0px -20px;
|
||||
}
|
||||
ul li.root:before {
|
||||
display: none;
|
||||
}
|
||||
ul li.root:after {
|
||||
display: none;
|
||||
}
|
||||
ul li:last-child:after {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class='container' style='padding-bottom:50px'>
|
||||
<input type="text" id="domain" value="stackoverflow.com"></input>
|
||||
<button id="lookup_btn">Lookup</button>
|
||||
<div id="results"></div>
|
||||
<div id="flattened"></div>
|
||||
<input type="text" id="domain" value="stackoverflow.com"></input>
|
||||
<button id="lookup_btn">Lookup</button>
|
||||
<div id="results"></div>
|
||||
<div id="flattened"></div>
|
||||
</div>
|
||||
</body>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -7,7 +7,7 @@ title: DNSControl
|
|||
<div class="col-md-12">
|
||||
<div>
|
||||
<h1 class="hometitle">DNSControl</h1>
|
||||
<p class="lead">DNSControl is an <strong><a href="opinions">opinionated</a></strong> platform for seamlessly managing your DNS configuration across any number of DNS hosts, both in the cloud or in your own infrastructure. It manages all of the domains for the Stack Overflow network, and can do the same for you!</p>
|
||||
<p class="lead">DNSControl is an <strong><a href="https://docs.dnscontrol.org/developer-info/opinions">opinionated</a></strong> platform for seamlessly managing your DNS configuration across any number of DNS hosts, both in the cloud or in your own infrastructure. It manages all of the domains for the Stack Overflow network, and can do the same for you!</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -16,11 +16,11 @@ title: DNSControl
|
|||
<div class="col-md-4">
|
||||
<h3>Try It</h3>
|
||||
<p>Want to jump right in? Follow our
|
||||
<strong><a href="getting-started">quick start tutorial</a></strong>
|
||||
<strong><a href="https://docs.dnscontrol.org/getting-started/getting-started">quick start tutorial</a></strong>
|
||||
on a new domain or
|
||||
<strong><a href="migrating">migrate</a></strong>
|
||||
<strong><a href="https://docs.dnscontrol.org/getting-started/migrating">migrate</a></strong>
|
||||
an existing one. Read the
|
||||
<strong><a href="js">language spec</a></strong>
|
||||
<strong><a href="https://docs.dnscontrol.org/language-reference/js">language spec</a></strong>
|
||||
for more info. You can also <strong><a href="#getting-started">view a list of all topics</a></strong>.
|
||||
</p>
|
||||
</div>
|
||||
|
@ -32,7 +32,7 @@ title: DNSControl
|
|||
Use macros and variables for easier updates.
|
||||
<!-- Optimize your SPF records. -->
|
||||
Upload your zones to
|
||||
<strong><a href="provider-list">multiple DNS providers</a></strong>.
|
||||
<strong><a href="https://docs.dnscontrol.org/service-providers/providers">multiple DNS providers</a></strong>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -82,19 +82,19 @@ title: DNSControl
|
|||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/getting-started">Getting Started</a>: A walk-through of the basics
|
||||
<a href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a>: A walk-through of the basics
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/provider-list">Providers</a>: Which DNS providers are supported
|
||||
<a href="https://docs.dnscontrol.org/service-providers/providers">Providers</a>: Which DNS providers are supported
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/examples">Examples</a>: The DNSControl language by example
|
||||
<a href="https://docs.dnscontrol.org/getting-started/examples">Examples</a>: The DNSControl language by example
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/migrating">Migrating</a>: Migrating zones to DNSControl
|
||||
<a href="https://docs.dnscontrol.org/getting-started/migrating">Migrating</a>: Migrating zones to DNSControl
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/typescript">TypeScript</a> (optional): Improve autocomplete and add type checking
|
||||
<a href="https://docs.dnscontrol.org/getting-started/typescript">TypeScript</a> (optional): Improve autocomplete and add type checking
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -107,16 +107,16 @@ title: DNSControl
|
|||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="creds-json.html">creds.json</a>: creds.json file format
|
||||
<a href="https://docs.dnscontrol.org/commands/creds-json">creds.json</a>: creds.json file format
|
||||
</li>
|
||||
<li>
|
||||
<a href="check-creds.html">check-creds</a>: Verify credentials
|
||||
<a href="https://docs.dnscontrol.org/commands/check-creds">check-creds</a>: Verify credentials
|
||||
</li>
|
||||
<li>
|
||||
<a href="get-zones.html">get-zones</a>: Query a provider for zone info
|
||||
<a href="https://docs.dnscontrol.org/commands/get-zones">get-zones</a>: Query a provider for zone info
|
||||
</li>
|
||||
<li>
|
||||
<a href="get-certs.html">get-certs</a>: Renew SSL/TLS certs (DEPRECATED)
|
||||
<a href="https://docs.dnscontrol.org/commands/get-certs">get-certs</a>: Renew SSL/TLS certs (DEPRECATED)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -131,16 +131,16 @@ title: DNSControl
|
|||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/js">Language Reference</a>: Description of the DNSControl language (DSL)
|
||||
<a href="https://docs.dnscontrol.org/language-reference/js">Language Reference</a>: Description of the DNSControl language (DSL)
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/alias">Aliases</a>: ALIAS/ANAME records
|
||||
<a href="https://docs.dnscontrol.org/developer-info/alias">Aliases</a>: ALIAS/ANAME records
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/js#SPF_BUILDER">SPF Optimizer</a>: Optimize your SPF records
|
||||
<a href="https://docs.dnscontrol.org/language-reference/record-modifiers/spf_builder">SPF Optimizer</a>: Optimize your SPF records
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/js#CAA_BUILDER">CAA Builder</a>: Build CAA records the easy way
|
||||
<a href="https://docs.dnscontrol.org/language-reference/record-modifiers/caa_builder">CAA Builder</a>: Build CAA records the easy way
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -153,25 +153,25 @@ title: DNSControl
|
|||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/why-the-dot">Why CNAME/MX/NS targets require a trailing "dot"</a>
|
||||
<a href="https://docs.dnscontrol.org/language-reference/why-the-dot">Why CNAME/MX/NS targets require a trailing "dot"</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/unittests">Testing</a>: Unit Testing for you DNS Data
|
||||
<a href="https://docs.dnscontrol.org/developer-info/unittests">Testing</a>: Unit Testing for you DNS Data
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/notifications">Notifications</a>: Web-hook for changes
|
||||
<a href="https://docs.dnscontrol.org/advanced-features/notifications">Notifications</a>: Web-hook for changes
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/code-tricks">Code Tricks</a>: Safely use macros and loops.
|
||||
<a href="https://docs.dnscontrol.org/advanced-features/code-tricks">Code Tricks</a>: Safely use macros and loops.
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/cli-variables">CLI variables</a>: Passing variables from CLI to JS
|
||||
<a href="https://docs.dnscontrol.org/advanced-features/cli-variables">CLI variables</a>: Passing variables from CLI to JS
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/nameservers">Nameservers & Delegation</a>: Many examples.
|
||||
<a href="https://docs.dnscontrol.org/advanced-features/nameservers">Nameservers & Delegation</a>: Many examples.
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/ci-cd-gitlab">Gitlab CI/CD example</a>.
|
||||
<a href="https://docs.dnscontrol.org/advanced-features/ci-cd-gitlab">Gitlab CI/CD example</a>.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -192,22 +192,19 @@ title: DNSControl
|
|||
Mailing list: <a href="https://groups.google.com/forum/#!forum/dnscontrol-discuss">dnscontrol-discuss</a>: The friendly best place to ask questions and propose new features
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/bug-triage">Bug Triage</a>: How bugs are triaged
|
||||
<a href="https://docs.dnscontrol.org/developer-info/bug-triage">Bug Triage</a>: How bugs are triaged
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/release-engineering">Release Engineering</a>: How to build and ship a release
|
||||
<a href="https://docs.dnscontrol.org/release/release-engineering">Release Engineering</a>: How to build and ship a release
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/documentation">Edit Documentation</a>: How to edit these docs
|
||||
<a href="https://docs.dnscontrol.org/developer-info/byo-secrets">Bring-Your-Own-Secrets</a>: Automate tests
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/byo-secrets">Bring-Your-Own-Secrets</a>: Automate tests
|
||||
<a href="https://docs.dnscontrol.org/developer-info/writing-providers">Step-by-Step Guide: Writing Providers</a>: How to write a DNS or Registrar Provider
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/writing-providers">Step-by-Step Guide: Writing Providers</a>: How to write a DNS or Registrar Provider
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{site.github.url}}/adding-new-rtypes">Step-by-Step Guide: Adding new DNS rtypes</a>: How to add a new DNS record type
|
||||
<a href="https://docs.dnscontrol.org/developer-info/adding-new-rtypes">Step-by-Step Guide: Adding new DNS rtypes</a>: How to add a new DNS record type
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
65
docs/js.md
|
@ -1,65 +0,0 @@
|
|||
---
|
||||
layout: default
|
||||
title: JavaScript DSL
|
||||
---
|
||||
|
||||
# JavaScript DSL
|
||||
|
||||
DNSControl uses JavaScript as its primary input language to provide power and flexibility to configure your domains. The ultimate purpose of the JavaScript is to construct a
|
||||
[DNSConfig](https://godoc.org/github.com/StackExchange/dnscontrol/models#DNSConfig) object that will be passed to the go backend and operated on.
|
||||
|
||||
<table class="table-of-contents">
|
||||
<tr>
|
||||
<td>
|
||||
{% include table-of-contents.md
|
||||
docs-functions-dir="domain"
|
||||
html-anchor="domain-modifiers"
|
||||
title="Domain Modifiers"
|
||||
%}
|
||||
{% assign showProviders = 'AKAMAIEDGEDNS, AZURE_DNS, CLOUDFLAREAPI, ROUTE53' %}
|
||||
{% for provider in site.providers %}
|
||||
{% if showProviders contains provider.jsId %}
|
||||
{% include table-of-contents.md
|
||||
docs-functions-dir="domain"
|
||||
html-anchor="domain-modifiers"
|
||||
title="Domain Modifiers"
|
||||
provider-name=provider.name
|
||||
provider-jsId=provider.jsId
|
||||
%}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% include table-of-contents.md
|
||||
docs-functions-dir="global"
|
||||
html-anchor="top-level-functions"
|
||||
title="Top Level Functions"
|
||||
%}
|
||||
{% include table-of-contents.md
|
||||
docs-functions-dir="record"
|
||||
html-anchor="record-modifiers"
|
||||
title="Record Modifiers"
|
||||
%}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{% include funcList.md title="Top Level Functions" dir="global" %}
|
||||
|
||||
{% include funcList.md title="Domain Modifiers" dir="domain" %}
|
||||
|
||||
{% include funcList.md title="Record Modifiers" dir="record" %}
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var f = function(){
|
||||
$("div.panel").removeClass("panel-success")
|
||||
var jmp = window.location.hash;
|
||||
if(jmp){
|
||||
$("div"+jmp).addClass("panel-success")
|
||||
}
|
||||
}
|
||||
f();
|
||||
$(window).on('hashchange',f);
|
||||
})
|
||||
</script>
|
|
@ -1,153 +0,0 @@
|
|||
---
|
||||
layout: default
|
||||
title: Service Providers
|
||||
---
|
||||
# Service Providers
|
||||
|
||||
<table class='table table-bordered'>
|
||||
<thead>
|
||||
<th>Name</th>
|
||||
<th>Identifier</th>
|
||||
</thead>
|
||||
{% for p in site.providers %}
|
||||
<tr>
|
||||
<td><a href=".{{p.id}}">{{p.name}}</a></td>
|
||||
<td>{{p.jsId}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
## Provider Features {#features}
|
||||
|
||||
The table below shows various features supported, or not supported by DNSControl providers.
|
||||
Underlined items have tooltips for more detailed explanation. This table is automatically generated
|
||||
from metadata supplied by the provider when they register themselves inside dnscontrol.
|
||||
|
||||
An empty space may indicate the feature is not supported by a provider, or it may simply mean
|
||||
the feature has not been investigated and implemented yet. If a feature you need is missing from
|
||||
a provider that supports it, we'd love your contribution to ensure it works correctly and add it to this matrix.
|
||||
|
||||
If a feature is definitively not supported for whatever reason, we would also like a PR to clarify why it is not supported, and fill in this entire matrix.
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
{% include matrix.html %}
|
||||
|
||||
|
||||
### Providers with "official support"
|
||||
|
||||
Official support means:
|
||||
|
||||
* New releases will block if any of these providers do not pass integration tests.
|
||||
* The DNSControl maintainers prioritize fixing bugs in these providers (though we gladly accept PRs).
|
||||
* New features will work on these providers (unless the provider does not support it).
|
||||
* StackOverflow maintains test accounts with those providers for running integration tests.
|
||||
|
||||
Providers in this category and their maintainers are:
|
||||
|
||||
* `AZURE_DNS` @vatsalyagoel
|
||||
* `BIND` @tlimoncelli
|
||||
* `GCLOUD` @riyadhalnur
|
||||
* `NAMEDOTCOM` @tlimoncelli
|
||||
|
||||
### Providers with "contributor support"
|
||||
|
||||
The other providers are supported by community members, usually the
|
||||
original contributor.
|
||||
|
||||
Due to the large number of DNS providers in the world, the DNSControl
|
||||
team can not support and test all providers. Test frameworks are
|
||||
provided to help community members support their code independently.
|
||||
|
||||
Expectations of maintainers:
|
||||
|
||||
* Maintainers are expected to support their provider and/or find a new maintainer.
|
||||
* Maintainers should set up test accounts and periodically verify that all tests pass (`pkg/js/parse_tests` and `integrationTest`).
|
||||
* Contributors are encouraged to add new tests and refine old ones. (Test-driven development is encouraged.)
|
||||
* Bugs will be referred to the maintainer or their designate.
|
||||
* Maintainers must be responsible to bug reports and PRs. If a maintainer is unresponsive for more than 2 months, we will consider disabling the provider. First we will put out a call for new maintainer. If noboby volunteers, the provider will be disabled.
|
||||
|
||||
Providers in this category and their maintainers are:
|
||||
|
||||
* `AXFRDDNS` @hnrgrgr
|
||||
* `AKAMAIEDGEDNS` @svernick
|
||||
* `CLOUDNS` @pragmaton
|
||||
* `CLOUDFLAREAPI` @tresni
|
||||
* `CSCGLOBAL` @Air-New-Zealand
|
||||
* `DESEC` @D3luxee
|
||||
* `DIGITALOCEAN` @Deraen
|
||||
* `DNSOVERHTTPS` @mikenz
|
||||
* `DNSIMPLE` @onlyhavecans
|
||||
* `DNSMADEEASY` @vojtad
|
||||
* `DOMAINNAMESHOP` @SimenBai
|
||||
* `EASYNAME` @tresni
|
||||
* `EXOSCALE` @pierre-emmanuelJ
|
||||
* `GANDI_V5` @TomOnTime
|
||||
* `GCORE` @xddxdd
|
||||
* `HEDNS` @rblenkinsopp
|
||||
* `HETZNER` @das7pad
|
||||
* `HEXONET` @papakai
|
||||
* `HOSTINGDE` @membero
|
||||
* `INTERNETBS` @pragmaton
|
||||
* `INWX` @svenpeter42
|
||||
* `LINODE` @koesie10
|
||||
* `NAMECHEAP` VOLUNTEER NEEDED
|
||||
* `NETCUP` @kordianbruck
|
||||
* `NETLIFY` @SphericalKat
|
||||
* `NS1` @costasd
|
||||
* `OPENSRS` @pierre-emmanuelJ
|
||||
* `ORACLE` @kallsyms
|
||||
* `OVH` @masterzen
|
||||
* `PACKETFRAME` @hamptonmoore
|
||||
* `POWERDNS` @jpbede
|
||||
* `RWTH` @MisterErwin
|
||||
* `ROUTE53` @tresni
|
||||
* `SOFTLAYER`@jamielennox
|
||||
* `TRANSIP` @blackshadev
|
||||
* `VULTR` @pgaskin
|
||||
|
||||
### Requested providers
|
||||
|
||||
We have received requests for the following providers. If you would like to contribute
|
||||
code to support this provider, please re-open the issue. We'd be glad to help in any way.
|
||||
|
||||
<ul id='requests'>
|
||||
|
||||
</ul>
|
||||
|
||||
### In progress providers
|
||||
|
||||
These requests have an *open* issue, which indicates somebody is actively working on it. Feel free to follow the issue, or pitch in if you think you can help.
|
||||
|
||||
<ul id='inprog'>
|
||||
</ul>
|
||||
|
||||
### Providers with open PRs
|
||||
|
||||
These providers have an open PR with (potentially) working code. They may be ready to merge, or may have blockers. See issue and PR for details.
|
||||
|
||||
<ul id='haspr'>
|
||||
</ul>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$.get("https://api.github.com/repos/StackExchange/dnscontrol/issues?state=all&labels=provider-request&direction=asc")
|
||||
.done(function(data) {
|
||||
for(var i of data) {
|
||||
var el = $(`<li><a href='${i.html_url}'>${i.title}</a> (#${i.number})</li>`);
|
||||
var target = $("#requests");
|
||||
if (i.state == "open") {
|
||||
target = $("#inprog");
|
||||
for(var l of i.labels) {
|
||||
if (l.name == "has-pr")
|
||||
target = $("#haspr");
|
||||
}
|
||||
}
|
||||
target.append(el);
|
||||
}
|
||||
})
|
||||
.fail(function(err){
|
||||
console.log("???", err)
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="App_Store" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5640259,13.8623047
|
||||
c-0.4133301,0.9155273-0.6115723,1.3251343-1.1437988,2.1346436c-0.7424927,1.1303711-1.7894897,2.5380249-3.086853,2.5500488
|
||||
c-1.1524048,0.0109253-1.4483032-0.749939-3.0129395-0.741333c-1.5640259,0.008606-1.8909302,0.755127-3.0438843,0.7442017
|
||||
c-1.296814-0.0120239-2.2891235-1.2833252-3.0321655-2.4136963c-2.0770874-3.1607666-2.2941895-6.8709106-1.0131836-8.8428955
|
||||
c0.9106445-1.4013062,2.3466187-2.2217407,3.6970215-2.2217407c1.375,0,2.239502,0.7539673,3.3761597,0.7539673
|
||||
c1.1028442,0,1.7749023-0.755127,3.3641357-0.755127c1.201416,0,2.4744263,0.6542969,3.3816528,1.7846069
|
||||
C14.0778809,8.4837646,14.5608521,12.7279663,17.5640259,13.8623047z M12.4625244,3.8076782
|
||||
c0.5775146-0.741333,1.0163574-1.7880859,0.8571167-2.857666c-0.9436035,0.0653076-2.0470581,0.6651611-2.6912842,1.4477539
|
||||
C10.0437012,3.107605,9.56073,4.1605835,9.7486572,5.1849365C10.7787476,5.2164917,11.8443604,4.6011963,12.4625244,3.8076782z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,50 +1,50 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M221.999,133.598L123.43,232.16l0.005,0.005c-0.034,0.034-0.067,0.057-0.101,0.091l-0.604,0.604
|
||||
l-0.031-0.034c-5.561,5.179-12.766,7.763-20.225,7.763c-8.896,0-18.124-3.628-25.264-10.769
|
||||
c-6.349-6.344-10.156-14.54-10.719-23.078c-0.558-8.445,2.116-16.236,7.485-22.134l-0.054-0.054l97.41-97.41
|
||||
c8.227-8.229,22.209-7.623,31.177,1.343c4.204,4.204,6.733,9.656,7.109,15.346c0.399,5.996-1.707,11.765-5.776,15.829
|
||||
l-79.296,79.304l-11.005-11.002l79.301-79.307c1.162-1.162,1.32-2.703,1.248-3.787c-0.127-1.898-1.071-3.859-2.588-5.377
|
||||
c-2.85-2.85-7.049-3.462-9.168-1.341l-96.455,96.453l0.003,0.003c-2.783,2.78-4.155,6.725-3.864,11.108
|
||||
c0.316,4.77,2.516,9.423,6.196,13.103c7.306,7.304,18.14,8.364,24.18,2.376l98.608-98.6c4.593-4.596,6.865-11.056,6.393-18.186
|
||||
c-0.498-7.519-3.942-14.825-9.692-20.575c-11.599-11.596-28.983-13.077-38.761-3.304l-81.579,81.576l-11.005-11.002l81.579-81.579
|
||||
c15.842-15.839,43.103-14.361,60.768,3.302c8.421,8.416,13.468,19.265,14.218,30.55
|
||||
C233.694,115.049,229.816,125.781,221.999,133.598z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M221.999,133.598L123.43,232.16l0.005,0.005c-0.034,0.034-0.067,0.057-0.101,0.091l-0.604,0.604
|
||||
l-0.031-0.034c-5.561,5.179-12.766,7.763-20.225,7.763c-8.896,0-18.124-3.628-25.264-10.769
|
||||
c-6.349-6.344-10.156-14.54-10.719-23.078c-0.558-8.445,2.116-16.236,7.485-22.134l-0.054-0.054l97.41-97.41
|
||||
c8.227-8.229,22.209-7.623,31.177,1.343c4.204,4.204,6.733,9.656,7.109,15.346c0.399,5.996-1.707,11.765-5.776,15.829
|
||||
l-79.296,79.304l-11.005-11.002l79.301-79.307c1.162-1.162,1.32-2.703,1.248-3.787c-0.127-1.898-1.071-3.859-2.588-5.377
|
||||
c-2.85-2.85-7.049-3.462-9.168-1.341l-96.455,96.453l0.003,0.003c-2.783,2.78-4.155,6.725-3.864,11.108
|
||||
c0.316,4.77,2.516,9.423,6.196,13.103c7.306,7.304,18.14,8.364,24.18,2.376l98.608-98.6c4.593-4.596,6.865-11.056,6.393-18.186
|
||||
c-0.498-7.519-3.942-14.825-9.692-20.575c-11.599-11.596-28.983-13.077-38.761-3.304l-81.579,81.576l-11.005-11.002l81.579-81.579
|
||||
c15.842-15.839,43.103-14.361,60.768,3.302c8.421,8.416,13.468,19.265,14.218,30.55
|
||||
C233.694,115.049,229.816,125.781,221.999,133.598z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -1,74 +1,74 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M255,302c-8.276,0-15,6.724-15,15v30c0,8.276,6.724,15,15,15s15-6.724,15-15v-30C270,308.724,263.276,302,255,302z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M195,182c-8.276,0-15,6.724-15,15s6.724,15,15,15s15-6.724,15-15S203.276,182,195,182z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M467,212h-22.229c-4.805-20.186-12.876-39.668-23.774-57.363l14.312-14.312c17.549-17.549,17.549-46.084,0-63.633
|
||||
c-17.549-17.549-46.084-17.549-63.633,0l-14.312,14.312C339.668,80.105,320.186,72.034,300,67.229V45c0-24.814-20.186-45-45-45
|
||||
c-24.814,0-45,20.186-45,45v22.229c-20.186,4.805-39.668,12.876-57.363,23.774l-14.312-14.312
|
||||
c-17.549-17.549-46.084-17.549-63.633,0c-17.549,17.549-17.549,46.084,0,63.633l14.312,14.312
|
||||
C78.105,172.332,70.034,191.814,65.229,212H45c-24.814,0-45,20.186-45,45c0,24.814,20.186,45,45,45h20.229
|
||||
c4.805,20.186,12.876,39.668,23.774,57.363l-14.312,14.312c-17.549,17.549-17.549,46.084,0,63.633
|
||||
c17.549,17.549,46.084,17.549,63.633,0l14.312-14.312c17.695,10.898,37.178,18.97,57.363,23.774V467c0,24.814,20.186,45,45,45
|
||||
c24.814,0,45-20.186,45-45v-20.229c20.186-4.805,39.668-12.876,57.363-23.774l14.312,14.312c17.549,17.549,46.084,17.549,63.633,0
|
||||
s17.549-46.084,0-63.633l-14.312-14.312c10.898-17.695,18.97-37.178,23.774-57.363H467c24.814,0,45-20.186,45-45
|
||||
C512,232.187,491.814,212,467,212z M255,122c8.284,0,15,6.716,15,15s-6.716,15-15,15s-15-6.716-15-15S246.716,122,255,122z
|
||||
M165,362c-8.284,0-15-6.716-15-15s6.716-15,15-15s15,6.716,15,15S173.284,362,165,362z M175.605,297.605
|
||||
c-2.93,2.93-6.768,4.395-10.605,4.395s-7.676-1.465-10.605-4.395l-30-30c-5.859-5.859-5.859-15.352,0-21.211
|
||||
c5.859-5.859,15.352-5.859,21.211,0l30,30C181.465,282.254,181.465,291.746,175.605,297.605z M195,242c-24.814,0-45-20.186-45-45
|
||||
c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45C240,221.814,219.814,242,195,242z M300,347c0,24.814-20.186,45-45,45
|
||||
c-24.814,0-45-20.186-45-45v-30c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45V347z M345,362c-8.284,0-15-6.716-15-15
|
||||
s6.716-15,15-15s15,6.716,15,15S353.284,362,345,362z M379.79,262.171l-0.088,0.088c-8.73,8.73-20.186,13.096-31.655,13.096
|
||||
s-22.925-4.365-31.655-13.096l-36.606-36.606c-17.446-17.446-17.446-45.835-0.015-63.296
|
||||
c17.549-17.549,45.952-17.593,63.413-0.103l36.606,36.606C397.251,216.321,397.251,244.71,379.79,262.171z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M358.579,220.07l-36.606-36.605c-2.871-2.871-6.65-4.307-10.43-4.307c-3.78,0-7.573,1.436-10.444,4.321
|
||||
c-5.845,5.845-5.845,15.205-0.103,20.962l36.606,36.606c5.771,5.742,15.117,5.742,20.889,0l0.088-0.088
|
||||
C364.336,235.202,364.336,225.827,358.579,220.07z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M255,302c-8.276,0-15,6.724-15,15v30c0,8.276,6.724,15,15,15s15-6.724,15-15v-30C270,308.724,263.276,302,255,302z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M195,182c-8.276,0-15,6.724-15,15s6.724,15,15,15s15-6.724,15-15S203.276,182,195,182z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M467,212h-22.229c-4.805-20.186-12.876-39.668-23.774-57.363l14.312-14.312c17.549-17.549,17.549-46.084,0-63.633
|
||||
c-17.549-17.549-46.084-17.549-63.633,0l-14.312,14.312C339.668,80.105,320.186,72.034,300,67.229V45c0-24.814-20.186-45-45-45
|
||||
c-24.814,0-45,20.186-45,45v22.229c-20.186,4.805-39.668,12.876-57.363,23.774l-14.312-14.312
|
||||
c-17.549-17.549-46.084-17.549-63.633,0c-17.549,17.549-17.549,46.084,0,63.633l14.312,14.312
|
||||
C78.105,172.332,70.034,191.814,65.229,212H45c-24.814,0-45,20.186-45,45c0,24.814,20.186,45,45,45h20.229
|
||||
c4.805,20.186,12.876,39.668,23.774,57.363l-14.312,14.312c-17.549,17.549-17.549,46.084,0,63.633
|
||||
c17.549,17.549,46.084,17.549,63.633,0l14.312-14.312c17.695,10.898,37.178,18.97,57.363,23.774V467c0,24.814,20.186,45,45,45
|
||||
c24.814,0,45-20.186,45-45v-20.229c20.186-4.805,39.668-12.876,57.363-23.774l14.312,14.312c17.549,17.549,46.084,17.549,63.633,0
|
||||
s17.549-46.084,0-63.633l-14.312-14.312c10.898-17.695,18.97-37.178,23.774-57.363H467c24.814,0,45-20.186,45-45
|
||||
C512,232.187,491.814,212,467,212z M255,122c8.284,0,15,6.716,15,15s-6.716,15-15,15s-15-6.716-15-15S246.716,122,255,122z
|
||||
M165,362c-8.284,0-15-6.716-15-15s6.716-15,15-15s15,6.716,15,15S173.284,362,165,362z M175.605,297.605
|
||||
c-2.93,2.93-6.768,4.395-10.605,4.395s-7.676-1.465-10.605-4.395l-30-30c-5.859-5.859-5.859-15.352,0-21.211
|
||||
c5.859-5.859,15.352-5.859,21.211,0l30,30C181.465,282.254,181.465,291.746,175.605,297.605z M195,242c-24.814,0-45-20.186-45-45
|
||||
c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45C240,221.814,219.814,242,195,242z M300,347c0,24.814-20.186,45-45,45
|
||||
c-24.814,0-45-20.186-45-45v-30c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45V347z M345,362c-8.284,0-15-6.716-15-15
|
||||
s6.716-15,15-15s15,6.716,15,15S353.284,362,345,362z M379.79,262.171l-0.088,0.088c-8.73,8.73-20.186,13.096-31.655,13.096
|
||||
s-22.925-4.365-31.655-13.096l-36.606-36.606c-17.446-17.446-17.446-45.835-0.015-63.296
|
||||
c17.549-17.549,45.952-17.593,63.413-0.103l36.606,36.606C397.251,216.321,397.251,244.71,379.79,262.171z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M358.579,220.07l-36.606-36.605c-2.871-2.871-6.65-4.307-10.43-4.307c-3.78,0-7.573,1.436-10.444,4.321
|
||||
c-5.845,5.845-5.845,15.205-0.103,20.962l36.606,36.606c5.771,5.742,15.117,5.742,20.889,0l0.088-0.088
|
||||
C364.336,235.202,364.336,225.827,358.579,220.07z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3 KiB |
|
@ -1,48 +1,48 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M112.782,205.804c10.644,7.166,23.449,11.355,37.218,11.355c36.837,0,66.808-29.971,66.808-66.808
|
||||
c0-13.769-4.189-26.574-11.355-37.218L112.782,205.804z"/>
|
||||
<path d="M150,83.542c-36.839,0-66.808,29.969-66.808,66.808c0,15.595,5.384,29.946,14.374,41.326l93.758-93.758
|
||||
C179.946,88.926,165.595,83.542,150,83.542z"/>
|
||||
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
|
||||
M150,237.907c-48.28,0-87.557-39.28-87.557-87.557c0-48.28,39.277-87.557,87.557-87.557c48.277,0,87.557,39.277,87.557,87.557
|
||||
C237.557,198.627,198.277,237.907,150,237.907z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M112.782,205.804c10.644,7.166,23.449,11.355,37.218,11.355c36.837,0,66.808-29.971,66.808-66.808
|
||||
c0-13.769-4.189-26.574-11.355-37.218L112.782,205.804z"/>
|
||||
<path d="M150,83.542c-36.839,0-66.808,29.969-66.808,66.808c0,15.595,5.384,29.946,14.374,41.326l93.758-93.758
|
||||
C179.946,88.926,165.595,83.542,150,83.542z"/>
|
||||
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
|
||||
M150,237.907c-48.28,0-87.557-39.28-87.557-87.557c0-48.28,39.277-87.557,87.557-87.557c48.277,0,87.557,39.277,87.557,87.557
|
||||
C237.557,198.627,198.277,237.907,150,237.907z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
|
@ -1,47 +1,47 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
|
||||
M209.453,220.955c-1.644,0-3.268-0.091-4.866-0.254c-1.46,0.163-2.944,0.254-4.448,0.254h-37.656l40.504-40.87
|
||||
c2.342-2.365,3.079-5.983,1.849-9.137c-1.227-3.156-4.165-5.218-7.431-5.218h-19.958v-42.662c0-5.14-4.171-9.311-9.311-9.311
|
||||
h-28.231c-5.14,0-9.311,4.168-9.311,9.311v42.662h-21.529c-0.016,0-0.034,0-0.047,0c-4.43,0-8.019,3.737-8.019,8.354
|
||||
c0,2.63,1.162,4.969,2.977,6.5l40.011,40.372H83.794c-21.916,0-39.684-17.771-39.684-39.684c0-18.256,12.327-33.615,29.108-38.245
|
||||
c1.854-15.541,15.058-27.598,31.094-27.598c4.85,0,9.428,1.136,13.526,3.105c7.973-22.188,29.188-38.053,54.118-38.053
|
||||
c29.896,0,54.455,22.821,57.227,51.988c15.779,7.42,26.709,23.454,26.709,42.045C255.891,200.163,235.101,220.955,209.453,220.955
|
||||
z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
|
||||
M209.453,220.955c-1.644,0-3.268-0.091-4.866-0.254c-1.46,0.163-2.944,0.254-4.448,0.254h-37.656l40.504-40.87
|
||||
c2.342-2.365,3.079-5.983,1.849-9.137c-1.227-3.156-4.165-5.218-7.431-5.218h-19.958v-42.662c0-5.14-4.171-9.311-9.311-9.311
|
||||
h-28.231c-5.14,0-9.311,4.168-9.311,9.311v42.662h-21.529c-0.016,0-0.034,0-0.047,0c-4.43,0-8.019,3.737-8.019,8.354
|
||||
c0,2.63,1.162,4.969,2.977,6.5l40.011,40.372H83.794c-21.916,0-39.684-17.771-39.684-39.684c0-18.256,12.327-33.615,29.108-38.245
|
||||
c1.854-15.541,15.058-27.598,31.094-27.598c4.85,0,9.428,1.136,13.526,3.105c7.973-22.188,29.188-38.053,54.118-38.053
|
||||
c29.896,0,54.455,22.821,57.227,51.988c15.779,7.42,26.709,23.454,26.709,42.045C255.891,200.163,235.101,220.955,209.453,220.955
|
||||
z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Cog" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path d="M16.783,10c0-1.049,0.646-1.875,1.617-2.443c-0.176-0.584-0.407-1.145-0.692-1.672c-1.089,0.285-1.97-0.141-2.711-0.883
|
||||
c-0.741-0.74-0.968-1.621-0.683-2.711c-0.527-0.285-1.088-0.518-1.672-0.691C12.074,2.57,11.047,3.215,10,3.215
|
||||
c-1.048,0-2.074-0.645-2.643-1.615C6.772,1.773,6.213,2.006,5.686,2.291c0.285,1.09,0.059,1.971-0.684,2.711
|
||||
C4.262,5.744,3.381,6.17,2.291,5.885C2.006,6.412,1.774,6.973,1.6,7.557C2.57,8.125,3.215,8.951,3.215,10
|
||||
c0,1.047-0.645,2.074-1.615,2.643c0.175,0.584,0.406,1.144,0.691,1.672c1.09-0.285,1.971-0.059,2.711,0.682
|
||||
c0.741,0.742,0.969,1.623,0.684,2.711c0.527,0.285,1.087,0.518,1.672,0.693c0.568-0.973,1.595-1.617,2.643-1.617
|
||||
c1.047,0,2.074,0.645,2.643,1.617c0.584-0.176,1.144-0.408,1.672-0.693c-0.285-1.088-0.059-1.969,0.683-2.711
|
||||
c0.741-0.74,1.622-1.166,2.711-0.883c0.285-0.527,0.517-1.086,0.692-1.672C17.429,11.873,16.783,11.047,16.783,10z M10,13.652
|
||||
c-2.018,0-3.653-1.635-3.653-3.652c0-2.018,1.636-3.654,3.653-3.654c2.018,0,3.652,1.637,3.652,3.654
|
||||
C13.652,12.018,12.018,13.652,10,13.652z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,47 +1,47 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.999,74.97c-41.191,0-74.703,33.509-74.703,74.7c0,41.194,33.512,74.706,74.703,74.706
|
||||
c41.191,0,74.703-33.512,74.703-74.706C224.702,108.482,191.19,74.97,149.999,74.97z M108.727,190.937l21.2-50.414l29.222,29.214
|
||||
L108.727,190.937z M170.117,158.699l-29.155-29.147l50.303-21.148L170.117,158.699z"/>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M149.999,239.938c-49.771,0-90.265-40.494-90.265-90.267c0-49.771,40.491-90.262,90.265-90.262
|
||||
c49.774,0,90.265,40.491,90.265,90.262S199.77,239.938,149.999,239.938z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.999,74.97c-41.191,0-74.703,33.509-74.703,74.7c0,41.194,33.512,74.706,74.703,74.706
|
||||
c41.191,0,74.703-33.512,74.703-74.706C224.702,108.482,191.19,74.97,149.999,74.97z M108.727,190.937l21.2-50.414l29.222,29.214
|
||||
L108.727,190.937z M170.117,158.699l-29.155-29.147l50.303-21.148L170.117,158.699z"/>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M149.999,239.938c-49.771,0-90.265-40.494-90.265-90.267c0-49.771,40.491-90.262,90.265-90.262
|
||||
c49.774,0,90.265,40.491,90.265,90.262S199.77,239.938,149.999,239.938z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 112 KiB |
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Database" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path d="M16.726,12.641c-0.843,1.363-3.535,2.361-6.726,2.361c-3.191,0-5.883-0.998-6.727-2.361C3.095,12.351,3,12.506,3,12.648
|
||||
c0,0.144,0,2.002,0,2.002C3,16.59,6.134,18.6,10,18.6s7-2.01,7-3.949c0,0,0-1.858,0-2.002C17,12.506,16.904,12.351,16.726,12.641z
|
||||
M16.737,7.525c-0.83,1.205-3.532,2.09-6.737,2.09c-3.205,0-5.908-0.885-6.738-2.09C3.091,7.277,3,7.412,3,7.523
|
||||
c0,0.113,0,2.357,0,2.357c0,1.762,3.134,3.189,7,3.189s7-1.428,7-3.189c0,0,0-2.244,0-2.357C17,7.412,16.908,7.277,16.737,7.525z
|
||||
M10,1C6.134,1,3,2.18,3,3.633v1.26c0,1.541,3.134,2.791,7,2.791s7-1.25,7-2.791v-1.26C17,2.18,13.866,1,10,1z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1 KiB |
|
@ -1,50 +1,50 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<rect x="103.313" y="157.774" width="93.369" height="10.374"/>
|
||||
<rect x="103.313" y="134.761" width="93.369" height="10.374"/>
|
||||
<path d="M149.995,0.001C67.156,0.001,0,67.16,0,149.999s67.156,149.997,149.995,149.997s150.003-67.161,150.003-149.997
|
||||
C299.997,67.157,232.834,0.001,149.995,0.001z M185.688,64.563l31.517,28.669h-31.517V64.563z M198.982,235.43h-97.967
|
||||
c-10.068,0-18.225-8.159-18.225-18.225V82.79c0-10.066,8.159-18.225,18.225-18.225h76.889v36.45h39.298v92.412H180.2h-10.374
|
||||
V203.8h-66.512v10.374h66.513v5.942v10.374H180.2h31.229C208.169,233.547,203.799,235.43,198.982,235.43z M230.018,220.116
|
||||
L230.018,220.116H180.2V203.8h49.818V220.116z"/>
|
||||
<rect x="103.313" y="111.746" width="93.369" height="10.374"/>
|
||||
<rect x="103.313" y="180.787" width="93.369" height="10.374"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<rect x="103.313" y="157.774" width="93.369" height="10.374"/>
|
||||
<rect x="103.313" y="134.761" width="93.369" height="10.374"/>
|
||||
<path d="M149.995,0.001C67.156,0.001,0,67.16,0,149.999s67.156,149.997,149.995,149.997s150.003-67.161,150.003-149.997
|
||||
C299.997,67.157,232.834,0.001,149.995,0.001z M185.688,64.563l31.517,28.669h-31.517V64.563z M198.982,235.43h-97.967
|
||||
c-10.068,0-18.225-8.159-18.225-18.225V82.79c0-10.066,8.159-18.225,18.225-18.225h76.889v36.45h39.298v92.412H180.2h-10.374
|
||||
V203.8h-66.512v10.374h66.513v5.942v10.374H180.2h31.229C208.169,233.547,203.799,235.43,198.982,235.43z M230.018,220.116
|
||||
L230.018,220.116H180.2V203.8h49.818V220.116z"/>
|
||||
<rect x="103.313" y="111.746" width="93.369" height="10.374"/>
|
||||
<rect x="103.313" y="180.787" width="93.369" height="10.374"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Grid" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8,4H5C4.447,4,4,4.447,4,5v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1V5
|
||||
C9,4.448,8.553,4,8,4z M15,4h-3c-0.553,0-1,0.447-1,1v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1V5C16,4.448,15.553,4,15,4z M8,11
|
||||
H5c-0.553,0-1,0.447-1,1v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1v-3C9,11.448,8.553,11,8,11z M15,11h-3c-0.553,0-1,0.447-1,1v3
|
||||
c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1v-3C16,11.448,15.553,11,15,11z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 908 B |
|
@ -1,49 +1,49 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.997,0C67.157,0,0.001,67.158,0.001,149.995s67.156,150.003,149.995,150.003s150-67.163,150-150.003
|
||||
S232.836,0,149.997,0z M40.732,206.496c0-46.858,41.152-46.848,50.284-59.1l1.045-5.587c-12.83-6.505-21.887-22.178-21.887-40.514
|
||||
c0-24.154,15.712-43.738,35.089-43.738c15.258,0,28.205,12.164,33.037,29.118c-19.41,6.168-33.768,27.214-33.768,52.232
|
||||
c0,17.224,6.79,33.06,17.937,43.121c-1.79,0.918-3.781,1.854-5.493,2.656c-8.989,4.217-21.449,10.079-30.438,21.812H40.732z
|
||||
M150.453,244.105v-0.002h-0.916H85.466c0-46.856,41.152-46.843,50.284-59.095l1.045-5.587
|
||||
c-12.83-6.505-21.887-22.178-21.887-40.514c0-24.154,15.712-43.738,35.089-43.738c19.377,0,35.089,19.584,35.089,43.738
|
||||
c0,18.178-8.896,33.758-21.555,40.361l1.19,6.352c10.019,11.658,49.802,12.418,49.802,58.485H150.453z M213.452,206.498v-0.002h0
|
||||
c-8.992-11.731-21.452-17.592-30.441-21.809c-1.769-0.83-3.73-1.751-5.483-2.651c11.137-10.074,17.935-25.944,17.935-43.129
|
||||
c0-25.015-14.353-46.057-33.758-52.227c4.829-16.957,17.776-29.121,33.037-29.121c19.379,0,35.089,19.584,35.089,43.738
|
||||
c0,18.178-8.896,33.756-21.555,40.361l1.19,6.352c10.019,11.656,49.802,12.415,49.802,58.488H213.452z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.997,0C67.157,0,0.001,67.158,0.001,149.995s67.156,150.003,149.995,150.003s150-67.163,150-150.003
|
||||
S232.836,0,149.997,0z M40.732,206.496c0-46.858,41.152-46.848,50.284-59.1l1.045-5.587c-12.83-6.505-21.887-22.178-21.887-40.514
|
||||
c0-24.154,15.712-43.738,35.089-43.738c15.258,0,28.205,12.164,33.037,29.118c-19.41,6.168-33.768,27.214-33.768,52.232
|
||||
c0,17.224,6.79,33.06,17.937,43.121c-1.79,0.918-3.781,1.854-5.493,2.656c-8.989,4.217-21.449,10.079-30.438,21.812H40.732z
|
||||
M150.453,244.105v-0.002h-0.916H85.466c0-46.856,41.152-46.843,50.284-59.095l1.045-5.587
|
||||
c-12.83-6.505-21.887-22.178-21.887-40.514c0-24.154,15.712-43.738,35.089-43.738c19.377,0,35.089,19.584,35.089,43.738
|
||||
c0,18.178-8.896,33.758-21.555,40.361l1.19,6.352c10.019,11.658,49.802,12.418,49.802,58.485H150.453z M213.452,206.498v-0.002h0
|
||||
c-8.992-11.731-21.452-17.592-30.441-21.809c-1.769-0.83-3.73-1.751-5.483-2.651c11.137-10.074,17.935-25.944,17.935-43.129
|
||||
c0-25.015-14.353-46.057-33.758-52.227c4.829-16.957,17.776-29.121,33.037-29.121c19.379,0,35.089,19.584,35.089,43.738
|
||||
c0,18.178-8.896,33.756-21.555,40.361l1.19,6.352c10.019,11.656,49.802,12.415,49.802,58.488H213.452z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Hour_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path d="M15.6,4.576c0-2.139,0-2.348,0-2.348C15.6,1.439,13.092,0,10,0C6.907,0,4.4,1.439,4.4,2.228c0,0,0,0.209,0,2.348
|
||||
C4.4,6.717,8.277,8.484,8.277,10c0,1.514-3.877,3.281-3.877,5.422c0,2.141,0,2.35,0,2.35C4.4,18.56,6.907,20,10,20
|
||||
c3.092,0,5.6-1.44,5.6-2.229c0,0,0-0.209,0-2.35c0-2.141-3.877-3.908-3.877-5.422C11.723,8.484,15.6,6.717,15.6,4.576z M5.941,2.328
|
||||
c0.696-0.439,2-1.082,4.114-1.082c2.113,0,4.006,1.082,4.006,1.082c0.142,0.086,0.698,0.383,0.317,0.609
|
||||
C13.54,3.434,11.9,3.957,10,3.957c-1.9,0-3.484-0.576-4.324-1.074C5.295,2.658,5.941,2.328,5.941,2.328z M10.501,10
|
||||
c0,1.193,0.996,1.961,2.051,2.986c0.771,0.748,1.826,1.773,1.826,2.435v1.328c-0.97-0.483-3.872-0.955-3.872-2.504
|
||||
c0-0.783-1.013-0.783-1.013,0c0,1.549-2.902,2.021-3.872,2.504v-1.328c0-0.662,1.056-1.688,1.826-2.435
|
||||
C8.502,11.961,9.498,11.193,9.498,10c0-1.193-0.996-1.961-2.051-2.986c-0.771-0.75-1.826-1.775-1.826-2.438L5.575,3.578
|
||||
C6.601,4.131,8.227,4.656,10,4.656c1.772,0,3.406-0.525,4.433-1.078l-0.055,0.998c0,0.662-1.056,1.688-1.826,2.438
|
||||
C11.498,8.039,10.501,8.807,10.501,10z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Inbox" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" style="enable-background:new 0 0 20 20;" xml:space="preserve">
|
||||
<path d="M19.253,9.542c-0.388-0.416-2.265-2.271-3.122-3.118C15.868,6.165,15.492,6,15.098,6H4.902c-0.394,0-0.77,0.165-1.033,0.424
|
||||
C3.011,7.271,1.135,9.125,0.747,9.542c-0.485,0.521-0.723,0.902-0.624,1.449s0.466,2.654,0.556,3.074
|
||||
C0.767,14.484,1.363,15,1.919,15h16.162c0.556,0,1.152-0.516,1.241-0.935c0.089-0.42,0.457-2.527,0.556-3.074
|
||||
S19.739,10.062,19.253,9.542z M14.014,10.003c-0.101,0-0.193,0.052-0.238,0.133L12.966,12H7.034l-0.809-1.864
|
||||
c-0.045-0.081-0.137-0.133-0.238-0.133H2.473L4.495,8h11.01l2.023,2.003H14.014z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 989 B |
|
@ -1,51 +1,51 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.838,0,149.996,0z M234.752,201.789l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809
|
||||
L65.25,201.792c-3.851-1.909-5.426-6.577-3.517-10.429c1.906-3.846,6.58-5.426,10.426-3.517l77.844,38.58l77.841-38.577
|
||||
c3.844-1.911,8.517-0.335,10.426,3.514C240.178,195.211,238.603,199.88,234.752,201.789z M234.752,172.18l-81.296,40.291
|
||||
c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809L65.25,172.183c-3.851-1.909-5.426-6.577-3.517-10.429
|
||||
c1.906-3.849,6.58-5.421,10.426-3.517l77.844,38.58l77.841-38.577c3.844-1.917,8.517-0.335,10.426,3.514
|
||||
C240.178,165.603,238.603,170.271,234.752,172.18z M234.752,142.572l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812
|
||||
c-1.183,0-2.368-0.27-3.455-0.809L65.25,142.572c-3.851-1.909-5.426-6.577-3.517-10.426c1.906-3.849,6.58-5.426,10.426-3.517
|
||||
l77.844,38.58l77.841-38.58c3.844-1.906,8.517-0.335,10.426,3.517C240.178,135.995,238.603,140.663,234.752,142.572z
|
||||
M234.752,111.506l-81.296,40.289c-1.089,0.539-2.272,0.809-3.455,0.809c-1.183,0-2.368-0.27-3.455-0.809L65.25,111.506
|
||||
c-2.648-1.312-4.326-4.015-4.326-6.972c0-2.957,1.675-5.659,4.326-6.972l81.299-40.294c2.176-1.079,4.733-1.079,6.909,0
|
||||
l81.296,40.294c2.648,1.312,4.326,4.015,4.326,6.972C239.08,107.491,237.403,110.191,234.752,111.506z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.838,0,149.996,0z M234.752,201.789l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809
|
||||
L65.25,201.792c-3.851-1.909-5.426-6.577-3.517-10.429c1.906-3.846,6.58-5.426,10.426-3.517l77.844,38.58l77.841-38.577
|
||||
c3.844-1.911,8.517-0.335,10.426,3.514C240.178,195.211,238.603,199.88,234.752,201.789z M234.752,172.18l-81.296,40.291
|
||||
c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809L65.25,172.183c-3.851-1.909-5.426-6.577-3.517-10.429
|
||||
c1.906-3.849,6.58-5.421,10.426-3.517l77.844,38.58l77.841-38.577c3.844-1.917,8.517-0.335,10.426,3.514
|
||||
C240.178,165.603,238.603,170.271,234.752,172.18z M234.752,142.572l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812
|
||||
c-1.183,0-2.368-0.27-3.455-0.809L65.25,142.572c-3.851-1.909-5.426-6.577-3.517-10.426c1.906-3.849,6.58-5.426,10.426-3.517
|
||||
l77.844,38.58l77.841-38.58c3.844-1.906,8.517-0.335,10.426,3.517C240.178,135.995,238.603,140.663,234.752,142.572z
|
||||
M234.752,111.506l-81.296,40.289c-1.089,0.539-2.272,0.809-3.455,0.809c-1.183,0-2.368-0.27-3.455-0.809L65.25,111.506
|
||||
c-2.648-1.312-4.326-4.015-4.326-6.972c0-2.957,1.675-5.659,4.326-6.972l81.299-40.294c2.176-1.079,4.733-1.079,6.909,0
|
||||
l81.296,40.294c2.648,1.312,4.326,4.015,4.326,6.972C239.08,107.491,237.403,110.191,234.752,111.506z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -1,44 +1,44 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M148.751,218.468c-12.893,0-23.342-11.082-23.342-24.764h46.685
|
||||
C172.093,207.386,161.641,218.468,148.751,218.468z M170.413,180.695h-43.326c-1.167-12.753-31.476-23.871-31.476-55.747
|
||||
c0-33.999,25.425-52.027,53.135-52.709h0.003c0.003,0,0.003,0,0.003,0c27.712,0.685,53.135,18.71,53.135,52.709
|
||||
C201.889,156.824,171.58,167.942,170.413,180.695z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M148.751,218.468c-12.893,0-23.342-11.082-23.342-24.764h46.685
|
||||
C172.093,207.386,161.641,218.468,148.751,218.468z M170.413,180.695h-43.326c-1.167-12.753-31.476-23.871-31.476-55.747
|
||||
c0-33.999,25.425-52.027,53.135-52.709h0.003c0.003,0,0.003,0,0.003,0c27.712,0.685,53.135,18.71,53.135,52.709
|
||||
C201.889,156.824,171.58,167.942,170.413,180.695z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1,001 B |
|
@ -1,53 +1,53 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.997 299.997" style="enable-background:new 0 0 299.997 299.997;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.158,0.001,149.997c0,82.837,67.156,150,149.995,150s150-67.163,150-150
|
||||
C299.996,67.158,232.835,0,149.996,0z M145.294,100.159h111.864c0.763,0,1.502,0.091,2.225,0.223l-62.648,36.017l-52.964-36.087
|
||||
C144.275,100.25,144.77,100.159,145.294,100.159z M60.572,185.31v-15.558h49.921l-0.609,5.047l-0.112,0.931v0.936
|
||||
c0,3.019,0.501,5.921,1.398,8.644H60.572z M112.293,154.842h-68.58V139.28h70.465L112.293,154.842z M117.571,111.218l-0.965,7.965
|
||||
H28.585v-15.562h90.384C118.17,106.028,117.677,108.573,117.571,111.218z M249.375,188.852H137.513
|
||||
c-3.348,0-6.378-1.351-8.58-3.538c0,0,0,0,0-0.003c-0.539-0.537-1.027-1.128-1.46-1.758c-0.01-0.016-0.029-0.031-0.039-0.047
|
||||
c-0.402-0.594-0.737-1.232-1.032-1.891c-0.029-0.065-0.073-0.122-0.104-0.189c-0.265-0.622-0.451-1.284-0.609-1.956
|
||||
c-0.029-0.117-0.083-0.223-0.106-0.34c-0.163-0.799-0.249-1.621-0.249-2.464l4.145-34.259l0.379-3.13l3.258-26.94
|
||||
c0-0.77,0.093-1.515,0.231-2.243c0.016-0.078,0.008-0.163,0.026-0.241c0.01,0.005,0.018,0.013,0.029,0.021
|
||||
c0.35-1.662,1.012-3.206,1.958-4.547v5.88l57.741,39.132c0.078,0.054,0.163,0.083,0.244,0.13c0.083,0.052,0.169,0.093,0.257,0.14
|
||||
c0.456,0.233,0.923,0.42,1.401,0.545c0.052,0.013,0.099,0.021,0.15,0.031c0.524,0.124,1.056,0.2,1.582,0.2h0.005
|
||||
c0.005,0,0.008,0,0.01,0c0.527,0,1.058-0.075,1.582-0.2c0.052-0.01,0.099-0.018,0.15-0.031c0.477-0.124,0.944-0.311,1.401-0.545
|
||||
c0.086-0.047,0.171-0.088,0.257-0.14c0.08-0.047,0.163-0.075,0.244-0.13l68.792-39.716c0.08,0.565,0.171,1.128,0.171,1.717
|
||||
l-7.781,64.329C261.559,183.4,256.105,188.852,249.375,188.852z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.997 299.997" style="enable-background:new 0 0 299.997 299.997;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.158,0.001,149.997c0,82.837,67.156,150,149.995,150s150-67.163,150-150
|
||||
C299.996,67.158,232.835,0,149.996,0z M145.294,100.159h111.864c0.763,0,1.502,0.091,2.225,0.223l-62.648,36.017l-52.964-36.087
|
||||
C144.275,100.25,144.77,100.159,145.294,100.159z M60.572,185.31v-15.558h49.921l-0.609,5.047l-0.112,0.931v0.936
|
||||
c0,3.019,0.501,5.921,1.398,8.644H60.572z M112.293,154.842h-68.58V139.28h70.465L112.293,154.842z M117.571,111.218l-0.965,7.965
|
||||
H28.585v-15.562h90.384C118.17,106.028,117.677,108.573,117.571,111.218z M249.375,188.852H137.513
|
||||
c-3.348,0-6.378-1.351-8.58-3.538c0,0,0,0,0-0.003c-0.539-0.537-1.027-1.128-1.46-1.758c-0.01-0.016-0.029-0.031-0.039-0.047
|
||||
c-0.402-0.594-0.737-1.232-1.032-1.891c-0.029-0.065-0.073-0.122-0.104-0.189c-0.265-0.622-0.451-1.284-0.609-1.956
|
||||
c-0.029-0.117-0.083-0.223-0.106-0.34c-0.163-0.799-0.249-1.621-0.249-2.464l4.145-34.259l0.379-3.13l3.258-26.94
|
||||
c0-0.77,0.093-1.515,0.231-2.243c0.016-0.078,0.008-0.163,0.026-0.241c0.01,0.005,0.018,0.013,0.029,0.021
|
||||
c0.35-1.662,1.012-3.206,1.958-4.547v5.88l57.741,39.132c0.078,0.054,0.163,0.083,0.244,0.13c0.083,0.052,0.169,0.093,0.257,0.14
|
||||
c0.456,0.233,0.923,0.42,1.401,0.545c0.052,0.013,0.099,0.021,0.15,0.031c0.524,0.124,1.056,0.2,1.582,0.2h0.005
|
||||
c0.005,0,0.008,0,0.01,0c0.527,0,1.058-0.075,1.582-0.2c0.052-0.01,0.099-0.018,0.15-0.031c0.477-0.124,0.944-0.311,1.401-0.545
|
||||
c0.086-0.047,0.171-0.088,0.257-0.14c0.08-0.047,0.163-0.075,0.244-0.13l68.792-39.716c0.08,0.565,0.171,1.128,0.171,1.717
|
||||
l-7.781,64.329C261.559,183.4,256.105,188.852,249.375,188.852z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
@ -1,46 +1,46 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M133.314,149.997c0,3.133-0.571,6.111-1.569,8.901l41.868,20.142c4.819-5.275,11.731-8.595,19.436-8.595
|
||||
c14.553,0,26.353,11.796,26.353,26.348c0,14.555-11.803,26.356-26.359,26.356c-14.553,0-26.359-11.801-26.359-26.356
|
||||
c0-1.395,0.145-2.757,0.353-4.09l-44.568-21.436c-4.357,3.188-9.71,5.089-15.52,5.089c-14.555,0-26.356-11.796-26.356-26.361
|
||||
c0-14.55,11.801-26.348,26.356-26.348c5.81,0,11.165,1.901,15.523,5.086l44.571-21.431c-0.21-1.336-0.353-2.692-0.353-4.09
|
||||
c0-14.558,11.803-26.356,26.359-26.356c14.553,0,26.356,11.798,26.356,26.356c0,14.555-11.803,26.356-26.356,26.356
|
||||
c-7.7,0-14.617-3.328-19.436-8.598l-41.868,20.134C132.744,143.89,133.314,146.875,133.314,149.997z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
|
||||
S232.835,0,149.996,0z M133.314,149.997c0,3.133-0.571,6.111-1.569,8.901l41.868,20.142c4.819-5.275,11.731-8.595,19.436-8.595
|
||||
c14.553,0,26.353,11.796,26.353,26.348c0,14.555-11.803,26.356-26.359,26.356c-14.553,0-26.359-11.801-26.359-26.356
|
||||
c0-1.395,0.145-2.757,0.353-4.09l-44.568-21.436c-4.357,3.188-9.71,5.089-15.52,5.089c-14.555,0-26.356-11.796-26.356-26.361
|
||||
c0-14.55,11.801-26.348,26.356-26.348c5.81,0,11.165,1.901,15.523,5.086l44.571-21.431c-0.21-1.336-0.353-2.692-0.353-4.09
|
||||
c0-14.558,11.803-26.356,26.359-26.356c14.553,0,26.356,11.798,26.356,26.356c0,14.555-11.803,26.356-26.356,26.356
|
||||
c-7.7,0-14.617-3.328-19.436-8.598l-41.868,20.134C132.744,143.89,133.314,146.875,133.314,149.997z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sound_mute" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path d="M14.201,9.194c1.389,1.883,1.818,3.517,1.559,3.777c-0.26,0.258-1.893-0.17-3.778-1.559l-5.526,5.527
|
||||
c4.186,1.838,9.627-2.018,10.605-2.996c0.925-0.922,0.097-3.309-1.856-5.754L14.201,9.194z M8.667,7.941
|
||||
c-1.099-1.658-1.431-3.023-1.194-3.26c0.233-0.234,1.6,0.096,3.257,1.197l1.023-1.025C9.489,3.179,7.358,2.519,6.496,3.384
|
||||
C5.568,4.31,2.048,9.261,3.265,13.341L8.667,7.941z M18.521,1.478c-0.39-0.391-1.023-0.391-1.414,0L1.478,17.108
|
||||
c-0.391,0.391-0.391,1.024,0,1.414c0.391,0.391,1.023,0.391,1.414,0L18.521,2.892C18.912,2.501,18.912,1.868,18.521,1.478z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1,020 B |
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.99 299.99" style="enable-background:new 0 0 299.99 299.99;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.995,0C67.158,0,0,67.156,0,149.995S67.158,299.99,149.995,299.99c82.839,0,149.995-67.156,149.995-149.995
|
||||
S232.834,0,149.995,0z M89.481,211.219l-37.176,9.959l10.177-37.973c-7.01-12.05-11.051-26.05-11.051-40.997
|
||||
c0-45.074,36.541-81.618,81.62-81.618c45.071,0,81.615,36.544,81.615,81.618c0,45.074-36.544,81.62-81.615,81.62
|
||||
C117.023,223.832,102.091,219.199,89.481,211.219z M247.76,236.976l-33.818-9.059c-11.477,7.257-25.057,11.474-39.63,11.474
|
||||
c-10.39,0-20.271-2.142-29.248-5.999c45.064-5.9,79.981-44.527,79.981-91.177c0-13.518-2.959-26.351-8.216-37.926
|
||||
c19.182,13.427,31.73,35.67,31.73,60.853c0,13.596-3.673,26.33-10.05,37.293L247.76,236.976z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 299.99 299.99" style="enable-background:new 0 0 299.99 299.99;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M149.995,0C67.158,0,0,67.156,0,149.995S67.158,299.99,149.995,299.99c82.839,0,149.995-67.156,149.995-149.995
|
||||
S232.834,0,149.995,0z M89.481,211.219l-37.176,9.959l10.177-37.973c-7.01-12.05-11.051-26.05-11.051-40.997
|
||||
c0-45.074,36.541-81.618,81.62-81.618c45.071,0,81.615,36.544,81.615,81.618c0,45.074-36.544,81.62-81.615,81.62
|
||||
C117.023,223.832,102.091,219.199,89.481,211.219z M247.76,236.976l-33.818-9.059c-11.477,7.257-25.057,11.474-39.63,11.474
|
||||
c-10.39,0-20.271-2.142-29.248-5.999c45.064-5.9,79.981-44.527,79.981-91.177c0-13.518-2.959-26.351-8.216-37.926
|
||||
c19.182,13.427,31.73,35.67,31.73,60.853c0,13.596-3.673,26.33-10.05,37.293L247.76,236.976z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 120 KiB |
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Windows_Store" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
|
||||
<path d="M9.5,3.2410278V9.5H18V2L9.5,3.2410278z M2,9.5h6.5V3.3870239L2,4.3359985V9.5z M9.5,16.7589722L18,18v-7.5H9.5V16.7589722z
|
||||
M2,15.6640015l6.5,0.9489746V10.5H2V15.6640015z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 639 B |
|
@ -1 +0,0 @@
|
|||
docker run --rm -v "$PWD:/src" -p 4000:4000 -p 35729:35729 markkimsal/jekyll-plus
|
161
documentation/SUMMARY.md
Normal file
|
@ -0,0 +1,161 @@
|
|||
# Table of contents
|
||||
|
||||
* [Introduction to DNSControl](index.md)
|
||||
|
||||
## Getting Started
|
||||
|
||||
* [Overview](getting-started.md)
|
||||
* [Examples](examples.md)
|
||||
* [Migrating zones to DNSControl](migrating.md)
|
||||
* [TypeScript autocomplete and type checking](typescript.md)
|
||||
|
||||
## Language Reference
|
||||
|
||||
* [JavaScript DSL](js.md)
|
||||
* Top Level Functions
|
||||
* [D](functions/global/D.md)
|
||||
* [DEFAULTS](functions/global/DEFAULTS.md)
|
||||
* [DOMAIN_ELSEWHERE](functions/global/DOMAIN_ELSEWHERE.md)
|
||||
* [DOMAIN_ELSEWHERE_AUTO](functions/global/DOMAIN_ELSEWHERE_AUTO.md)
|
||||
* [D_EXTEND](functions/global/D_EXTEND.md)
|
||||
* [FETCH](functions/global/FETCH.md)
|
||||
* [IP](functions/global/IP.md)
|
||||
* [NewDnsProvider](functions/global/NewDnsProvider.md)
|
||||
* [NewRegistrar](functions/global/NewRegistrar.md)
|
||||
* [PANIC](functions/global/PANIC.md)
|
||||
* [REV](functions/global/REV.md)
|
||||
* [getConfiguredDomains](functions/global/getConfiguredDomains.md)
|
||||
* [require](functions/global/require.md)
|
||||
* [require_glob](functions/global/require_glob.md)
|
||||
* Domain Modifiers
|
||||
* [A](functions/domain/A.md)
|
||||
* [AAAA](functions/domain/AAAA.md)
|
||||
* [ALIAS](functions/domain/ALIAS.md)
|
||||
* [AUTODNSSEC_OFF](functions/domain/AUTODNSSEC_OFF.md)
|
||||
* [AUTODNSSEC_ON](functions/domain/AUTODNSSEC_ON.md)
|
||||
* [CAA](functions/domain/CAA.md)
|
||||
* [CNAME](functions/domain/CNAME.md)
|
||||
* [DS](functions/domain/DS.md)
|
||||
* [DefaultTTL](functions/domain/DefaultTTL.md)
|
||||
* [DnsProvider](functions/domain/DnsProvider.md)
|
||||
* [FRAME](functions/domain/FRAME.md)
|
||||
* [IGNORE](functions/domain/IGNORE.md)
|
||||
* [IGNORE_NAME](functions/domain/IGNORE_NAME.md)
|
||||
* [IGNORE_TARGET](functions/domain/IGNORE_TARGET.md)
|
||||
* [IMPORT_TRANSFORM](functions/domain/IMPORT_TRANSFORM.md)
|
||||
* [INCLUDE](functions/domain/INCLUDE.md)
|
||||
* [MX](functions/domain/MX.md)
|
||||
* [NAMESERVER](functions/domain/NAMESERVER.md)
|
||||
* [NAMESERVER_TTL](functions/domain/NAMESERVER_TTL.md)
|
||||
* [NO_PURGE](functions/domain/NO_PURGE.md)
|
||||
* [NS](functions/domain/NS.md)
|
||||
* [PTR](functions/domain/PTR.md)
|
||||
* [PURGE](functions/domain/PURGE.md)
|
||||
* [SOA](functions/domain/SOA.md)
|
||||
* [SRV](functions/domain/SRV.md)
|
||||
* [SSHFP](functions/domain/SSHFP.md)
|
||||
* [TLSA](functions/domain/TLSA.md)
|
||||
* [TXT](functions/domain/TXT.md)
|
||||
* [URL](functions/domain/URL.md)
|
||||
* [URL301](functions/domain/URL301.md)
|
||||
* Service Provider specific
|
||||
* Akamai Edge Dns
|
||||
* [AKAMAICDN](functions/domain/AKAMAICDN.md)
|
||||
* Amazon Route 53
|
||||
* [R53_ALIAS](functions/domain/R53_ALIAS.md)
|
||||
* Azure DNS
|
||||
* [AZURE_ALIAS](functions/domain/AZURE_ALIAS.md)
|
||||
* Cloudflare DNS
|
||||
* [CF_REDIRECT](functions/domain/CF_REDIRECT.md)
|
||||
* [CF_TEMP_REDIRECT](functions/domain/CF_TEMP_REDIRECT.md)
|
||||
* [CF_WORKER_ROUTE](functions/domain/CF_WORKER_ROUTE.md)
|
||||
* ClouDNS
|
||||
* [CLOUDNS_WR](functions/domain/CLOUDNS_WR.md)
|
||||
* NS1
|
||||
* [NS1_URLFWD](functions/domain/NS1_URLFWD.md)
|
||||
* Record Modifiers
|
||||
* [CAA_BUILDER](functions/record/CAA_BUILDER.md)
|
||||
* [DMARC_BUILDER](functions/record/DMARC_BUILDER.md)
|
||||
* [SPF_BUILDER](functions/record/SPF_BUILDER.md)
|
||||
* [TTL](functions/record/TTL.md)
|
||||
* Service Provider specific
|
||||
* Amazon Route 53
|
||||
* [R53_ZONE](functions/record/R53_ZONE.md)
|
||||
* [Why CNAME/MX/NS targets require a "dot"](why-the-dot.md)
|
||||
|
||||
## Service Providers
|
||||
|
||||
* [Providers](providers.md)
|
||||
* [Akamai Edge DNS](providers/akamaiedgedns.md)
|
||||
* [AutoDNS](providers/autodns.md)
|
||||
* [AXFR+DDNS](providers/axfrddns.md)
|
||||
* [Azure DNS](providers/azure_dns.md)
|
||||
* [BIND](providers/bind.md)
|
||||
* [Cloudflare](providers/cloudflareapi.md)
|
||||
* [ClouDNS](providers/cloudns.md)
|
||||
* [CSC Global](providers/cscglobal.md)
|
||||
* [deSEC](providers/desec.md)
|
||||
* [DigitalOcean](providers/digitalocean.md)
|
||||
* [DNSimple](providers/dnsimple.md)
|
||||
* [DNS Made Simple](providers/dnsmadeeasy.md)
|
||||
* [DNS-over-HTTPS](providers/dnsoverhttps.md)
|
||||
* [DOMAINNAMESHOP](providers/domainnameshop.md)
|
||||
* [easyname](providers/easyname.md)
|
||||
* [Gandi_v5](providers/gandi_v5.md)
|
||||
* [Google Cloud DNS](providers/gcloud.md)
|
||||
* [Gcore](providers/gcore.md)
|
||||
* [Hurricane Electric DNS](providers/hedns.md)
|
||||
* [Hetzner DNS Console](providers/hetzner.md)
|
||||
* [HEXONET](providers/hexonet.md)
|
||||
* [hosting.de](providers/hostingde.md)
|
||||
* [Internet.bs](providers/internetbs.md)
|
||||
* [INWX](providers/inwx.md)
|
||||
* [Linode](providers/linode.md)
|
||||
* [Microsoft DNS Server on Microsoft Windows Server](providers/msdns.md)
|
||||
* [Namecheap](providers/namecheap.md)
|
||||
* [Name.com](providers/namedotcom.md)
|
||||
* [Netcup](providers/netcup.md)
|
||||
* [Netlify](providers/netlify.md)
|
||||
* [NS1](providers/ns1.md)
|
||||
* [Oracle Cloud](providers/oracle.md)
|
||||
* [OVH](providers/ovh.md)
|
||||
* [Packetframe](providers/packetframe.md)
|
||||
* [Porkbun](providers/porkbun.md)
|
||||
* [PowerDNS](providers/powerdns.md)
|
||||
* [Amazon Route 53](providers/route53.md)
|
||||
* [RWTH DNS-Admin](providers/rwth.md)
|
||||
* [SoftLayer DNS](providers/softlayer.md)
|
||||
* [TransIP](providers/transip.md)
|
||||
* [Vultr](providers/vultr.md)
|
||||
|
||||
## Commands
|
||||
|
||||
* [creds.json](creds-json.md)
|
||||
* [check-creds](check-creds.md)
|
||||
* [get-certs](get-certs.md)
|
||||
* [get-zones](get-zones.md)
|
||||
|
||||
## Advanced features
|
||||
|
||||
* [CI/CD example for GitLab](ci-cd-gitlab.md)
|
||||
* [CLI variables](cli-variables.md)
|
||||
* [Nameservers and Delegations](nameservers.md)
|
||||
* [Notifications](notifications.md)
|
||||
* [Useful code tricks](code-tricks.md)
|
||||
|
||||
## Developer info
|
||||
|
||||
* [ALIAS Records](alias.md)
|
||||
* [Bug Triage Process](bug-triage.md)
|
||||
* [Bring-Your-Own-Secrets for automated testing](byo-secrets.md)
|
||||
* [Writing new DNS providers](writing-providers.md)
|
||||
* [Creating new DNS Resource Types (rtypes)](adding-new-rtypes.md)
|
||||
* [TXT record testing](testing-txt-records.md)
|
||||
* [Unit Testing DNS Data](unittests.md)
|
||||
* [DNSControl is an opinionated system](opinions.md)
|
||||
|
||||
## Release
|
||||
|
||||
* [How to build and ship a release](release-engineering.md)
|
||||
* [Changelog v3.16.0](v316.md)
|
||||
* [GitHub releases](https://github.com/StackExchange/dnscontrol/releases/latest)
|
|
@ -1,8 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: Creating new DNS Resource Types (rtypes)
|
||||
---
|
||||
|
||||
# Creating new DNS Resource Types (rtypes)
|
||||
|
||||
Everyone is familiar with A, AAAA, CNAME, NS and other Rtypes.
|
||||
|
@ -141,7 +136,7 @@ list.
|
|||
|
||||
Each `testgroup()` is a named list of tests.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
testgroup("MX", <<< 1
|
||||
tc("MX record", mx("@", 5, "foo.com.")), <<< 2
|
||||
tc("Change MX pref", mx("@", 10, "foo.com.")), <<< 3
|
||||
|
@ -223,12 +218,10 @@ tests, please ask!
|
|||
|
||||
## Step 8: Write documentation
|
||||
|
||||
Add a new Markdown file to `docs/_functions/domain`. Copy an existing file (`CNAME.md` is a good example). The section between the lines of `---` is called the front matter and it has the following keys:
|
||||
Add a new Markdown file to `docs/functions/domain`. Copy an existing file (`CNAME.md` is a good example). The section between the lines of `---` is called the front matter and it has the following keys:
|
||||
|
||||
- `name`: The name of the record. This should match the file name and the name of the record in `helpers.js`.
|
||||
- `parameters`: A list of parameter names, in order. Feel free to use spaces in the name if necessary. Your last parameter should be `modifiers...` to allow arbitrary modifiers like `TTL` to be applied to your record.
|
||||
- `parameter_types`: an object with parameter names as keys and TypeScript type names as values. Check out existing record documentation if you’re not sure to put for a parameter. Note that this isn’t displayed on the website, it’s only used to generate the `.d.ts` file.
|
||||
|
||||
{% raw %}
|
||||
The rest of the file is the documentation. You can use Markdown syntax to format the text. Use the `{% capture example %}` format to set up a collapsible code block. You can also use it multiple times to show multiple examples.
|
||||
{% endraw %}
|
||||
The rest of the file is the documentation. You can use Markdown syntax to format the text.
|
|
@ -1,8 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: ALIAS Records
|
||||
---
|
||||
|
||||
# ALIAS Records
|
||||
|
||||
ALIAS records are not widely standardized across DNS providers. Some (Route 53, DNSimple) have a native ALIAS record type. Others (Cloudflare) implement transparent CNAME flattening.
|
Before Width: | Height: | Size: 755 KiB After Width: | Height: | Size: 755 KiB |
Before Width: | Height: | Size: 750 KiB After Width: | Height: | Size: 750 KiB |
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 326 KiB |
Before Width: | Height: | Size: 618 KiB After Width: | Height: | Size: 618 KiB |
Before Width: | Height: | Size: 638 KiB After Width: | Height: | Size: 638 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
@ -1,13 +1,8 @@
|
|||
---
|
||||
layout: default
|
||||
title: Bug Triage Process
|
||||
---
|
||||
|
||||
# Who to assign bugs to?
|
||||
|
||||
If an issue is related to a particular provider, assign it to
|
||||
the person responsible for the provider, as listed in
|
||||
[Providers]({{site.github.url}}/provider-list)'s "Maintainers of
|
||||
[Providers](providers.md)'s "Maintainers of
|
||||
contributed providers".
|
||||
|
||||
Otherwise leave it unassigned until someone grabs it.
|
||||
|
@ -32,7 +27,7 @@ priority:
|
|||
1. Respond to the issue with the message below
|
||||
1. Close the issue
|
||||
|
||||
The [Providers]({{site.github.url}}/provider-list) page is generated
|
||||
The [Providers](providers.md) page is generated
|
||||
automatically from all the issues tagged `provider-request`:
|
||||
|
||||
1. "Requested providers: state=closed, tagged `provider-request`
|
||||
|
@ -45,7 +40,7 @@ Message to requester:
|
|||
Thank you for requesting this provider!
|
||||
|
||||
I've tagged this issue as a provider-request. It will (soon) be listed as a "requested provider" on the provider list web page:
|
||||
https://stackexchange.github.io/dnscontrol/provider-list
|
||||
https://docs.dnscontrol.org/service-providers/providers
|
||||
|
||||
I will now close the issue. I know that's a bit confusing, but it will remain on the "requested provider" list.
|
||||
|
||||
|
@ -55,6 +50,6 @@ We encourage you to try adding this provider yourself. We've tried to
|
|||
make the process as friendly as possible. Many people have reported
|
||||
that adding a provider was their first experience writing Go. The
|
||||
process is documented here:
|
||||
https://stackexchange.github.io/dnscontrol/writing-providers
|
||||
https://docs.dnscontrol.org/developer-info/writing-providers
|
||||
If you need assistance, please speak up in this issue and someone will get back to you ASAP.
|
||||
```
|
|
@ -1,8 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: Bring-Your-Own-Secrets for automated testing
|
||||
---
|
||||
|
||||
# Bring-Your-Own-Secrets for automated testing
|
||||
|
||||
Goal: Enable automated integration testing without accidentally
|
||||
|
@ -52,7 +47,7 @@ gets its secrets from TomOnTime's secrets.
|
|||
Our automated integration tests leverages this info to have tests
|
||||
only run if they have access to the secrets they will need.
|
||||
|
||||
# How it works:
|
||||
# How it works
|
||||
|
||||
Tests are executed if `*_DOMAIN` exists. If the value is empty or
|
||||
unset, the test is skipped. If a test doesn't require secrets, the
|
||||
|
@ -79,15 +74,16 @@ In this branch, edit `.github/workflows/build.yml`:
|
|||
to the matrix of providers. Technically you are adding to the list
|
||||
at `jobs.integration-tests.strategy.matrix.provider`.
|
||||
|
||||
```yaml
|
||||
matrix:
|
||||
provider:
|
||||
...
|
||||
- DIGITALOCEAN
|
||||
- FANCYDNS <<< NEW ITEM ADDED HERE
|
||||
- GANDI_V5
|
||||
- INWX
|
||||
```
|
||||
{% code title=".github/workflows/build.yml" %}
|
||||
```diff
|
||||
matrix:
|
||||
provider:
|
||||
- DIGITALOCEAN
|
||||
+ - FANCYDNS
|
||||
- GANDI_V5
|
||||
- INWX
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
2. Add your test's env:
|
||||
|
||||
|
@ -103,28 +99,28 @@ Please replicate the formatting of the existing entries:
|
|||
* The remaining variables are sorted lexicographically (what nerds call alphabetical order).
|
||||
|
||||
```yaml
|
||||
FANCYDNS_DOMAIN: ${{ secrets.FANCYDNS_DOMAIN }}
|
||||
FANCYDNS_KEY: ${{ secrets.FANCYDNS_KEY }}
|
||||
FANCYDNS_USER: ${{ secrets.FANCYDNS_USER }}
|
||||
FANCYDNS_DOMAIN: ${{ secrets.FANCYDNS_DOMAIN }}
|
||||
FANCYDNS_KEY: ${{ secrets.FANCYDNS_KEY }}
|
||||
FANCYDNS_USER: ${{ secrets.FANCYDNS_USER }}
|
||||
```
|
||||
|
||||
# Examples
|
||||
|
||||
Let's look at three examples:
|
||||
|
||||
## Example 1:
|
||||
## Example 1
|
||||
|
||||
The `BIND` integration tests do not require any secrets because it
|
||||
simply generates files locally.
|
||||
|
||||
```yaml
|
||||
BIND_DOMAIN: example.com
|
||||
BIND_DOMAIN: example.com
|
||||
```
|
||||
|
||||
The existence of `BIND_DOMAIN`, and the fact that the value is
|
||||
available to all, means these tests will run for everyone.
|
||||
|
||||
## Example 2:
|
||||
## Example 2
|
||||
|
||||
The `AZURE_DNS` provider requires many settings. Since
|
||||
`AZURE_DNS_DOMAIN` comes from GHA's secrets storage, we can be assured
|
||||
|
@ -140,15 +136,15 @@ this is not true for you, please feel free to submit a PR that turns
|
|||
it into a secret.
|
||||
|
||||
```yaml
|
||||
AZURE_DNS_DOMAIN: ${{ secrets.AZURE_DNS_DOMAIN }}
|
||||
AZURE_DNS_CLIENT_ID: ${{ secrets.AZURE_DNS_CLIENT_ID }}
|
||||
AZURE_DNS_CLIENT_SECRET: ${{ secrets.AZURE_DNS_CLIENT_SECRET }}
|
||||
AZURE_DNS_RESOURCE_GROUP: DNSControl
|
||||
AZURE_DNS_SUBSCRIPTION_ID: ${{ secrets.AZURE_DNS_SUBSCRIPTION_ID }}
|
||||
AZURE_DNS_TENANT_ID: ${{ secrets.AZURE_DNS_TENANT_ID }}
|
||||
AZURE_DNS_DOMAIN: ${{ secrets.AZURE_DNS_DOMAIN }}
|
||||
AZURE_DNS_CLIENT_ID: ${{ secrets.AZURE_DNS_CLIENT_ID }}
|
||||
AZURE_DNS_CLIENT_SECRET: ${{ secrets.AZURE_DNS_CLIENT_SECRET }}
|
||||
AZURE_DNS_RESOURCE_GROUP: DNSControl
|
||||
AZURE_DNS_SUBSCRIPTION_ID: ${{ secrets.AZURE_DNS_SUBSCRIPTION_ID }}
|
||||
AZURE_DNS_TENANT_ID: ${{ secrets.AZURE_DNS_TENANT_ID }}
|
||||
```
|
||||
|
||||
## Example 3:
|
||||
## Example 3
|
||||
|
||||
The HEXONET integration tests require secrets, but HEXONET provides an
|
||||
Operational Test and Evaluation (OT&E) environment with some "fake"
|
||||
|
@ -160,14 +156,15 @@ secrets, we hard-code them into the `build.yml` file. Since
|
|||
these tests. (We are grateful to HEXONET for this public service!)
|
||||
|
||||
```yaml
|
||||
HEXONET_DOMAIN: yodream.com
|
||||
HEXONET_ENTITY: OTE
|
||||
HEXONET_PW: test.passw0rd
|
||||
HEXONET_UID: test.user
|
||||
HEXONET_DOMAIN: yodream.com
|
||||
HEXONET_ENTITY: OTE
|
||||
HEXONET_PW: test.passw0rd
|
||||
HEXONET_UID: test.user
|
||||
```
|
||||
|
||||
NOTE: The above credentials are [known to the public]({{site.github.url}}/providers/hexonet).
|
||||
|
||||
{% hint style="info" %}
|
||||
**NOTE**: The above credentials are [known to the public](providers/hexonet.md).
|
||||
{% endhint %}
|
||||
|
||||
# Caveats
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: Check-Creds subcommand
|
||||
---
|
||||
|
||||
# check-creds
|
||||
|
||||
This is a stand-alone utility to help verify entries in `creds.json`.
|
||||
|
@ -10,6 +5,7 @@ This is a stand-alone utility to help verify entries in `creds.json`.
|
|||
The command does a trivia operation to verify credentials. If
|
||||
successful, a list of zones will be output (which may be an empty list). If the credentials or other problems prevent this operation from executing, the exit code will be non-zero and hopefully verbose error messages will be output.
|
||||
|
||||
```text
|
||||
Syntax:
|
||||
|
||||
dnscontrol check-creds [command options] credkey provider
|
||||
|
@ -20,19 +16,31 @@ Syntax:
|
|||
ARGUMENTS:
|
||||
credkey: The name used in creds.json (first parameter to NewDnsProvider() in dnsconfig.js)
|
||||
provider: The name of the provider (second parameter to NewDnsProvider() in dnsconfig.js)
|
||||
```
|
||||
|
||||
Starting in v3.16, "provider" is optional. If it is omitted (or the placeholder value `-` is used), the `TYPE` specified in `creds.json` will be used instead. A warning will be displayed with advice on how to remain compatible with v4.0.
|
||||
Starting in [v3.16](v316.md), "provider" is optional. If it is omitted (or the placeholder value `-` is used), the `TYPE` specified in `creds.json` will be used instead. A warning will be displayed with advice on how to remain compatible with v4.0.
|
||||
|
||||
Starting in v4.0, the "provider" argument is expected to go away.
|
||||
|
||||
EXAMPLES:
|
||||
dnscontrol check-creds myr53 ROUTE53
|
||||
Starting in v3.16:
|
||||
dnscontrol check-creds myr53
|
||||
dnscontrol check-creds myr53 -
|
||||
dnscontrol check-creds myr53 ROUTE53
|
||||
## Examples
|
||||
|
||||
```shell
|
||||
dnscontrol check-creds myr53 ROUTE53
|
||||
```
|
||||
|
||||
Starting in [v3.16](v316.md):
|
||||
|
||||
```shell
|
||||
dnscontrol check-creds myr53
|
||||
dnscontrol check-creds myr53 -
|
||||
dnscontrol check-creds myr53 ROUTE53
|
||||
```
|
||||
|
||||
Starting in v4.0:
|
||||
dnscontrol check-creds myr53
|
||||
|
||||
```shell
|
||||
dnscontrol check-creds myr53
|
||||
```
|
||||
|
||||
This command is the same as `get-zones` with `--format=nameonly`
|
||||
|
|
@ -1,11 +1,6 @@
|
|||
---
|
||||
layout: default
|
||||
title: Gitlab CI/CD example
|
||||
---
|
||||
|
||||
# Gitlab CI/CD example
|
||||
|
||||
Before discussing the Gitlab CI/CD setup, let's assume you already have a working DNSControl setup. Aren't you there yet? Then first check out the '[Getting Started](https://stackexchange.github.io/dnscontrol/getting-started)' section.
|
||||
Before discussing the Gitlab CI/CD setup, let's assume you already have a working DNSControl setup. Aren't you there yet? Then first check out the '[Getting Started](getting-started.md)' section.
|
||||
|
||||
## DNSControl - Demo setup
|
||||
|
||||
|
@ -19,7 +14,7 @@ This is based on:
|
|||
For convenience, both configuration files are shown below.
|
||||
|
||||
- `dnsconfig.js`
|
||||
```js
|
||||
```javascript
|
||||
var PROVIDER_NONE = NewRegistrar('none');
|
||||
var PROVIDER_TRANSIP = NewDnsProvider('transip', '-');
|
||||
|
||||
|
@ -61,9 +56,15 @@ hY/gnT/MmXXko3YAcI4eQL8=
|
|||
|
||||
_Example of variable `$TRANSIP_PRIVATE_KEY` contents._
|
||||
|
||||
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/settings-ci-cd-variables.png" alt="Gitlab CI/CD variables" style="width: 900px;"/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/settings-ci-cd-variables.png" alt="Gitlab CI/CD variables">
|
||||
<figcaption><p>Gitlab CI/CD variables</p></figcaption>
|
||||
</figure>
|
||||
|
||||
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/settings-ci-cd-variables-insert.png" alt="Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY" style="width: 900px;"/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/settings-ci-cd-variables-insert.png" alt="Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY">
|
||||
<figcaption><p>Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY</p></figcaption>
|
||||
</figure>
|
||||
|
||||
## Gitlab CI - DNSControl preview
|
||||
|
||||
|
@ -134,9 +135,15 @@ $ /usr/local/bin/dnscontrol preview
|
|||
Done. 1 corrections.
|
||||
```
|
||||
|
||||
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-preview.png" alt="CI/CD job output for DNSControl preview" style="width: 900px;"/>
|
||||
|
||||
_<https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010>_
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-preview.png" alt="CI/CD job output for DNSControl preview">
|
||||
<figcaption>
|
||||
<p>
|
||||
<a href="https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010">https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010</a><br>
|
||||
CI/CD job output for DNSControl preview
|
||||
</p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
## Gitlab CI - DNSControl push
|
||||
|
||||
|
@ -166,7 +173,10 @@ What does this (new) YAML configuration mean?
|
|||
- The `dnscontrol push` is run within the Gitlab CI [predefined stage](https://docs.gitlab.com/ee/ci/yaml/#stages) `deploy`.
|
||||
- This only happens when you start a Gitlab pipeline from the [Gitlab web interface](https://gitlab.com/cafferata/dnscontrol/-/pipelines/new) for the default branch (e.g. `main`).
|
||||
|
||||
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-pipelines-new.png" alt="Start new CI/CD pipeline from the Gitlab web interface" style="width: 900px;"/>
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-pipelines-new.png" alt="Start new CI/CD pipeline from the Gitlab web interface">
|
||||
<figcaption><p>Start new CI/CD pipeline from the Gitlab web interface</p></figcaption>
|
||||
</figure>
|
||||
|
||||
When we start the new [Gitlab pipeline](https://gitlab.com/cafferata/dnscontrol/-/pipelines/656368384) from the [Gitlab web interface](https://gitlab.com/cafferata/dnscontrol/-/pipelines/new), we see the Gitlab job [dnscontrol-push](https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199) which makes the changes within the DNS provider TransIP.
|
||||
|
||||
|
@ -187,9 +197,15 @@ SUCCESS!
|
|||
Done. 1 corrections.
|
||||
```
|
||||
|
||||
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-push.png" alt="CI/CD job output for DNSControl push" style="width: 900px;"/>
|
||||
|
||||
_<https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199>_
|
||||
<figure>
|
||||
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-push.png" alt="CI/CD job output for DNSControl push">
|
||||
<figcaption>
|
||||
<p>
|
||||
<a href="https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199">https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199</a><br>
|
||||
CI/CD job output for DNSControl push
|
||||
</p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
## Gitlab CI - Duplicate YAML configuration
|
||||
|
|
@ -1,7 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: CLI variables
|
||||
---
|
||||
# CLI variables
|
||||
|
||||
You can pass variables into your configuration from the command line using the `-v key=value` flag. There is also a mechanism called `CLI_DEFAULTS` which lets you easily set the defaults on variables that are otherwise controlled from the command line.
|
||||
|
@ -20,7 +16,7 @@ This would set the variable with the name `testKey` and the value of `testValue`
|
|||
|
||||
The `CLI_DEFAULTS` feature is used to define default values for when a variable is not defined on the command line.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
CLI_DEFAULTS({
|
||||
"variableName": "defaultValue",
|
||||
});
|
||||
|
@ -39,8 +35,8 @@ In this configuration:
|
|||
* `dnscontrol push` would generate the external (default) view.
|
||||
* `dnscontrol push -v view=internal` would generate the internal view.
|
||||
|
||||
```js
|
||||
// See https://stackexchange.github.io/dnscontrol/cli-variables
|
||||
```javascript
|
||||
// See https://docs.dnscontrol.org/advanced-features/cli-variables
|
||||
CLI_DEFAULTS({
|
||||
"view": "external",
|
||||
});
|
||||
|
@ -74,8 +70,8 @@ In this configuration:
|
|||
* `dnscontrol push` would generate the normal configuration.
|
||||
* `dnscontrol push -v emergency=true` would generate the emergency configuration.
|
||||
|
||||
```js
|
||||
// See https://stackexchange.github.io/dnscontrol/cli-variables
|
||||
```javascript
|
||||
// See https://docs.dnscontrol.org/advanced-features/cli-variables
|
||||
CLI_DEFAULTS({
|
||||
"emergency": false,
|
||||
});
|
|
@ -1,17 +1,12 @@
|
|||
---
|
||||
layout: default
|
||||
title: Useful code tricks
|
||||
---
|
||||
|
||||
# "Builders"
|
||||
|
||||
Problem: It is difficult to get CAA and other records exactly right.
|
||||
|
||||
Solution: Use a "builder" to construct it for you.
|
||||
|
||||
* [CAA Builder]({{site.github.url}}/js#CAA_BUILDER)
|
||||
* [DMARC Builder]({{site.github.url}}/js#DMARC_BUILDER)
|
||||
* [SPF Optimizer]({{site.github.url}}/js#SPF_BUILDER)
|
||||
* [CAA Builder](functions/record/CAA_BUILDER.md)
|
||||
* [DMARC Builder](functions/record/DMARC_BUILDER.md)
|
||||
* [SPF Optimizer](functions/record/SPF_BUILDER.md)
|
||||
|
||||
# Repeat records in many domains (macros)
|
||||
|
||||
|
@ -25,7 +20,7 @@ Domains that use Google G-Suite require a specific list of MX
|
|||
records, plus there are some CNAMEs that are useful (but we only
|
||||
want the CNAMEs on a subset of domains).
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var GOOGLE_APPS_DOMAIN_MX = [
|
||||
MX("@", 1, "aspmx.l.google.com."),
|
||||
MX("@", 5, "alt1.aspmx.l.google.com."),
|
||||
|
@ -64,7 +59,7 @@ records.
|
|||
|
||||
Solution: Use a loop. (Note: See caveats below.)
|
||||
|
||||
```js
|
||||
```javascript
|
||||
// The domains are parked. Use the exact same records for each.
|
||||
_.each(
|
||||
[
|
||||
|
@ -81,7 +76,7 @@ _.each(
|
|||
);
|
||||
```
|
||||
|
||||
# Caveats about getting too fancy.
|
||||
# Caveats about getting too fancy
|
||||
|
||||
The `dnsconfig.js` language is JavaScript. On the plus side, this means
|
||||
you can use loops and variables and anything else you want.
|
||||
|
@ -140,5 +135,5 @@ domain exists, who requested it, any associated ticket numbers, and so
|
|||
on.
|
||||
|
||||
We also comment the individual parts of a record. Look at the [SPF
|
||||
Optimizer]({{site.github.url}}/js#SPF_BUILDER) example. Each part of
|
||||
Optimizer](functions/record/SPF_BUILDER.md) example. Each part of
|
||||
the SPF record has a comment.
|
|
@ -1,8 +1,3 @@
|
|||
---
|
||||
layout: default
|
||||
title: creds.json file format
|
||||
---
|
||||
|
||||
# creds.json
|
||||
|
||||
When DNSControl interacts with a provider, any API keys, credentials, or other
|
||||
|
@ -46,16 +41,16 @@ Here's a sample file:
|
|||
* ...may include any JSON string value including the empty string.
|
||||
* If a subkey starts with `$`, it is taken as an env variable. In the above example, `$HEXONET_APILOGIN` would be replaced by the value of the environment variable `HEXONET_APILOGIN` or the empty string if no such environment variable exists.
|
||||
|
||||
## New in v3.16:
|
||||
## New in v3.16
|
||||
|
||||
The special subkey "TYPE" is used to indicate the provider type (NONE,
|
||||
CLOUDFLAREAPI, GCLOUD, etc).
|
||||
|
||||
Prior to v3.16, the provider type is specified as the second argument
|
||||
Prior to [v3.16](v316.md), the provider type is specified as the second argument
|
||||
to `NewRegistrar()` and `NewDnsProvider()` in `dnsconfig.js` or as a
|
||||
command-line argument in tools such as `dnscontrol get-zones`.
|
||||
|
||||
Starting in v3.16, `NewRegistrar()`, and `NewDnsProvider()` no longer
|
||||
Starting in [v3.16](v316.md), `NewRegistrar()`, and `NewDnsProvider()` no longer
|
||||
require the provider type to be specified. It may be specified for
|
||||
backwards compatibility, but a warning will be generated with a
|
||||
suggestion of how to upgrade to the 4.0 format. Likewise,
|
||||
|
@ -105,22 +100,35 @@ Usually this is to simply remove the second parameter to the function.
|
|||
|
||||
Examples:
|
||||
|
||||
|
||||
```js
|
||||
OLD: var REG_THING = NewRegistrar("thing", "THING");
|
||||
NEW: var REG_THING = NewRegistrar("thing");
|
||||
|
||||
OLD: var REG_THING = NewRegistrar("thing", "THING", { settings: "value" } );
|
||||
NEW: var REG_THING = NewRegistrar("thing", { settings: "value" } );
|
||||
|
||||
OLD: var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5");
|
||||
NEW: var DNS_MYGANDI = NewDnsProvider("mygandi");
|
||||
|
||||
OLD: var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5", { settings: "value" } );
|
||||
NEW: var DNS_MYGANDI = NewDnsProvider("mygandi", { settings: "value" } );
|
||||
{% code title="dnsconfig.js" %}
|
||||
```diff
|
||||
-var REG_THING = NewRegistrar("thing", "THING");
|
||||
+var REG_THING = NewRegistrar("thing");
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Starting with v3.16 use of an OLD format will trigger warnings with suggestions on how to adopt the NEW format.
|
||||
{% code title="dnsconfig.js" %}
|
||||
```diff
|
||||
-var REG_THING = NewRegistrar("thing", "THING", { settings: "value" } );
|
||||
+var REG_THING = NewRegistrar("thing", { settings: "value" } );
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% code title="dnsconfig.js" %}
|
||||
```diff
|
||||
-var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5");
|
||||
+var DNS_MYGANDI = NewDnsProvider("mygandi");
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% code title="dnsconfig.js" %}
|
||||
```diff
|
||||
-var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5", { settings: "value" } );
|
||||
+var DNS_MYGANDI = NewDnsProvider("mygandi", { settings: "value" } );
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Starting with [v3.16](v316.md) use of an OLD format will trigger warnings with suggestions on how to adopt the NEW format.
|
||||
|
||||
Starting with v4.0 support for the OLD format may be reported as an error.
|
||||
|
||||
|
@ -155,7 +163,7 @@ invalid. Perhaps you meant to specify a `-` on a command-line tool?
|
|||
|
||||
The fix is to change the `TYPE` subkey entry in `creds.json` from `-` to
|
||||
a valid service provider identifier, as listed
|
||||
in [the service provider list](https://stackexchange.github.io/dnscontrol/provider-list).
|
||||
in [the service provider list](providers.md).
|
||||
|
||||
|
||||
## Using a different file name
|
||||
|
@ -173,7 +181,8 @@ The `--creds` flag allows you to specify a different file name.
|
|||
### Example commands
|
||||
|
||||
Following commands would execute a program/script:
|
||||
``` bash
|
||||
|
||||
```shell
|
||||
dnscontrol preview --creds !./creds.sh
|
||||
dnscontrol preview --creds ./creds.sh
|
||||
dnscontrol preview --creds creds.sh
|
||||
|
@ -183,7 +192,8 @@ dnscontrol preview --creds /some/absolute/path/creds.sh
|
|||
```
|
||||
|
||||
Following commands would execute a shell command:
|
||||
``` bash
|
||||
|
||||
```shell
|
||||
dnscontrol preview --creds "!op inject -i creds.json.tpl"
|
||||
```
|
||||
|
|
@ -1,16 +1,6 @@
|
|||
---
|
||||
layout: default
|
||||
title: Examples
|
||||
---
|
||||
|
||||
# Examples
|
||||
|
||||
* TOC
|
||||
{:toc}
|
||||
|
||||
## Typical DNS Records
|
||||
|
||||
```js
|
||||
```javascript
|
||||
D('example.com', REG, DnsProvider('GCLOUD'),
|
||||
A('@', '1.2.3.4'), // The naked or 'apex' domain.
|
||||
A('server1', '2.3.4.5'),
|
||||
|
@ -27,7 +17,7 @@ D('example.com', REG, DnsProvider('GCLOUD'),
|
|||
|
||||
## Set TTLs
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var mailTTL = TTL('1h');
|
||||
|
||||
D('example.com', registrar,
|
||||
|
@ -44,7 +34,7 @@ D('example.com', registrar,
|
|||
|
||||
## Variables for common IP Addresses
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var addrA = IP('1.2.3.4')
|
||||
|
||||
D('example.com', REG, DnsProvider('R53'),
|
||||
|
@ -53,15 +43,17 @@ D('example.com', REG, DnsProvider('R53'),
|
|||
)
|
||||
```
|
||||
|
||||
NOTE: The `IP()` function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings.
|
||||
{% hint style="info" %}
|
||||
**NOTE**: The `IP()` function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings.
|
||||
{% endhint %}
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var addrAAAA = "0:0:0:0:0:0:0:0";
|
||||
```
|
||||
|
||||
## Variables to swap active Data Center
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var dcA = IP('5.5.5.5');
|
||||
var dcB = IP('6.6.6.6');
|
||||
|
||||
|
@ -75,7 +67,7 @@ D('example.com', REG, DnsProvider('R53'),
|
|||
|
||||
## Macro to for repeated records
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var GOOGLE_APPS_MX_RECORDS = [
|
||||
MX('@', 1, 'aspmx.l.google.com.'),
|
||||
MX('@', 5, 'alt1.aspmx.l.google.com.'),
|
||||
|
@ -106,7 +98,7 @@ You normally can't put comments in the middle of a string,
|
|||
but with a little bit of creativity you can document
|
||||
each element of an SPF record this way.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var SPF_RECORDS = TXT('@', [
|
||||
'v=spf1',
|
||||
'ip4:1.2.3.0/24', // NY mail server
|
||||
|
@ -126,7 +118,7 @@ D('example.com', REG, DnsProvider('R53'),
|
|||
|
||||
## Dual DNS Providers
|
||||
|
||||
```js
|
||||
```javascript
|
||||
D('example.com', REG, DnsProvider('R53'), DnsProvider('GCLOUD'),
|
||||
A('@', '1.2.3.4')
|
||||
)
|
||||
|
@ -146,7 +138,7 @@ D('example3.com', REG, DnsProvider('R53'), DnsProvider('GCLOUD',0),
|
|||
|
||||
## Set default records modifiers
|
||||
|
||||
```js
|
||||
```javascript
|
||||
DEFAULTS(
|
||||
NAMESERVER_TTL('24h'),
|
||||
DefaultTTL('12h'),
|
||||
|
@ -161,7 +153,7 @@ In this example we need a macro that can dynamically change for each domain.
|
|||
|
||||
Suppose you have many domains that use Fastmail as an MX. Here's a macro that sets the MX records.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var FASTMAIL_MX = [
|
||||
MX('@', 10, 'in1-smtp.messagingengine.com.'),
|
||||
MX('@', 20, 'in2-smtp.messagingengine.com.'),
|
||||
|
@ -173,7 +165,7 @@ that includes the domain name. We can't use a simple macro. Instead, we use
|
|||
a function that takes the domain name as a parameter to generate the right
|
||||
records dynamically.
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var FASTMAIL_DKIM = function(the_domain){
|
||||
return [
|
||||
CNAME('fm1._domainkey', 'fm1.' + the_domain + '.dkim.fmhosted.com.'),
|
||||
|
@ -185,7 +177,7 @@ var FASTMAIL_DKIM = function(the_domain){
|
|||
|
||||
We can then use the macros as such:
|
||||
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REG_NONE, DnsProvider(DSP_R53_MAIN),
|
||||
FASTMAIL_MX,
|
||||
FASTMAIL_DKIM('example.com')
|
143156
documentation/flattener/flattener.js
Normal file
1
documentation/flattener/flattener.js.map
Normal file
62
documentation/flattener/index.html
Normal file
|
@ -0,0 +1,62 @@
|
|||
<html >
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
||||
<script src="flattener.js"></script>
|
||||
<style>
|
||||
|
||||
ul {
|
||||
margin: 0px 0px 0px 20px;
|
||||
list-style: none;
|
||||
line-height: 2em;
|
||||
font-family: Arial;
|
||||
}
|
||||
ul li {
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
}
|
||||
ul li:before {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
top: 0px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 1em;
|
||||
border-bottom: 1px solid #ddd;
|
||||
width: 10px;
|
||||
}
|
||||
ul li:after {
|
||||
position: absolute;
|
||||
left: -15px;
|
||||
bottom: -7px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid #ddd;
|
||||
height: 100%;
|
||||
}
|
||||
ul li.root {
|
||||
margin: 0px 0px 0px -20px;
|
||||
}
|
||||
ul li.root:before {
|
||||
display: none;
|
||||
}
|
||||
ul li.root:after {
|
||||
display: none;
|
||||
}
|
||||
ul li:last-child:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class='container' style='padding-bottom:50px'>
|
||||
<input type="text" id="domain" value="stackoverflow.com"></input>
|
||||
<button id="lookup_btn">Lookup</button>
|
||||
<div id="results"></div>
|
||||
<div id="flattened"></div>
|
||||
</div>
|
||||
</body>
|
159
documentation/flattener/js.go
Normal file
|
@ -0,0 +1,159 @@
|
|||
//go:build js
|
||||
// +build js
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/v3/pkg/spflib"
|
||||
"github.com/gopherjs/jquery"
|
||||
)
|
||||
|
||||
type gResolver struct{}
|
||||
|
||||
type gResp struct {
|
||||
Status int
|
||||
Answer []struct {
|
||||
Data string `json:"data"`
|
||||
}
|
||||
}
|
||||
|
||||
func (g gResolver) GetSPF(fqdn string) (string, error) {
|
||||
resp, err := http.Get("https://dns.google.com/resolve?type=txt&name=" + fqdn)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
dec := json.NewDecoder(resp.Body)
|
||||
dat := &gResp{}
|
||||
if err = dec.Decode(dat); err != nil {
|
||||
return "", err
|
||||
}
|
||||
for _, a := range dat.Answer {
|
||||
val := strings.Trim(a.Data, "\"")
|
||||
if strings.HasPrefix(val, "v=spf1 ") {
|
||||
return val, nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("No spf records found")
|
||||
}
|
||||
|
||||
var jq = jquery.NewJQuery
|
||||
var parsed *spflib.SPFRecord
|
||||
var domain string
|
||||
|
||||
var resolver = gResolver{}
|
||||
|
||||
func main() {
|
||||
jq(func() {
|
||||
jq("#lookup_btn").On(jquery.CLICK, func(e jquery.Event) {
|
||||
go func() {
|
||||
domain = jq("#domain").Val()
|
||||
text, err := resolver.GetSPF(domain)
|
||||
fmt.Println(text)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
parsed, err = spflib.Parse(text, resolver)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
jq("#results").SetHtml(buildHTML(parsed, domain))
|
||||
jq(".cb").On(jquery.CHANGE, func(e jquery.Event) {
|
||||
updateDisabledChecks()
|
||||
renderResults()
|
||||
})
|
||||
updateDisabledChecks()
|
||||
renderResults()
|
||||
}()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func updateDisabledChecks() {
|
||||
jq("input:checkbox").Each(func(i int, el interface{}) {
|
||||
fmt.Println(jq(el).Prop("disabled"))
|
||||
jq(el).SetProp("disabled", false)
|
||||
})
|
||||
jq("input:checkbox:not(:checked)").Each(func(i int, el interface{}) {
|
||||
fmt.Println(jq(el).Attr("id"))
|
||||
jq(el).Next().Next().Find("input:checkbox").Each(func(i int, el interface{}) {
|
||||
fmt.Println("^^", jq(el).Attr("id"))
|
||||
jq(el).SetProp("disabled", true)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func renderResults() {
|
||||
content := ""
|
||||
addFlattened := func(mode string, filter string) {
|
||||
flat := parsed.Flatten(filter)
|
||||
lookups := 0
|
||||
if filter != "*" {
|
||||
lookups = parsed.Lookups() - len(strings.Split(filter, ","))
|
||||
}
|
||||
content += fmt.Sprintf(`
|
||||
<h3> %s flattened (length %d, %d lookups)</h3><code>%s</code>
|
||||
`, mode, len(flat.TXT()), lookups, flat.TXT())
|
||||
split := flat.TXTSplit("_spf%d."+domain, 0, 255)
|
||||
if len(split) > 1 {
|
||||
lookups += len(split) - 1
|
||||
content += fmt.Sprintf("<h3>%s flattened split (%d lookups)</h3>", mode, lookups)
|
||||
for k, v := range split {
|
||||
content += fmt.Sprintf("<h4>%s</h4><code>%s</code>", k, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
addFlattened("Fully", "*")
|
||||
|
||||
// look for selected divs
|
||||
filters := []string{}
|
||||
jq("input:checked").Each(func(i int, el interface{}) {
|
||||
filters = append(filters, jq(el).Attr("id"))
|
||||
})
|
||||
if len(filters) > 0 {
|
||||
addFlattened("Selectively", strings.Join(filters, ","))
|
||||
}
|
||||
|
||||
jq("#flattened").SetHtml(content)
|
||||
}
|
||||
|
||||
func buildHTML(rec *spflib.SPFRecord, domain string) string {
|
||||
h := "<h1>" + domain + "</h1>"
|
||||
h += fmt.Sprintf("<h2>%d lookups</h2>", rec.Lookups())
|
||||
return h + genRoot(rec)
|
||||
}
|
||||
|
||||
// html based on https://codepen.io/khoama/pen/hpljA
|
||||
func genRoot(rec *spflib.SPFRecord) string {
|
||||
h := fmt.Sprintf(`
|
||||
<ul>
|
||||
<li class='root'>%s</li>
|
||||
`, rec.TXT())
|
||||
for _, p := range rec.Parts {
|
||||
h += genPart(p)
|
||||
}
|
||||
h += "</ul>"
|
||||
return h
|
||||
}
|
||||
|
||||
func genPart(rec *spflib.SPFPart) string {
|
||||
if !rec.IsLookup {
|
||||
return fmt.Sprintf(`<li>%s</li>`, rec.Text)
|
||||
}
|
||||
h := fmt.Sprintf(`<li>
|
||||
<input type="checkbox" class='cb' id="%s" name="%s" />
|
||||
<label for="%s">%s(%d lookups)</label>`, rec.IncludeDomain, rec.IncludeDomain, rec.IncludeDomain, rec.Text, rec.IncludeRecord.Lookups()+1)
|
||||
h += fmt.Sprintf("<ul>")
|
||||
for _, p := range rec.IncludeRecord.Parts {
|
||||
h += genPart(p)
|
||||
}
|
||||
h += "</ul>"
|
||||
h += "</li>"
|
||||
return h
|
||||
}
|
|
@ -12,12 +12,11 @@ parameter_types:
|
|||
|
||||
A adds an A record To a domain. The name should be the relative label for the record. Use `@` for the domain apex.
|
||||
|
||||
The address should be an ip address, either a string, or a numeric value obtained via [IP](#IP).
|
||||
The address should be an ip address, either a string, or a numeric value obtained via [IP](../global/IP.md).
|
||||
|
||||
Modifiers can be any number of [record modifiers](#record-modifiers) or JSON objects, which will be merged into the record's metadata.
|
||||
Modifiers can be any number of [record modifiers](https://docs.dnscontrol.org/language-reference/record-modifiers) or JSON objects, which will be merged into the record's metadata.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("R53"),
|
||||
A("@", "1.2.3.4"),
|
||||
A("foo", "2.3.4.5"),
|
||||
|
@ -25,6 +24,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
|
|||
A("*", "1.2.3.4", {foo: 42})
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -14,10 +14,9 @@ AAAA adds an AAAA record To a domain. The name should be the relative label for
|
|||
|
||||
The address should be an IPv6 address as a string.
|
||||
|
||||
Modifiers can be any number of [record modifiers](#record-modifiers) or JSON objects, which will be merged into the record's metadata.
|
||||
Modifiers can be any number of [record modifiers](https://docs.dnscontrol.org/language-reference/record-modifiers) or JSON objects, which will be merged into the record's metadata.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
var addrV6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
|
||||
|
||||
D("example.com", REGISTRAR, DnsProvider("R53"),
|
||||
|
@ -27,6 +26,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
|
|||
AAAA("*", addrV6, {foo: 42})
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -18,12 +18,8 @@ The name should be the relative label for the domain.
|
|||
|
||||
Target should be a string representing the target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("CLOUDFLARE"),
|
||||
ALIAS("@", "google.com."), // example.com -> google.com
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -14,11 +14,12 @@ to tune what the DNS provider sets, no algorithm choice. We simply
|
|||
ask that they follow their defaults when enabling a no-fuss DNSSEC
|
||||
data model.
|
||||
|
||||
NOTE: No parenthesis should follow these keywords. That is, the
|
||||
{% hint style="info" %}
|
||||
**NOTE**: No parenthesis should follow these keywords. That is, the
|
||||
correct syntax is `AUTODNSSEC_ON` not `AUTODNSSEC_ON()`
|
||||
{% endhint %}
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", .... ,
|
||||
AUTODNSSEC_ON, // Enable AutoDNSSEC.
|
||||
A("@", "10.1.1.1")
|
||||
|
@ -29,9 +30,6 @@ D("insecure.com", .... ,
|
|||
A("@", "10.2.2.2")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
If neither `AUTODNSSEC_ON` or `AUTODNSSEC_OFF` is specified for a
|
||||
domain no changes will be requested.
|
|
@ -48,13 +48,9 @@ Alias records can reference other record sets of the same type.
|
|||
For example, a DNS CNAME record set can be an alias to another CNAME record set.
|
||||
This arrangement is useful if you want some record sets to be aliases and some non-aliases.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("AZURE_DNS"),
|
||||
AZURE_ALIAS("foo", "A", "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2"), // record for traffic manager
|
||||
AZURE_ALIAS("foo", "CNAME", "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/dnszones/example.com/A/quux."), // record in the same zone
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -24,8 +24,7 @@ Flags are controlled by modifier:
|
|||
|
||||
CAA record is supported only by BIND, Google Cloud DNS, Amazon Route 53 and OVH. Some certificate authorities may not support this record until the mandatory date of September 2017.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("GCLOUD"),
|
||||
// Allow letsencrypt to issue certificate for this domain
|
||||
CAA("@", "issue", "letsencrypt.org"),
|
||||
|
@ -36,6 +35,3 @@ D("example.com", REGISTRAR, DnsProvider("GCLOUD"),
|
|||
CAA("@", "iodef", "mailto:test@example.com", CAA_CRITICAL)
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -18,11 +18,13 @@ If _any_ `CF_REDIRECT` or `CF_TEMP_REDIRECT` functions are used then
|
|||
`dnscontrol` will manage _all_ "Forwarding URL" type Page Rules for the domain.
|
||||
Page Rule types other than "Forwarding URL” will be left alone.
|
||||
|
||||
WARNING: Cloudflare does not currently fully document the Page Rules API and
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: Cloudflare does not currently fully document the Page Rules API and
|
||||
this interface is not extensively tested. Take precautions such as making
|
||||
backups and manually verifying `dnscontrol preview` output before running
|
||||
`dnscontrol push`. This is especially true when mixing Page Rules that are
|
||||
managed by DNSControl and those that aren't.
|
||||
{% endhint %}
|
||||
|
||||
HTTP 301 redirects are cached by browsers forever, usually ignoring any TTLs or
|
||||
other cache invalidation techniques. It should be used with great care. We
|
||||
|
@ -31,12 +33,8 @@ only after sufficient time has elapsed to prove this is what you really want.
|
|||
|
||||
This example redirects the bare (aka apex, or naked) domain to www:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("foo.com", .... ,
|
||||
CF_REDIRECT("mydomain.com/*", "https://www.mydomain.com/$1"),
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -18,18 +18,16 @@ If _any_ `CF_REDIRECT` or `CF_TEMP_REDIRECT` functions are used then
|
|||
`dnscontrol` will manage _all_ "Forwarding URL" type Page Rules for the domain.
|
||||
Page Rule types other than "Forwarding URL” will be left alone.
|
||||
|
||||
WARNING: Cloudflare does not currently fully document the Page Rules API and
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: Cloudflare does not currently fully document the Page Rules API and
|
||||
this interface is not extensively tested. Take precautions such as making
|
||||
backups and manually verifying `dnscontrol preview` output before running
|
||||
`dnscontrol push`. This is especially true when mixing Page Rules that are
|
||||
managed by DNSControl and those that aren't.
|
||||
{% endhint %}
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("foo.com", .... ,
|
||||
CF_TEMP_REDIRECT("example.mydomain.com/*", "https://otherplace.yourdomain.com/$1"),
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -17,19 +17,17 @@ If _any_ `CF_WORKER_ROUTE` function is used then `dnscontrol` will manage _all_
|
|||
Worker Routes for the domain. To be clear: this means it will delete existing routes that
|
||||
were created outside of DNSControl.
|
||||
|
||||
WARNING: This interface is not extensively tested. Take precautions such as making
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: This interface is not extensively tested. Take precautions such as making
|
||||
backups and manually verifying `dnscontrol preview` output before running
|
||||
`dnscontrol push`.
|
||||
{% endhint %}
|
||||
|
||||
This example assigns the patterns `api.foo.com/*` and `foo.com/api/*` to a `my-worker` script:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("foo.com", .... ,
|
||||
CF_WORKER_ROUTE("api.foo.com/*", "my-worker"),
|
||||
CF_WORKER_ROUTE("foo.com/api/*", "my-worker"),
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -10,4 +10,6 @@ parameter_types:
|
|||
"modifiers...": RecordModifier[]
|
||||
---
|
||||
|
||||
{% hint style="info" %}
|
||||
Documentation needed.
|
||||
{% endhint %}
|
|
@ -15,14 +15,10 @@ Using `@` or `*` for CNAME records is not recommended, as different providers su
|
|||
|
||||
Target should be a string representing the CNAME target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("R53"),
|
||||
CNAME("foo", "google.com."), // foo.example.com -> google.com
|
||||
CNAME("abc", "@"), // abc.example.com -> example.com
|
||||
CNAME("def", "test"), // def.example.com -> test.example.com
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -26,12 +26,8 @@ Digest Type must be a number.
|
|||
|
||||
Digest must be a string.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider(R53),
|
||||
DS("example.com", 2371, 13, 2, "ABCDEF")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -6,11 +6,10 @@ parameter_types:
|
|||
ttl: Duration
|
||||
---
|
||||
|
||||
DefaultTTL sets the TTL for all records in a domain that do not explicitly set one with [TTL](#TTL). If neither `DefaultTTL` or `TTL` exist for a record,
|
||||
DefaultTTL sets the TTL for all records in a domain that do not explicitly set one with [TTL](../record/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record,
|
||||
it will use the DNSControl global default of 300 seconds.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D('example.com', REGISTRAR, DnsProvider('R53'),
|
||||
DefaultTTL("4h"),
|
||||
A('@','1.2.3.4'), // uses default
|
||||
|
@ -18,8 +17,5 @@ D('example.com', REGISTRAR, DnsProvider('R53'),
|
|||
);
|
||||
```
|
||||
|
||||
The DefaultTTL duration is the same format as [TTL](#TTL), an integer number of seconds
|
||||
The DefaultTTL duration is the same format as [TTL](../record/TTL.md), an integer number of seconds
|
||||
or a string with a unit such as `'4d'`.
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -9,7 +9,7 @@ parameter_types:
|
|||
---
|
||||
|
||||
DnsProvider indicates that the specified provider should be used to manage
|
||||
records for this domain. The name must match the name used with [NewDnsProvider](#NewDnsProvider).
|
||||
records for this domain. The name must match the name used with [NewDnsProvider](../global/NewDnsProvider.md).
|
||||
|
||||
The nsCount parameter determines how the nameservers will be managed from this provider.
|
||||
|
||||
|
@ -20,7 +20,7 @@ Using `0` for nsCount means "do not fetch nameservers from this domain, or give
|
|||
Using a different number, ie: `DnsProvider("name",2)`, means "fetch all nameservers from this provider,
|
||||
but limit it to this many.
|
||||
|
||||
See [this page]({{site.github.url}}/nameservers) for a detailed explanation of how DNSControl handles nameservers and NS records.
|
||||
See [this page](../../nameservers.md) for a detailed explanation of how DNSControl handles nameservers and NS records.
|
||||
|
||||
If a domain (`D()`) does not include any `DnsProvider()` functions,
|
||||
the DNS records will not be modified. In fact, if you want to control
|
|
@ -10,4 +10,6 @@ parameter_types:
|
|||
"modifiers...": RecordModifier[]
|
||||
---
|
||||
|
||||
{% hint style="info" %}
|
||||
Documentation needed.
|
||||
{% endhint %}
|
8
documentation/functions/domain/IGNORE.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: IGNORE
|
||||
ts_ignore: true
|
||||
---
|
||||
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: IGNORE has been renamed to `IGNORE_NAME`. IGNORE will continue to function, but its use is deprecated. Please update your configuration files to use `IGNORE_NAME`.
|
||||
{% endhint %}
|
|
@ -8,9 +8,11 @@ parameter_types:
|
|||
rTypes: string?
|
||||
---
|
||||
|
||||
WARNING: The `IGNORE_*` family of functions is risky to use. The code
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: The `IGNORE_*` family of functions is risky to use. The code
|
||||
is brittle and has subtle bugs. Use at your own risk. Do not use these
|
||||
commands with `D_EXTEND()`.
|
||||
{% endhint %}
|
||||
|
||||
`IGNORE_NAME` can be used to ignore some records present in zone.
|
||||
Records of that name will be completely ignored. An optional `rTypes` may be specified as a comma separated list to only ignore records of the given type, e.g. `"A"`, `"A,CNAME"`, `"A, MX, CNAME"`. If `rTypes` is omitted or is `"*"` all record types matching the name will be ignored.
|
||||
|
@ -26,8 +28,7 @@ Technically `IGNORE_NAME` is a promise that DNSControl will not add, change, or
|
|||
|
||||
In this example, DNSControl will insert/update the "baz.example.com" record but will leave unchanged the "foo.example.com" and "bar.example.com" ones.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com",
|
||||
IGNORE_NAME("foo"), // ignore all record types for name foo
|
||||
IGNORE_NAME("baz", "*"), // ignore all record types for name baz
|
||||
|
@ -36,9 +37,6 @@ D("example.com",
|
|||
A("baz", "1.2.3.4")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
`IGNORE_NAME` also supports glob patterns in the style of the [gobwas/glob](https://github.com/gobwas/glob) library. All of
|
||||
the following patterns will work:
|
|
@ -8,9 +8,11 @@ parameter_types:
|
|||
rType: string
|
||||
---
|
||||
|
||||
WARNING: The `IGNORE_*` family of functions is risky to use. The code
|
||||
{% hint style="warning" %}
|
||||
**WARNING**: The `IGNORE_*` family of functions is risky to use. The code
|
||||
is brittle and has subtle bugs. Use at your own risk. Do not use these
|
||||
commands with `D_EXTEND()` or use it at the domain apex.
|
||||
{% endhint %}
|
||||
|
||||
IGNORE_TARGET can be used to ignore some records present in zone based on the record's target and type. IGNORE_TARGET currently only supports CNAME record types.
|
||||
|
||||
|
@ -22,16 +24,12 @@ IGNORE_TARGET is generally used in very specific situations:
|
|||
|
||||
In this example, DNSControl will insert/update the "baz.example.com" record but will leave unchanged a CNAME to "foo.acm-validations.aws" record.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com",
|
||||
IGNORE_TARGET('**.acm-validations.aws.', 'CNAME'),
|
||||
A("baz", "1.2.3.4")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
IGNORE_TARGET also supports glob patterns in the style of the [gobwas/glob](https://github.com/gobwas/glob#example) library. Some example patterns:
|
||||
|
|
@ -7,7 +7,9 @@ parameters:
|
|||
ts_ignore: true
|
||||
---
|
||||
|
||||
{% hint style="warning" %}
|
||||
Don't use this feature. It was added for a very specific situation at Stack Overflow.
|
||||
{% endhint %}
|
||||
|
||||
`IMPORT_TRANSFORM` adds to the domain all the records from another
|
||||
domain, after making certain transformations and resetting the TTL.
|
||||
|
@ -24,7 +26,6 @@ You wouldn't want to maintain bar.com manually, would you? It would
|
|||
be very error prone. Therefore instead you maintain foo.com and
|
||||
let `IMPORT_TRANSFORM` automatically generate bar.com.
|
||||
|
||||
{% capture example %}
|
||||
```text
|
||||
foo.com:
|
||||
one.foo.com. IN A 1.2.3.1
|
||||
|
@ -39,14 +40,10 @@ bar.com:
|
|||
three.foo.com.bar.com. IN A 123.123.123.113
|
||||
four.foo.com.bar.com. IN A 123.123.123.114
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
Here's how you'd implement this in DNSControl:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
var TRANSFORM_INT = [
|
||||
// RANGE_START, RANGE_END, NEW_BASE
|
||||
{ low: "1.2.3.10", high: "1.2.3.20", newBase: "123.123.123.100" }, // .10 to .20 rewritten as 123.123.123.100+IP
|
||||
|
@ -65,9 +62,6 @@ D("bar.com", .... ,
|
|||
IMPORT_TRANSFORM(TRANSFORM_INT, 'foo.com', 300),
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
Transform rules are: RANGE_START, RANGE_END, NEW_BASE. NEW_BASE may be:
|
||||
|
|
@ -9,8 +9,7 @@ parameter_types:
|
|||
Includes all records from a given domain
|
||||
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com!external", REGISTRAR, DnsProvider(R53),
|
||||
A("test", "8.8.8.8")
|
||||
);
|
||||
|
@ -20,6 +19,3 @@ D("example.com!internal", REGISTRAR, DnsProvider(R53),
|
|||
A("home", "127.0.0.1")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -18,13 +18,9 @@ Priority should be a number.
|
|||
|
||||
Target should be a string representing the MX target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider(R53),
|
||||
MX("@", 5, "mail"), // mx example.com -> mail.example.com
|
||||
MX("sub", 10, "mail.foo.com.")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -18,10 +18,9 @@ This is different than the `NS()` function, which inserts NS records
|
|||
in the current zone and accepts a label. `NS()` is useful for downward
|
||||
delegations. `NAMESERVER()` is for informing upstream delegations.
|
||||
|
||||
For more information, refer to [this page]({{site.github.url}}/nameservers).
|
||||
For more information, refer to [this page](../../nameservers.md).
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, .... ,
|
||||
DnsProvider(route53, 0),
|
||||
// Replace the nameservers:
|
||||
|
@ -35,9 +34,6 @@ D("example2.com", REGISTRAR, .... ,
|
|||
NAMESERVER("ns2.myserver.com."),
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
|
||||
# The difference between NS() and NAMESERVER()
|
||||
|
@ -82,7 +78,7 @@ special Registrar called "NONE". It makes no changes.
|
|||
|
||||
It looks like this:
|
||||
|
||||
```js
|
||||
```javascript
|
||||
var REG_THIRDPARTY = NewRegistrar('ThirdParty', 'NONE')
|
||||
D("mydomain.com", REG_THIRDPARTY,
|
||||
...
|
|
@ -8,17 +8,13 @@ parameter_types:
|
|||
modifiers...: RecordModifier[]
|
||||
---
|
||||
|
||||
TTL sets the TTL on the domain apex NS RRs defined by [NAMESERVER](#NAMESERVER).
|
||||
TTL sets the TTL on the domain apex NS RRs defined by [NAMESERVER](NAMESERVER.md).
|
||||
|
||||
The value can be an integer or a string. See [TTL](#TTL) for examples.
|
||||
The value can be an integer or a string. See [TTL](../record/TTL.md) for examples.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D('example.com', REGISTRAR, DnsProvider('R53'),
|
||||
NAMESERVER_TTL('2d'),
|
||||
NAMESERVER('ns')
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -15,15 +15,11 @@ zone, but otherwise leave the zone alone. Changes to "foo"'s IP
|
|||
address will update the record. Removing the A("foo", ...) record
|
||||
from DNSControl will leave the record in place.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", .... , NO_PURGE,
|
||||
A("foo","1.2.3.4")
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
The main caveat of NO_PURGE is that intentionally deleting records
|
||||
becomes more difficult. Suppose a NO_PURGE zone has an record such
|
|
@ -18,8 +18,7 @@ The difference between `NS()` and `NAMESERVER()` is explained in the `NAMESERVER
|
|||
|
||||
Target should be a string representing the NS target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", REGISTRAR, DnsProvider("R53"),
|
||||
NS("foo", "ns1.example2.com."), // Delegate ".foo.example.com" zone to another server.
|
||||
NS("foo", "ns2.example2.com."), // Delegate ".foo.example.com" zone to another server.
|
||||
|
@ -27,6 +26,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
|
|||
A("ns2.example2.com", "10.10.10.20"), // Glue records
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -10,4 +10,6 @@ parameter_types:
|
|||
"modifiers...": RecordModifier[]
|
||||
---
|
||||
|
||||
{% hint style="info" %}
|
||||
Documentation needed.
|
||||
{% endhint %}
|
|
@ -60,8 +60,7 @@ and A, B, C are the first 3 octets of the IP address. For example
|
|||
`172.20.18.130/27` is located in a zone named
|
||||
`128/27.18.20.172.in-addr.arpa`
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D(REV('1.2.3.0/24'), REGISTRAR, DnsProvider(BIND),
|
||||
PTR('1', 'foo.example.com.'),
|
||||
PTR('2', 'bar.example.com.'),
|
||||
|
@ -81,9 +80,6 @@ D(REV('2001:db8:302::/48'), REGISTRAR, DnsProvider(BIND),
|
|||
PTR('2001:db8:302::3', 'three.example.com.'), // '3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0'
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
In the future we plan on adding a flag to `A()` which will insert
|
||||
the correct PTR() record if the appropriate `.arpa` domain has been
|
|
@ -12,31 +12,22 @@ These three examples all are equivalent.
|
|||
|
||||
PURGE is the default:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", .... ,
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
Purge is the default, but we set it anyway:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", .... ,
|
||||
PURGE,
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
||||
|
||||
Since the "last command wins", this is the same as `PURGE`:
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D("example.com", .... ,
|
||||
PURGE,
|
||||
NO_PURGE,
|
||||
|
@ -45,6 +36,3 @@ D("example.com", .... ,
|
|||
PURGE,
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|
|
@ -37,8 +37,7 @@ The zone id can be found depending on the target type:
|
|||
* _S3 bucket_ (configured as website): specify the hosted zone ID for the region that you created the bucket in. You can find it in [the List of regions and hosted Zone IDs](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
|
||||
* _Another Route 53 record_: you can either specify the correct zone id or do not specify anything and DNSControl will figure out the right zone id. (Note: Route53 alias can't reference a record in a different zone).
|
||||
|
||||
{% capture example %}
|
||||
```js
|
||||
```javascript
|
||||
D('example.com', REGISTRAR, DnsProvider('ROUTE53'),
|
||||
R53_ALIAS('foo', 'A', 'bar'), // record in same zone
|
||||
R53_ALIAS('foo', 'A', 'bar', R53_ZONE('Z35SXDOTRQ7X7K')), // record in same zone, zone specified
|
||||
|
@ -47,6 +46,3 @@ D('example.com', REGISTRAR, DnsProvider('ROUTE53'),
|
|||
R53_ALIAS('foo', 'A', 'blahblah-bucket.s3-website-us-west-1.amazonaws.com.', R53_ZONE('Z2F56UZL2M1ACD')), // a website S3 Bucket in us-west-1
|
||||
);
|
||||
```
|
||||
{% endcapture %}
|
||||
|
||||
{% include example.html content=example %}
|