๐Ÿ’พ Archived View for source.community โ€บ ckaznocha โ€บ gemini โ€บ blob โ€บ main โ€บ status.go captured on 2024-02-05 at 09:53:23. Gemini links have been rewritten to link to archived content

View Raw

More Information

โฌ…๏ธ Previous capture (2023-01-29)

๐Ÿšง View Differences

-=-=-=-=-=-=-

                                                         .
,-. ,-. . . ,-. ,-. ,-.    ,-. ,-. ,-,-. ,-,-. . . ,-. . |- . .
`-. | | | | |   |   |-'    |   | | | | | | | | | | | | | |  | |
`-' `-' `-^ '   `-' `-' :: `-' `-' ' ' ' ' ' ' `-^ ' ' ' `' `-|
                                                             /|
                                                            `-'

Profile for ckaznocha

ckaznocha / gemini

git clone https://source.community/ckaznocha/gemini.git

Branches

Log

Tree

/status.go (main)

โ†‘ /

blob

View raw contents of /status.go (main)

โ”€โ”€โ”€โ”€โ•ฎ
   1โ”‚ //go:generate stringer -linecomment -output status_string.gen.go -type StatusCodeCategory,StatusCode
   2โ”‚ 
   3โ”‚ package gemini
   4โ”‚ 
   5โ”‚ const (
   6โ”‚ 	maxCategory = 9
   7โ”‚ 	maxCode     = 99
   8โ”‚ 	codeDivisor = 10
   9โ”‚ )
  10โ”‚ 
  11โ”‚ // StatusCodeCategory identifies a class of Gemini status codes.
  12โ”‚ type StatusCodeCategory uint8
  13โ”‚ 
  14โ”‚ // ToCode converts a Categoy to the base code for that category.
  15โ”‚ func (c StatusCodeCategory) ToCode() StatusCode {
  16โ”‚ 	if c > maxCategory {
  17โ”‚ 		return 0
  18โ”‚ 	}
  19โ”‚ 
  20โ”‚ 	return StatusCode(c * codeDivisor)
  21โ”‚ }
  22โ”‚ 
  23โ”‚ // The status code categories as defined in `Project Gemini - Speculative
  24โ”‚ // specification - Section 3.2`.
  25โ”‚ const (
  26โ”‚ 	StatusCategoryInput                     StatusCodeCategory = 1 // INPUT
  27โ”‚ 	StatusCategorySuccess                   StatusCodeCategory = 2 // SUCCESS
  28โ”‚ 	StatusCategoryRedirect                  StatusCodeCategory = 3 // REDIRECT
  29โ”‚ 	StatusCategoryTemporaryFailure          StatusCodeCategory = 4 // TEMPORARY FAILURE
  30โ”‚ 	StatusCategoryPermanentFailure          StatusCodeCategory = 5 // PERMANENT FAILURE
  31โ”‚ 	StatusCategoryClientCertificateRequired StatusCodeCategory = 6 // CLIENT CERTIFICATE REQUIRED
  32โ”‚ 
  33โ”‚ 	StatusCategoryUndefined    StatusCodeCategory = 0 // UNDEFINED
  34โ”‚ 	StatusCategoryUndefinedX   StatusCodeCategory = 7 // UNDEFINED
  35โ”‚ 	StatusCategoryUndefinedXX  StatusCodeCategory = 8 // UNDEFINED
  36โ”‚ 	StatusCategoryUndefinedXXX StatusCodeCategory = 9 // UNDEFINED
  37โ”‚ )
  38โ”‚ 
  39โ”‚ // StatusCode represents a Gemini status code. Gemini status codes are two digit
  40โ”‚ // values. See `Project Gemini - Speculative specification - Section 3.2`.
  41โ”‚ type StatusCode uint8
  42โ”‚ 
  43โ”‚ //nolint:gochecknoglobals // un exported lookup table.
  44โ”‚ var asciiNumbers = [10]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
  45โ”‚ 
  46โ”‚ // MarshalText implements the encoding.TextMarshaler interface. It returns the
  47โ”‚ // the code as an ASCII byte slice. It returns "00" if the code is invalid.
  48โ”‚ func (c StatusCode) MarshalText() ([]byte, error) {
  49โ”‚ 	if c > maxCode {
  50โ”‚ 		return []byte{'0', '0'}, nil
  51โ”‚ 	}
  52โ”‚ 
  53โ”‚ 	return []byte{asciiNumbers[c/codeDivisor], asciiNumbers[c%codeDivisor]}, nil
  54โ”‚ }
  55โ”‚ 
  56โ”‚ // ToCategory returns which category the status code belongs to.
  57โ”‚ func (c StatusCode) ToCategory() StatusCodeCategory {
  58โ”‚ 	if c > maxCode {
  59โ”‚ 		return StatusCategoryUndefined
  60โ”‚ 	}
  61โ”‚ 
  62โ”‚ 	return StatusCodeCategory(c / codeDivisor)
  63โ”‚ }
  64โ”‚ 
  65โ”‚ // Description returns the description of the code as described in `Project
  66โ”‚ // Gemini - Speculative specification`. Some but not all of the descriptions may
  67โ”‚ // be appropriate to return to a client as a failure description.
  68โ”‚ func (c StatusCode) Description() string {
  69โ”‚ 	return statusCodeToText[c]
  70โ”‚ }
  71โ”‚ 
  72โ”‚ // The status codes as defined in `Project Gemini - Speculative
  73โ”‚ // specification - Appendix 1. Full two digit status codes`.
  74โ”‚ const (
  75โ”‚ 	// 1x - INPUT
  76โ”‚ 	StatusInput          StatusCode = 10 // INPUT
  77โ”‚ 	StatusSensitiveInput StatusCode = 11 // SENSITIVE INPUT
  78โ”‚ 
  79โ”‚ 	// 2x - SUCCESS
  80โ”‚ 	StatusSuccess StatusCode = 20 // SUCCESS
  81โ”‚ 
  82โ”‚ 	// 3x - REDIRECT
  83โ”‚ 	StatusTemporaryRedirect StatusCode = 30 // REDIRECT - TEMPORARY
  84โ”‚ 	StatusPermanentRedirect StatusCode = 31 // REDIRECT - PERMANENT
  85โ”‚ 
  86โ”‚ 	// 4x - TEMPORARY FAILURE
  87โ”‚ 	StatusTemporaryFailure StatusCode = 40 // TEMPORARY FAILURE
  88โ”‚ 	StatusServerFailure    StatusCode = 41 // SERVER UNAVAILABLE
  89โ”‚ 	StatusCGIError         StatusCode = 42 // CGI ERROR
  90โ”‚ 	StatusProxyError       StatusCode = 43 // PROXY ERROR
  91โ”‚ 	StatusSlowDown         StatusCode = 44 // SLOW DOWN
  92โ”‚ 
  93โ”‚ 	// 5x - PERMANENT FAILURE
  94โ”‚ 	StatusPermanentFailure    StatusCode = 50 // PERMANENT FAILURE
  95โ”‚ 	StatusNotFound            StatusCode = 51 // NOT FOUND
  96โ”‚ 	StatusGone                StatusCode = 52 // GONE
  97โ”‚ 	StatusProxyRequestRefused StatusCode = 53 // PROXY REQUEST REFUSED
  98โ”‚ 	StatusBadRequest          StatusCode = 59 // BAD REQUEST
  99โ”‚ 
 100โ”‚ 	// 6x - CLIENT CERTIFICATE REQUIRED
 101โ”‚ 	StatusClientCertificateRequired StatusCode = 60 // CLIENT CERTIFICATE REQUIRED
 102โ”‚ 	StatusCertificateNotAuthorised  StatusCode = 61 // CERTIFICATE NOT AUTHORIZED
 103โ”‚ 	StatusCertificateNotValid       StatusCode = 62 // CERTIFICATE NOT VALID
 104โ”‚ )
 105โ”‚ 
 106โ”‚ //nolint:lll,gochecknoglobals // un exported lookup table of very long strings.
 107โ”‚ var statusCodeToText = map[StatusCode]string{
 108โ”‚ 	// 1x - INPUT
 109โ”‚ 	StatusInput:          `The requested resource accepts a line of textual user input. The <META> line is a prompt which should be displayed to the user. The same resource should then be requested again with the user's input included as a query component. Queries are included in requests as per the usual generic URL definition in RFC3986, i.e. separated from the path by a ?. Reserved characters used in the user's input must be "percent-encoded" as per RFC3986, and space characters should also be percent-encoded.`,
 110โ”‚ 	StatusSensitiveInput: `As per status code 10, but for use with sensitive input such as passwords. Clients should present the prompt as per status code 10, but the user's input should not be echoed to the screen to prevent it being read by "shoulder surfers".`,
 111โ”‚ 
 112โ”‚ 	// 2x - SUCCESS
 113โ”‚ 	StatusSuccess: `The request was handled successfully and a response body will follow the response header. The <META> line is a MIME media type which applies to the response body.`,
 114โ”‚ 
 115โ”‚ 	// 3x - REDIRECT
 116โ”‚ 	StatusTemporaryRedirect: `The server is redirecting the client to a new location for the requested resource. There is no response body. <META> is a new URL for the requested resource. The URL may be absolute or relative. The redirect should be considered temporary, i.e. clients should continue to request the resource at the original address and should not performance convenience actions like automatically updating bookmarks. There is no response body.`,
 117โ”‚ 	StatusPermanentRedirect: `The requested resource should be consistently requested from the new URL provided in future. Tools like search engine indexers or content aggregators should update their configurations to avoid requesting the old URL, and end-user clients may automatically update bookmarks, etc. Note that clients which only pay attention to the initial digit of status codes will treat this as a temporary redirect. They will still end up at the right place, they just won't be able to make use of the knowledge that this redirect is permanent, so they'll pay a small performance penalty by having to follow the redirect each time.`,
 118โ”‚ 
 119โ”‚ 	// 4x - TEMPORARY FAILURE
 120โ”‚ 	StatusTemporaryFailure: `The request has failed. There is no response body. The nature of the failure is temporary, i.e. an identical request MAY succeed in the future.`,
 121โ”‚ 	StatusServerFailure:    `The server is unavailable due to overload or maintenance.`,
 122โ”‚ 	StatusCGIError:         `A CGI process, or similar system for generating dynamic content, died unexpectedly or timed out.`,
 123โ”‚ 	StatusProxyError:       `A proxy request failed because the server was unable to successfully complete a transaction with the remote host.)`,
 124โ”‚ 	StatusSlowDown:         `Rate limiting is in effect.`,
 125โ”‚ 
 126โ”‚ 	// 5x - PERMANENT FAILURE
 127โ”‚ 	StatusPermanentFailure:    `The request has failed. There is no response body. The nature of the failure is permanent, i.e. identical future requests will reliably fail for the same reason.`,
 128โ”‚ 	StatusNotFound:            `The requested resource could not be found but may be available in the future.`,
 129โ”‚ 	StatusGone:                `The resource requested is no longer available and will not be available again. Search engines and similar tools should remove this resource from their indices. Content aggregators should stop requesting the resource and convey to their human users that the subscribed resource is gone.`,
 130โ”‚ 	StatusProxyRequestRefused: `The request was for a resource at a domain not served by the server and the server does not accept proxy requests.`,
 131โ”‚ 	StatusBadRequest:          `The server was unable to parse the client's request, presumably due to a malformed request.`,
 132โ”‚ 
 133โ”‚ 	// 6x - CLIENT CERTIFICATE REQUIRED
 134โ”‚ 	StatusClientCertificateRequired: `The requested resource requires a client certificate to access. If the request was made without a certificate, it should be repeated with one. If the request was made with a certificate, the server did not accept it and the request should be repeated with a different certificate.`,
 135โ”‚ 	StatusCertificateNotAuthorised:  `The supplied client certificate is not authorized for accessing the particular requested resource. The problem is not with the certificate itself, which may be authorised for other resources.`,
 136โ”‚ 	StatusCertificateNotValid:       `The supplied client certificate was not accepted because it is not valid. This indicates a problem with the certificate in and of itself, with no consideration of the particular requested resource. The most likely cause is that the certificate's validity start date is in the future or its expiry date has passed, but this code may also indicate an invalid signature, or a violation of a X509 standard requirements.`,
 137โ”‚ }
โ”€โ”€โ”€โ”€โ•ฏ

ยท ยท ยท

๐Ÿก Home

FAQs

Privacy Policy

Terms & Conditions

Official Gemlog

info@source.community

ยฉ 2024 source.community