Documentation ¶
Overview ¶
Copyright © 2023 Thomas von Dein
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Copyright © 2023 Thomas von Dein ¶
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Copyright © 2023 Thomas von Dein ¶
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Index ¶
- Constants
- func Duration2int(duration string) int
- func GetContext(j []byte) (string, error)
- func Untaint(input string, wanted *regexp.Regexp) (string, error)
- type Dbentry
- type Form
- func (form Form) Getcontext(j []byte) (string, error)
- func (form Form) IsType(t int) bool
- func (form Form) Marshal() ([]byte, error)
- func (form Form) MatchCreated(r *regexp.Regexp) bool
- func (form Form) MatchDescription(r *regexp.Regexp) bool
- func (form Form) MatchExpire(r *regexp.Regexp) bool
- func (form Form) MatchFile(r *regexp.Regexp) bool
- type Response
- type Result
- type Timestamp
- type Upload
- func (upload Upload) Getcontext(j []byte) (string, error)
- func (upload Upload) IsType(t int) bool
- func (upload Upload) Marshal() ([]byte, error)
- func (upload Upload) MatchCreated(r *regexp.Regexp) bool
- func (upload Upload) MatchDescription(r *regexp.Regexp) bool
- func (upload Upload) MatchExpire(r *regexp.Regexp) bool
- func (upload Upload) MatchFile(r *regexp.Regexp) bool
Constants ¶
const ( TypeUpload = iota TypeForm )
Variables ¶
This section is empty.
Functions ¶
func Duration2int ¶
We could use time.ParseDuration(), but this doesn't support days.
We could also use github.com/xhit/go-str2duration/v2, which does the job, but it's just another dependency, just for this little gem. And we don't need a time.Time value.
Convert a duration into seconds (int). Valid time units are "s", "m", "h" and "d".
func GetContext ¶
Extract context, whatever kind entry is, but we don't know in advance, only after unmarshalling. So try Upload first, if that fails, try Form.
func Untaint ¶
Untaint user input, that is: remove all non supported chars.
wanted is a regexp matching chars we shall leave. Everything else will be removed. Eg:
untainted := Untaint(input, `[^a-zA-Z0-9\-]`)
Returns a new string and an error if the input string has been modified. It's the callers choice to decide what to do about it. You may ignore the error and use the untainted string or bail out.
Types ¶
type Dbentry ¶
type Dbentry interface { Getcontext(j []byte) (string, error) Marshal() ([]byte, error) MatchExpire(r *regexp.Regexp) bool MatchDescription(r *regexp.Regexp) bool MatchFile(r *regexp.Regexp) bool MatchCreated(r *regexp.Regexp) bool IsType(t int) bool }
upload or form structs
type Form ¶
type Form struct { // Note the dual use of the Id: it will be used as onetime api key // from generated upload forms and stored in the session store so // that the upload handler is able to check if the form object has // to be deleted immediately (if its expire field has been set to // asap) Type int `json:"type"` Id string `json:"id"` Expire string `json:"expire"` Description string `json:"description"` Created Timestamp `json:"uploaded"` Context string `json:"context"` Url string `json:"url"` Notify string `json:"notify"` }
type Response ¶
type Response struct { Uploads []*Upload `json:"uploads"` Forms []*Form `json:"forms"` // integrate the Result struct so we can signal success Result }
this one is also used for marshalling to the client
type Result ¶
type Result struct { Success bool `json:"success"` Message string `json:"message"` Code int `json:"code"` }
used to return to the api client
type Timestamp ¶
Timestamp is like time.Time, but knows how to unmarshal from JSON Unix timestamp numbers or RFC3339 strings, and marshal back into the same JSON representation.
func (Timestamp) MarshalJSON ¶
func (*Timestamp) UnmarshalJSON ¶
type Upload ¶
type Upload struct { Type int `json:"type"` Id string `json:"id"` Expire string `json:"expire"` File string `json:"file"` // final filename (visible to the downloader) Members []string `json:"members"` // contains multiple files, so File is an archive Created Timestamp `json:"uploaded"` Context string `json:"context"` Description string `json:"description"` Url string `json:"url"` }
func (Upload) Getcontext ¶
implement Dbentry interface