Merge branch 'master' into tklk/issue-3389

This commit is contained in:
techknowlogick 2018-07-06 22:15:19 -04:00 committed by GitHub
commit b66fb813e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 1364 additions and 120 deletions

2
Gopkg.lock generated
View File

@ -11,7 +11,7 @@
branch = "master"
name = "code.gitea.io/sdk"
packages = ["gitea"]
revision = "b2308e3f700875a3642a78bd3f6e5db8ef6f974d"
revision = "ec80752c9512cf07fc62ddc42565118183743942"
[[projects]]
name = "github.com/PuerkitoBio/goquery"

View File

@ -55,6 +55,9 @@ else
endif
endif
# $(call strip-suffix,filename)
strip-suffix = $(firstword $(subst ., ,$(1)))
.PHONY: all
all: build
@ -301,7 +304,7 @@ public/js/index.js: $(JAVASCRIPTS)
.PHONY: stylesheets-check
stylesheets-check: generate-stylesheets
@diff=$$(git diff public/css/index.css); \
@diff=$$(git diff public/css/*); \
if [ -n "$$diff" ]; then \
echo "Please run 'make generate-stylesheets' and commit the result:"; \
echo "$${diff}"; \
@ -311,6 +314,7 @@ stylesheets-check: generate-stylesheets
.PHONY: generate-stylesheets
generate-stylesheets:
node_modules/.bin/lessc --clean-css public/less/index.less public/css/index.css
$(foreach file, $(filter-out public/less/themes/_base.less, $(wildcard public/less/themes/*)),node_modules/.bin/lessc --clean-css public/less/themes/$(notdir $(file)) > public/css/theme-$(notdir $(call strip-suffix,$(file))).css;)
.PHONY: swagger-ui
swagger-ui:

View File

@ -75,6 +75,8 @@ THEME_COLOR_META_TAG = `#6cc644`
MAX_DISPLAY_FILE_SIZE = 8388608
; Whether the email of the user should be shown in the Explore Users page
SHOW_USER_EMAIL = true
; Set the default theme for the Gitea install
DEFAULT_THEME = gitea
[ui.admin]
; Number of users that are displayed on one page
@ -301,7 +303,13 @@ ENABLE_NOTIFY_MAIL = false
ENABLE_REVERSE_PROXY_AUTHENTICATION = false
ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
; Enable captcha validation for registration
ENABLE_CAPTCHA = true
ENABLE_CAPTCHA = false
; Type of captcha you want to use. Options: image, recaptcha
CAPTCHA_TYPE = image
; Enable recaptcha to use Google's recaptcha service
; Go to https://www.google.com/recaptcha/admin to sign up for a key
RECAPTCHA_SECRET =
RECAPTCHA_SITEKEY =
; Default value for KeepEmailPrivate
; Each new user will get the value of this setting copied into their profile
DEFAULT_KEEP_EMAIL_PRIVATE = false

View File

@ -68,6 +68,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
- `EXPLORE_PAGING_NUM`: **20**: Number of repositories that are shown in one explore page.
- `ISSUE_PAGING_NUM`: **10**: Number of issues that are shown in one page (for all pages that list issues).
- `FEED_MAX_COMMIT_NUM`: **5**: Number of maximum commits shown in one activity feed.
- `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install.
### UI - Admin (`ui.admin`)
@ -177,7 +178,10 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
- `ENABLE_REVERSE_PROXY_AUTHENTICATION`: **false**: Enable this to allow reverse proxy authentication.
- `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION`: **false**: Enable this to allow auto-registration
for reverse authentication.
- `ENABLE_CAPTCHA`: **true**: Enable this to use captcha validation for registration.
- `ENABLE_CAPTCHA`: **false**: Enable this to use captcha validation for registration.
- `CAPTCHA_TYPE`: **image**: \[image, recaptcha\]
- `RECAPTCHA_SECRET`: **""**: Go to https://www.google.com/recaptcha/admin to get a secret for recaptcha
- `RECAPTCHA_SITEKEY`: **""**: Go to https://www.google.com/recaptcha/admin to get a sitekey for recaptcha
## Webhook (`webhook`)
@ -279,6 +283,13 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
- `MAX_GIT_DIFF_FILES`: **100**: Max number of files shown in diff view.
- `GC_ARGS`: **\<empty\>**: Arguments for command `git gc`, e.g. `--aggressive --auto`.
## Git - Timeout settings (`git.timeout`)
- `MIGRATE`: **600**: Migrate external repositories timeout seconds.
- `MIRROR`: **300**: Mirror external repositories timeout seconds.
- `CLONE`: **300**: Git clone from internal repositories timeout seconds.
- `PULL`: **300**: Git pull from internal repositories timeout seconds.
- `GC`: **60**: Git repository GC timeout seconds.
## API (`api`)
- `ENABLE_SWAGGER_ENDPOINT`: **true**: Enables /api/swagger, /api/v1/swagger etc. endpoints. True or false; default is true.

View File

@ -187,6 +187,13 @@ menu:
- `MAX_GIT_DIFF_FILES`: 比较视图中的最大现实文件数目。
- `GC_ARGS`: 执行 `git gc` 命令的参数, 比如: `--aggressive --auto`
## Git - 超时设置 (`git.timeout`)
- `MIGRATE`: **600**: 迁移外部仓库时的超时时间,单位秒
- `MIRROR`: **300**: 镜像外部仓库的超时时间,单位秒
- `CLONE`: **300**: 内部仓库间克隆的超时时间,单位秒
- `PULL`: **300**: 内部仓库间拉取的超时时间,单位秒
- `GC`: **60**: git仓库GC的超时时间单位秒
## markup (`markup`)
外部渲染工具支持,你可以用你熟悉的文档渲染工具. 比如一下将新增一个名字为 `asciidoc` 的渲染工具which is followed `markup.` ini section. And there are some config items below.

View File

@ -91,3 +91,7 @@ Apart from `extra_links.tmpl` and `extra_tabs.tmpl`, there are other useful temp
## Customizing gitignores, labels, licenses, locales, and readmes.
Place custom files in corresponding sub-folder under `custom/options`.
## Customizing the look of Gitea
Gitea has two built-in themes, the default theme `gitea`, and a dark theme `arc-green`. To change the look of your Gitea install change the value of `DEFAULT_THEME` in the [ui](https://docs.gitea.io/en-us/config-cheat-sheet/#ui-ui) section of `app.ini` to another one of the available options.

View File

@ -21,10 +21,18 @@ the destination platform from the [downloads page](https://dl.gitea.io/gitea), c
the URL and replace the URL within the commands below:
```sh
wget -O gitea https://dl.gitea.io/gitea/1.4.2/gitea-1.4.2-linux-amd64
wget -O gitea https://dl.gitea.io/gitea/1.4.3/gitea-1.4.3-linux-amd64
chmod +x gitea
```
## Verify GPG signature
Gitea signs all binaries with a [GPG key](https://pgp.mit.edu/pks/lookup?op=vindex&fingerprint=on&search=0x2D9AE806EC1592E2) to prevent against unwanted modification of binaries. To validate the binary download the signature file which ends in `.asc` for the binary you downloaded and use the gpg command line tool.
```sh
gpg --keyserver pgp.mit.edu --recv 0x2D9AE806EC1592E2
gpg --verify gitea-1.5.0-linux-amd64.asc gitea-1.5.0-linux-amd64
```
## Test
After getting a binary, it can be tested with `./gitea web` or moved to a permanent

View File

@ -0,0 +1,50 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
"net/http"
"testing"
"code.gitea.io/gitea/models"
api "code.gitea.io/sdk/gitea"
)
// TestAPICreateAndDeleteToken tests that token that was just created can be deleted
func TestAPICreateAndDeleteToken(t *testing.T) {
prepareTestEnv(t)
user := models.AssertExistsAndLoadBean(t, &models.User{ID: 1}).(*models.User)
req := NewRequestWithJSON(t, "POST", "/api/v1/users/user1/tokens", map[string]string{
"name": "test-key-1",
})
req = AddBasicAuthHeader(req, user.Name)
resp := MakeRequest(t, req, http.StatusCreated)
var newAccessToken api.AccessToken
DecodeJSON(t, resp, &newAccessToken)
models.AssertExistsAndLoadBean(t, &models.AccessToken{
ID: newAccessToken.ID,
Name: newAccessToken.Name,
Sha1: newAccessToken.Sha1,
UID: user.ID,
})
req = NewRequestf(t, "DELETE", "/api/v1/users/user1/tokens/%d", newAccessToken.ID)
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusNoContent)
models.AssertNotExistsBean(t, &models.AccessToken{ID: newAccessToken.ID})
}
// TestAPIDeleteMissingToken ensures that error is thrown when token not found
func TestAPIDeleteMissingToken(t *testing.T) {
prepareTestEnv(t)
user := models.AssertExistsAndLoadBean(t, &models.User{ID: 1}).(*models.User)
req := NewRequestf(t, "DELETE", "/api/v1/users/user1/tokens/%d", models.NonexistentID)
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusNotFound)
}

View File

@ -256,6 +256,11 @@ func NewRequestWithBody(t testing.TB, method, urlStr string, body io.Reader) *ht
return request
}
func AddBasicAuthHeader(request *http.Request, username string) *http.Request {
request.SetBasicAuth(username, userPassword)
return request
}
const NoExpectedStatus = -1
func MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *httptest.ResponseRecorder {

View File

@ -122,6 +122,12 @@ func (a *Action) loadRepo() {
}
}
// GetActFullName gets the action's user full name.
func (a *Action) GetActFullName() string {
a.loadActUser()
return a.ActUser.FullName
}
// GetActUserName gets the action's user name.
func (a *Action) GetActUserName() string {
a.loadActUser()

View File

@ -72,10 +72,11 @@ func (f *InstallForm) Validate(ctx *macaron.Context, errs binding.Errors) bindin
// RegisterForm form for registering
type RegisterForm struct {
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"Required;MaxSize(255)"`
Retype string
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"Required;MaxSize(255)"`
Retype string
GRecaptchaResponse string `form:"g-recaptcha-response"`
}
// Validate valideates the fields

View File

@ -22,8 +22,9 @@ func (f *SignInOpenIDForm) Validate(ctx *macaron.Context, errs binding.Errors) b
// SignUpOpenIDForm form for signin up with OpenID
type SignUpOpenIDForm struct {
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
GRecaptchaResponse string `form:"g-recaptcha-response"`
}
// Validate valideates the fields

View File

@ -101,7 +101,7 @@ var (
func (r *Renderer) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) {
prefix := r.URLPrefix
if r.IsWiki {
prefix = util.URLJoin(prefix, "wiki", "src")
prefix = util.URLJoin(prefix, "wiki", "raw")
}
prefix = strings.Replace(prefix, "/src/", "/raw/", 1)
if len(link) > 0 {

View File

@ -0,0 +1,47 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package recaptcha
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"time"
"code.gitea.io/gitea/modules/setting"
)
// Response is the structure of JSON returned from API
type Response struct {
Success bool `json:"success"`
ChallengeTS time.Time `json:"challenge_ts"`
Hostname string `json:"hostname"`
ErrorCodes []string `json:"error-codes"`
}
const apiURL = "https://www.google.com/recaptcha/api/siteverify"
// Verify calls Google Recaptcha API to verify token
func Verify(response string) (bool, error) {
resp, err := http.PostForm(apiURL,
url.Values{"secret": {setting.Service.RecaptchaSecret}, "response": {response}})
if err != nil {
return false, fmt.Errorf("Failed to send CAPTCHA response: %s", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return false, fmt.Errorf("Failed to read CAPTCHA response: %s", err)
}
var jsonResponse Response
err = json.Unmarshal(body, &jsonResponse)
if err != nil {
return false, fmt.Errorf("Failed to parse CAPTCHA response: %s", err)
}
return jsonResponse.Success, nil
}

View File

@ -75,6 +75,12 @@ const (
RepoCreatingPublic = "public"
)
// enumerates all the types of captchas
const (
ImageCaptcha = "image"
ReCaptcha = "recaptcha"
)
// settings
var (
// AppVer settings
@ -274,6 +280,7 @@ var (
ThemeColorMetaTag string
MaxDisplayFileSize int64
ShowUserEmail bool
DefaultTheme string
Admin struct {
UserPagingNum int
@ -297,6 +304,7 @@ var (
ReactionMaxUserNum: 10,
ThemeColorMetaTag: `#6cc644`,
MaxDisplayFileSize: 8388608,
DefaultTheme: `gitea`,
Admin: struct {
UserPagingNum int
RepoPagingNum int
@ -1165,6 +1173,9 @@ var Service struct {
EnableReverseProxyAuth bool
EnableReverseProxyAutoRegister bool
EnableCaptcha bool
CaptchaType string
RecaptchaSecret string
RecaptchaSitekey string
DefaultKeepEmailPrivate bool
DefaultAllowCreateOrganization bool
EnableTimetracking bool
@ -1189,7 +1200,10 @@ func newService() {
Service.RequireSignInView = sec.Key("REQUIRE_SIGNIN_VIEW").MustBool()
Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool()
Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool()
Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool()
Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool(false)
Service.CaptchaType = sec.Key("CAPTCHA_TYPE").MustString(ImageCaptcha)
Service.RecaptchaSecret = sec.Key("RECAPTCHA_SECRET").MustString("")
Service.RecaptchaSitekey = sec.Key("RECAPTCHA_SITEKEY").MustString("")
Service.DefaultKeepEmailPrivate = sec.Key("DEFAULT_KEEP_EMAIL_PRIVATE").MustBool()
Service.DefaultAllowCreateOrganization = sec.Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").MustBool(true)
Service.EnableTimetracking = sec.Key("ENABLE_TIMETRACKING").MustBool(true)

View File

@ -186,6 +186,9 @@ func NewFuncMap() []template.FuncMap {
"ParseDeadline": func(deadline string) []string {
return strings.Split(deadline, "|")
},
"DefaultTheme": func() string {
return setting.UI.DefaultTheme
},
}}
}

View File

@ -75,6 +75,7 @@ cancel=Abbrechen
[install]
install=Installation
title=Erstkonfiguration
docker_helper=Wenn du Gitea in einem Docker-Container nutzt, lies bitte die <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>, bevor du irgendwelche Einstellungen veränderst.
requite_db_desc=Gitea benötigt MySQL, PostgreSQL, MSSQL, SQLite3 oder TiDB.
db_title=Datenbankeinstellungen
db_type=Datenbanktyp
@ -491,8 +492,13 @@ owner=Besitzer
repo_name=Repository-Name
repo_name_helper=Ein guter Repository-Name besteht normalerweise aus kurzen, unvergesslichen und einzigartigen Schlagwörtern.
visibility=Sichtbarkeit
visibility_helper=Markiere das Repository als privat
visibility_helper_forced=Auf dieser Gitea-Instanz können nur private Repositories angelegt werden.
visibility_fork_helper=(Eine Änderung dieses Wertes wirkt sich auf alle Forks aus)
clone_helper=Benötigst du Hilfe beim Klonen? Öffne die <a target="_blank" rel="noopener noreferrer" href="%s">Hilfe</a>.
fork_repo=Repository forken
fork_from=Fork von
fork_visibility_helper=Die Sichtbarkeit eines geforkten Repositorys kann nicht geändert werden.
repo_desc=Beschreibung
repo_lang=Sprache
repo_gitignore_helper=Wähle eine .gitignore-Vorlage aus.
@ -607,6 +613,7 @@ editor.directory_is_a_file=Der Verzeichnisname „%s“ wird bereits als Dateina
editor.file_is_a_symlink='%s' ist ein symolischer Link. Symbolische Links können mit dem Web Editor nicht bearbeitet werden.
editor.filename_is_a_directory=Der Dateiname „%s“ wird bereits als Verzeichnisname in diesem Repository verwendet.
editor.file_editing_no_longer_exists=Die bearbeitete Datei „%s“ existiert nicht mehr in diesem Repository.
editor.file_changed_while_editing=Der Inhalt der Datei hat sich seit dem Beginn der Bearbeitung geändert. <a target="_blank" rel="noopener noreferrer" href="%s">Hier klicken</a>, um die Änderungen anzusehen, oder <strong>Änderungen erneut comitten</strong>, um sie zu überschreiben.
editor.file_already_exists=Eine Datei mit dem Namen „%s“ ist bereits in diesem Repository vorhanden.
editor.no_changes_to_show=Keine Änderungen vorhanden.
editor.fail_to_update_file=Fehler beim Ändern/Erstellen der Datei „%s“. Fehler: %v
@ -662,7 +669,7 @@ issues.change_milestone_at=`hat den Meilenstein %[3]s von <b>%[1]s</b> zu <b>%[2
issues.remove_milestone_at=`hat diesen Issue %[2]s vom <b>%[1]s</b> Meilenstein entfernt`
issues.deleted_milestone=`(gelöscht)`
issues.self_assign_at=`hat sich das Issue %s selbst zugewiesen`
issues.add_assignee_at=`wurde %[1]s zugewiesen von <b>%[2]s</b>`
issues.add_assignee_at=`wurde von <b>%s</b> %s zugewiesen`
issues.remove_assignee_at=`hat seine Zuweisung %s entfernt`
issues.change_title_at=`Titel von <b>%s</b> nach <b>%s</b> %s geändert`
issues.delete_branch_at=`löschte die Branch <b>%s</b> %s`
@ -987,6 +994,7 @@ settings.search_user_placeholder=Benutzer suchen…
settings.org_not_allowed_to_be_collaborator=Organisationen können nicht als Mitarbeiter hinzugefügt werden.
settings.user_is_org_member=Der Benutzer ist ein Organisationsmitglied und kann nicht als Mitarbeiter hinzugefügt werden.
settings.add_webhook=Webhook hinzufügen
settings.hooks_desc=Webhooks senden bei bestimmten Gitea-Events automatisch „HTTP POST“-Anfragen an einen Server. Lies mehr in unserer <a target="_blank" rel="noopener noreferrer" href="%s">Anleitung zu Webhooks (auf Englisch)</a>.
settings.webhook_deletion=Webhook löschen
settings.webhook_deletion_desc=Das Entfernen eines Webhooks löscht seine Einstellungen und Zustellungsverlauf. Fortfahren?
settings.webhook_deletion_success=Webhook wurde entfernt.
@ -1003,6 +1011,7 @@ settings.githook_edit_desc=Wenn ein Hook nicht aktiv ist, wird der Standardinhal
settings.githook_name=Hook-Name
settings.githook_content=Hook-Inhalt
settings.update_githook=Hook aktualisieren
settings.add_webhook_desc=Gitea sendet einen <code>POST</code>-Request mit festgelegtem Content-Type an die Ziel-URL. Mehr Informationen findest du in der <a target="_blank" rel="noopener noreferrer" href="%s">Anleitung zu Webhooks (Englisch)</a>.
settings.payload_url=Ziel-URL
settings.content_type=POST-Content-Type
settings.secret=Secret
@ -1264,6 +1273,8 @@ dashboard.operation_switch=Wechseln
dashboard.operation_run=Ausführen
dashboard.clean_unbind_oauth=Nicht verbundene OAuth-Verbindungen löschen
dashboard.clean_unbind_oauth_success=Alle unverbundene OAuth-Verbindungen wurden gelöscht.
dashboard.delete_inactivate_accounts=Lösche alle nicht-aktivierten Accounts
dashboard.delete_inactivate_accounts_success=Alle nicht-aktivierten Accounts wurden gelöscht.
dashboard.delete_repo_archives=Alle Repository-Archive löschen
dashboard.delete_repo_archives_success=Alle Repository-Archive wurden gelöscht.
dashboard.delete_missing_repos=Alle Repository-Datensätze mit verlorenen gegangenen Git-Dateien löschen

View File

@ -75,6 +75,7 @@ cancel=Avbryt
[install]
install=Installation
title=Ursprunglig konfiguration
docker_helper=Om du kör Gitea i Docker, vänligen läs igenom <a target="_blank" rel="noopener noreferrer" href="%s">dokumentationen</a> innan några inställningar ändras.
requite_db_desc=Gitea behöver MySQL, PostgreSQL, MSSQL, SQLite3 eller TiDB.
db_title=Databasinställningar
db_type=Databastyp
@ -165,25 +166,37 @@ disable_register_mail=Bekräftelsemejl vid registrering är inaktiverad.
remember_me=Kom ihåg mig
forgot_password_title=Glömt lösenord
forgot_password=Glömt lösenord?
sign_up_now=Behöver du ett konto? Registrera nu.
confirmation_mail_sent_prompt=Ett nytt bekräftelsemail has skickats till <b>%s</b>. Vänligen kolla din inkorg inom dom kommande %s för att slutföra registreringsprocessen.
reset_password_mail_sent_prompt=Ett bekräftelsemail has skickats till <b>%s</b>. Vänligen kolla din inkorg inom dom kommande %s för att slutföra lösenordsändringsprocessen.
active_your_account=Aktivera ditt konto
prohibit_login=Inloggning otillåten
prohibit_login_desc=Ditt konto tillåts ej att logga in, vänligen kontakta din sidadministratör.
resent_limit_prompt=Du har redan begärt ett aktiveringsmejl nyligen. Vänligen vänta 3 minuter och försök igen.
has_unconfirmed_mail=Hej %s, du har en obekräftad epostaddress (<b>%s</b>). Om du inte har fått ett bekräftelsemail eller behöver ett nytt, klicka på knappen nedan.
resend_mail=Klicka här för att skicka ditt aktiveringsmejl igen
email_not_associate=Denna e-postadress är inte knutet till något konto.
send_reset_mail=Klicka här för att skicka e-post med lösenordsåterställning igen
reset_password=Återställ ditt lösenord
invalid_code=Din bekräftelsekod är ogiltig eller har löpt ut.
reset_password_helper=Klicka här för att återställa ditt lösenord
password_too_short=Lösenordet får ej vara kortare än %d tecken.
non_local_account=Externa användare kan inte ändra sitt lösenord genom Giteas webbgränssnitt.
verify=Verifiera
scratch_code=Skrapkod
use_scratch_code=Använd en skrapkod
twofa_scratch_used=Du har använt din skrapkod. Du har blivit omdirigerad till tvåfaktorsinställningarna så att du kan ta bort din aktiverade enhet eller generera en ny skrapkod.
twofa_passcode_incorrect=Din kod är inte giltig. Om du har tappat bort din enhet, använd din skrapkod för att logga in.
twofa_scratch_token_incorrect=Din skrapkod är ogiltlig.
login_userpass=Logga in
login_openid=OpenID
openid_connect_submit=Anslut
openid_connect_title=Anslut ett existerande konto
openid_connect_desc=Vald OpenID URI är okänd. Associera den med ett nytt konto här.
openid_register_title=Skapa nytt konto
openid_register_desc=Vald OpenID URI är okänd. Associera den med ett nytt konto här.
openid_signin_desc=Ange din OpenID URI. Exempelvis: https://anne.me, bob.openid.org.cn eller gnusocial.net/carry.
disable_forgot_password_mail=Återställning av lösenord är inaktiverat. Kontakta webbplatsadministratören.
[mail]
activate_account=Vänligen aktivera ditt konto
@ -195,12 +208,14 @@ register_notify=Välkommen till Gitea
[modal]
yes=Ja
no=Nej
modify=Uppdatera
[form]
UserName=Användarnamn
RepoName=Utvecklingskatalogens namn
Email=E-postadress
Password=Lösenord
Retype=Upprepa lösenordet
SSHTitle=SSH-nyckelnamn
HttpsUrl=HTTPS-URL
PayloadUrl=Payload-URL
@ -216,6 +231,9 @@ TreeName=Filsökväg
Content=Innehåll
require_error=får inte vara tomt
alpha_dash_error=` bör endast innehålla alfanumeriska tecken, bindestreck ('-') och understreck ('_').`
alpha_dash_dot_error=` bör endast innehålla alfanumeriska tecken, bindestreck ('-'), understreck ('_') och punkter ('.').`
git_ref_name_error=` måste vara ett för Git välformaterat referensnamn.'
size_error=` måste vara av storleken %s`
min_size_error=` måste innehålla minst %s tecken.`
max_size_error=` får inte innehålla mer än %s tecken.`
@ -223,7 +241,10 @@ email_error=` är inte en giltlig epostaddress.`
url_error=Den givna URL-adressen är inte valid
include_error=` måste innehålla texten '%s'.`
unknown_error=Okänt fel:
captcha_incorrect=CAPTCHA-koden är ogiltig.
password_not_match=Lösenorden matchar inte.
username_been_taken=Användarnamnet är redan taget.
repo_name_been_taken=Namnet för utvecklingskatalogen är upptaget.
user_not_exist=Användaren finns inte.
@ -283,19 +304,43 @@ new_password=Nytt lösenord
emails=E-postadresser
email_desc=Din primära e-postadress kommer att användas för notifieringar och andra åtgärder.
primary=Primär
add_new_email=Lägg till ny mejladress
add_new_openid=Lägg till ny OpenID URI
add_email=Lägg till mejladress
add_openid=Lägg till OpenID URI
add_email_confirmation_sent=Ett bekräftelsemail har skickats till '%s'. Vänligen kontrollera din inkorg inom de närmsta %s för att slutföra bekräftelsen.
add_email_success=Den nya mejladressen har lagts till.
add_openid_success=Den nya OpenID-adressen har lagts till.
keep_email_private=Göm mejladress
keep_email_private_popup=Din mejladress kommer döljas för andra användare.
openid_desc=OpenID låter dig delegera autentiseringen till en extern leverantör.
manage_ssh_keys=Hantera SSH-nycklar
manage_gpg_keys=Hantera GPG-nycklar
add_key=Lägg till nyckel
ssh_desc=Dessa publika SSH nycklar är associerade med ditt konto. De motsvarande privata nycklarna tillåter full åtkomst till dina utvecklingskataloger.
gpg_desc=Dessa publika GPG nycklar är associerade med ditt konto. Håll dina privata nycklar säkra då de tillåter att commits kan verifieras.
ssh_helper=<strong>Behöver du hjälp?</strong> Kolla in Github's guide för att <a href="%s">skapa din egen SSH-nycklar</a> eller lösa <a href="%s">vanliga problem</a> som kan uppstå med SSH.
gpg_helper=<strong>Behöver du hjälp?</strong> Ta en titt på Github's guide <a href="%s"> om GPG</a>.
add_new_key=Lägg till SSH-nyckel
add_new_gpg_key=Lägg till GPG-nyckel
ssh_key_been_used=Denna SSH-nyckel är redan associerad med ditt konto.
ssh_key_name_used=En SSH-nyckel med samma namn är redan associerad med ditt konto.
gpg_key_id_used=En publik GPG-nyckel med samma ID existerar redan.
gpg_no_key_email_found=Denna GPG-nyckel är inte brukbar med någon utav mejladresserna associerade med ditt konto.
subkeys=Undernycklar
key_id=Nyckel-ID
key_name=Nyckelnamn
key_content=Innehåll
add_key_success=SSH-nyckel '%s' har lagts till.
add_gpg_key_success=GPG-nyckel '%s' har lagts till.
delete_key=Ta bort
ssh_key_deletion=Ta bort SSH-nyckel
gpg_key_deletion=Ta bort GPG-nyckel
ssh_key_deletion_desc=Borttagning utav en SSH-nyckel återkallar dess åtkomst till ditt konto. Vill du fortsätta?
gpg_key_deletion_desc=Att ta bort en GPG-nyckel kommer vederlägga tidigare verifierade commits som signerats utav den. Vill du fortsätta?
ssh_key_deletion_success=SSH-nyckeln har blivit borttagen.
gpg_key_deletion_success=GPG-nyckeln har blivit borttagen.
add_on=Tillagd
valid_until=Giltig t.om.
valid_forever=Giltig för alltid
@ -307,20 +352,46 @@ key_state_desc=Denna nyckel har använts inom dom senaste 7 dagarna
token_state_desc=Denna token har används inom dom senaste 7 dagarna
show_openid=Synlig på min profil
hide_openid=Dold från min profil
ssh_disabled=SSH är inaktiverat
manage_social=Hantera länkade sociala konton
social_desc=Dessa sociala konton är länkade till ditt Gitea konto. Var god kontrollera att du känns vid samtliga då de kan användas för att logga in på ditt Gitea konto.
unbind=Koppla från
unbind_success=Socialt konto har frånkopplats ditt Gitea konto.
manage_access_token=Hantera åtkomst-tokens
generate_new_token=Generera Nya Tokens
tokens_desc=Dessa tokens tillåter åtkomst till ditt konto via Gitea API.
new_token_desc=Applikationer som använder en token har full åtkomst till ditt konto.
token_name=Tokennamn
generate_token=Generera Token
generate_token_success=Din nya token har genererats. Kopiera nu då den inte kommer visas igen.
delete_token=Radera
access_token_deletion=Ta bort åtkomst token
access_token_deletion_desc=Borttagning utav en token kommer återkalla åtkomst till ditt konto för de applikationer som använder den. Vill du fortsätta?
delete_token_success=Token har tagits bort. Applikationer som använder den kommer inte längre ha åtkomst till ditt konto.
twofa_desc=Tvåfaktorsautentisering förbättrar säkerheten på ditt konto.
twofa_is_enrolled=Ditt konto är för närvarande <strong>uppsäkrad</strong> med tvåfaktorsautentisering.
twofa_not_enrolled=Ditt konto är för närvarande inte uppsäkrad med tvåfaktorsautentisering.
twofa_disable=Inaktivera tvåfaktorsautentisering
twofa_scratch_token_regenerate=Generera ny skrapkod
twofa_scratch_token_regenerated=Din skrapkod är nu %s. Förvara den på en säker plats.
twofa_enroll=Aktivera tvåfaktorsautentisering
twofa_disable_note=Du kan inaktivera tvåfaktorsautentisering om det behövs.
twofa_disable_desc=Avaktivering av tvåfaktorsautentisering kommer göra ditt konto mindre säkert. Vill du fortsätta?
regenerate_scratch_token_desc=Om du tappat bort din skrapkod, eller redan använt den för att logga in, så kan du återställa den här.
twofa_disabled=Tvåfaktorsautentisering har blivit avaktiverat.
scan_this_image=Skanna denna bild med ditt autentiseringsprogram:
or_enter_secret=Eller skriv in följande sträng: %s
then_enter_passcode=Och ange den lösenkod som visas i programmet:
passcode_invalid=Koden är ogiltig. Försök igen.
twofa_enrolled=Tvåfaktorsautentisering har aktiverats för ditt konto. Förvara din skrapkod (%s) på en säker plats eftersom den bara visas en gång!
u2f_desc=Säkerhetsnycklar är maskinvaruenheter som innehåller kryptografiska nycklar. De kan användas för tvåfaktorautentisering. Säkerhetsnyckeln måste dock stödja <a href="https://fidoalliance.org/">FIDO U2F</a> standarden.
u2f_require_twofa=Tvåfaktorautentisering måste aktiveras för att kunna använda säkerhetsnycklar.
u2f_register_key=Lägg till säkerhetsnyckel
u2f_nickname=Smeknamn
orgs_none=Du är inte en medlem i någon organisation.
@ -333,8 +404,13 @@ confirm_delete_account=Bekräfta Borttagelsen
owner=Ägare
repo_name=Utvecklingskatalogens namn
visibility=Synligt för
visibility_helper=Gör utvecklingskatalogen privat
visibility_helper_forced=Din tjänstadministratör påtvingar privata utvecklingskataloger.
visibility_fork_helper=(Ändring av detta kommer påverka alla forkar.)
clone_helper=Hjälp med kloning? Se <a target="_blank" rel="noopener" href="%s">hjälp</a>.
fork_repo=Forka Repo
fork_from=Forka Från
fork_visibility_helper=Synligheten av en forkad utvecklingskatalog kan inte ändras.
repo_desc=Beskrivning
repo_lang=Språk
license=Licens
@ -393,30 +469,50 @@ file_permalink=Permalänk
stored_lfs=Sparad med Git LFS
editor.preview_changes=Förhandsgranska ändringar
editor.fork_before_edit=Du måste forka denna utvecklingskatalog för att göra eller föreslå förändringar på denna fil.
editor.delete_this_file=Ta bort fil
editor.must_have_write_access=Du måste ha skrivåtkomst för att göra eller föreslå ändringar av denna fil.
editor.file_delete_success=Fil '%s' har tagits bort.
editor.name_your_file=Namnge din fil…
editor.filename_help=Lägg till en katalog genom att skriva dess namn följt utav en slash ('/'). Ta bort katalog genom att sudda i början utav fältet.
editor.or=eller
editor.cancel_lower=Avbryt
editor.commit_changes=Checka in ändringar
editor.add_tmpl=Lägg till '%s/<filename>'
editor.add=Lägg till '%s'
editor.update=Uppdatera '%s'
editor.delete=Tag bort '%s'
editor.commit_message_desc=Lägg till en valfri utökad beskrivning…
editor.commit_directly_to_this_branch=Checka in direkt till grenen <strong class="branch-name">%s</strong>.
editor.create_new_branch=Skapa en <strong>ny gren</strong> för denna incheckning och påbörja en hämtningsbegäran.
editor.new_branch_name_desc=Nytt branchnamn…
editor.cancel=Avbryt
editor.filename_cannot_be_empty=Filnamnet kan inte vara tomt.
editor.branch_already_exists=Grenen '%s' finns redan i förrådet.
editor.directory_is_a_file=Katalognamnet '%s' används redan som ett filnamn i denna utvecklingskatalog.
editor.file_is_a_symlink='%s' är en symbolisk länk. Symboliska länkar kan inte editeras i webbgränssnittet
editor.no_changes_to_show=Det finns inga ändringar att visa.
editor.fail_to_update_file=Uppdateringen/skapandet av filen '%s' misslyckades med felet: %v
editor.add_subdir=Lägga till en katalog…
editor.unable_to_upload_files=Uppladdning av filen '%s' misslyckades med felet: %v
editor.upload_files_to_dir=Ladda upp filer till '%s'
editor.cannot_commit_to_protected_branch=Kan inte commita till den skyddade branchen '%s'.
commits.desc=Bläddra i källkodens förändringshistorik.
commits.commits=Incheckningar
commits.search=Sök commits…
commits.find=Sök
commits.search_all=Alla brancher
commits.author=Upphovsman
commits.message=Meddelande
commits.date=Datum
commits.older=Äldre
commits.newer=Nyare
commits.signed_by=Signerad av
commits.gpg_key_id=GPG-nyckel ID
ext_issues=Externa ärenden
ext_issues.desc=Länk till externt ärendehanteringssystem.
issues.new=Nytt Ärende
issues.new.labels=Etiketter
@ -427,6 +523,8 @@ issues.new.no_milestone=Ingen Milsten
issues.new.clear_milestone=Rensa milstenar
issues.new.open_milestone=Öppna Milstenar
issues.new.closed_milestone=Stängda Milstenar
issues.new.assignees=Tilldelade
issues.new.clear_assignees=Rensa tilldelade
issues.new.no_assignees=Ingen tilldelad
issues.no_ref=Ingen branch/Tag specificerad
issues.create=Skapa Ärende
@ -435,7 +533,9 @@ issues.new_label_placeholder=Etikettsnamn
issues.new_label_desc_placeholder=Beskrivning
issues.create_label=Skapa Etikett
issues.label_templates.title=Ladda en fördefinierad uppsättning etiketter
issues.label_templates.info=Inga etiketter finns ännu. Skapa en etikett med 'Ny etikett' eller använd fördefinierade etiketter:
issues.label_templates.helper=Markera en uppsättning etiketter
issues.label_templates.use=Använd etikettsamling
issues.label_templates.fail_to_load_file=Laddning av etikettmallen '%s' misslyckades: %v
issues.add_label_at=lade till etiketten <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
issues.remove_label_at=tog bort etiketten <div class="ui label" style="color: %s\; background-color: %s">%s</div> %s
@ -451,8 +551,11 @@ issues.delete_branch_at='tog bort grenen <b>%s</b> %s'
issues.open_tab=%d Öppna
issues.close_tab=%d Stängda
issues.filter_label=Etikett
issues.filter_label_no_select=Alla etiketter
issues.filter_milestone=Milsten
issues.filter_milestone_no_select=Alla milstolpar
issues.filter_assignee=Förvärvare
issues.filter_assginee_no_select=Alla tilldelade
issues.filter_type=Typ
issues.filter_type.all_issues=Alla ärenden
issues.filter_type.assigned_to_you=Tilldelad dig
@ -677,14 +780,44 @@ settings.external_tracker_url=URL För Extern Ärendehanterare
settings.external_tracker_url_error=Länken för ärendehanteringsystemet är inte en giltig länk.
settings.external_tracker_url_desc=Besökare dirigeras om till länken för det externa ärendehanteringssystemet när de trycker på ärende-tabben.
settings.tracker_url_format=URL-Format För Extern Ärendehanterare
settings.tracker_issue_style=Externt ärendenummersformat
settings.tracker_issue_style.numeric=Numerisk
settings.tracker_issue_style.alphanumeric=Alfanumerisk
settings.enable_timetracker=Aktivera tidsredovisning
settings.admin_settings=Administratörsinställningar
settings.admin_enable_health_check=Aktivera hälsokontroll för utvecklingskataloger (git fsck)
settings.danger_zone=Högrisksområde
settings.new_owner_has_same_repo=Den nya ägaren har redan ett repo med det namnet. Vänligen välj ett annat namn.
settings.convert=Konvertera till vanlig utvecklingskatalog
settings.convert_desc=Du kan konvertera denna spegling till en vanlig utvecklingskatalog. Detta kan ej ångras.
settings.convert_confirm=Konvertera utvecklingskatalog
settings.convert_succeed=Speglingen har blivit konverterad till en vanlig utvecklingskatalog.
settings.transfer=Överför Ägarskap
settings.wiki_delete=Ta bort wiki-data
settings.wiki_delete_desc=Borttagning av utvecklingskatalogens wiki-data är permanent och kan ej ångras.
settings.wiki_delete_notices_1=- Detta kommer permanent ta bort och inaktivera utvecklingskatalogens wiki för %s.
settings.confirm_wiki_delete=Ta bort wiki-data
settings.wiki_deletion_success=Utvecklingskatalogens wiki-data har blivit borttaget.
settings.delete=Ta Bort Detta Repo
settings.delete_desc=Borttagning av en utvecklingskatalog är permanent och kan ej ångras.
settings.delete_notices_1=- Denna åtgärd kan <strong>INTE</strong> ångras.
settings.delete_notices_2=- Denna åtgärd kommer permanent ta bort utvecklingskatalogen <strong>%s</strong> inklusive kod, ärenden, kommentarer, wiki-data samt medarbetarinställningar.
settings.delete_notices_fork_1=- Forkar av denna utvecklingskatalog kommer bli självständiga efter borttagning.
settings.deletion_success=Utvecklingskatalog har tagits bort.
settings.update_settings_success=Inställningar för utvecklingskatalog har uppdaterats.
settings.transfer_owner=Ny Ägare
settings.make_transfer=Utför förflyttning
settings.transfer_succeed=Utvecklingskatalogen har flyttats över.
settings.confirm_delete=Ta bort utvecklingskatalog
settings.add_collaborator=Lägg till medarbetare
settings.add_collaborator_success=Medarbetare har lagts till.
settings.delete_collaborator=Ta bort
settings.collaborator_deletion=Ta bort medarbetare
settings.collaborator_deletion_desc=Borttagning av en medarbetare kommer att återkalla deras åtkomst till utvecklingskatalogen. Vill du fortsätta?
settings.remove_collaborator_success=Medarbetaren har blivit borttagen.
settings.search_user_placeholder=Sök användare…
settings.org_not_allowed_to_be_collaborator=Organisationer kan inte läggas till som en medarbetare.
settings.user_is_org_member=Användaren är en organisationsmedlem som inte kan läggas till som medarbetare.
settings.add_webhook=Lägg Till Webbhook
settings.webhook.test_delivery=Testa Leverans
settings.webhook.request=Begäran

View File

@ -75,6 +75,7 @@ cancel=取消
[install]
install=安装页面
title=初始配置
docker_helper=如果您正在使用 Docker 容器运行 Gitea请务必先仔细阅读 <a target="_blank" rel="noopener noreferrer" href="%s">官方文档</a> 后再对本页面进行填写。
requite_db_desc=Gitea 要求安装 MySQL、PostgreSQL、SQLite3 或 TiDB。
db_title=数据库设置
db_type=数据库类型
@ -491,8 +492,13 @@ owner=拥有者
repo_name=仓库名称
repo_name_helper=好的存储库名称使用简短、深刻和独特的关键字。
visibility=可见性
visibility_helper=将仓库设为私有
visibility_helper_forced=站点管理员强制要求新仓库为私有。
visibility_fork_helper=(修改该值将会影响到所有派生仓库)
clone_helper=不知道如何克隆?查看<a target="_blank" rel="noopener noreferrer" href="%s">帮助</a> 。
fork_repo=派生仓库
fork_from=派生自
fork_visibility_helper=无法更改派生仓库的可见性。
repo_desc=仓库描述
repo_lang=仓库语言
repo_gitignore_helper=选择 .gitignore 模板。
@ -607,6 +613,7 @@ editor.directory_is_a_file='%s' 已经作为文件名在此仓库中存在。
editor.file_is_a_symlink='%s' 是一个符号链接,无法在线编辑。
editor.filename_is_a_directory='%s' 已经作为目录名在此仓库中存在。
editor.file_editing_no_longer_exists=正在编辑的文件 '%s' 已不存在。
editor.file_changed_while_editing=文件内容在您进行编辑时已经发生变动。<a target="_blank" rel="noopener noreferrer" href="%s">单击此处</a> 查看变动的具体内容,或者 <strong>再次提交</strong> 覆盖已发生的变动。
editor.file_already_exists=此仓库已经存在名为 '%s' 的文件。
editor.no_changes_to_show=没有可以显示的变更。
editor.fail_to_update_file=更新/创建文件 '%s' 时发生错误:%v
@ -987,6 +994,7 @@ settings.search_user_placeholder=搜索用户...
settings.org_not_allowed_to_be_collaborator=组织不允许被添加为仓库协作者!
settings.user_is_org_member=被操作的用户是组织,因此无法添加为协作者!
settings.add_webhook=添加 Web 钩子
settings.hooks_desc=当Gitea事件发生时Web钩子自动发出HTTP POST请求。在 <a target="_blank" rel="noopener noreferrer" href="%s"> 指南</a> 中阅读更多内容。
settings.webhook_deletion=删除 Web 钩子
settings.webhook_deletion_desc=删除 web钩子 将删除其设置和历史记录。继续?
settings.webhook_deletion_success=Web 钩子删除成功!
@ -1003,6 +1011,7 @@ settings.githook_edit_desc=如果钩子未启动,则会显示样例文件中
settings.githook_name=钩子名称
settings.githook_content=钩子文本
settings.update_githook=更新钩子设置
settings.add_webhook_desc=Gitea 将向目标 URL 发送具有指定内容类型的 <code>POST</code> 请求。在 <a target="_blank" rel="noopener noreferrer" href="%s">webhooks 指南</a> 中阅读更多内容。
settings.payload_url=目标 URL
settings.content_type=POST Content Type
settings.secret=密钥文本
@ -1264,6 +1273,8 @@ dashboard.operation_switch=开关
dashboard.operation_run=执行
dashboard.clean_unbind_oauth=清理未绑定的 OAuth 连接
dashboard.clean_unbind_oauth_success=所有未绑定的 OAuth 连接已被删除。
dashboard.delete_inactivate_accounts=删除所有未激活的帐户
dashboard.delete_inactivate_accounts_success=所有未激活的帐户都已删除。
dashboard.delete_repo_archives=删除所有仓库存档
dashboard.delete_repo_archives_success=所有仓库存档清除成功!
dashboard.delete_missing_repos=删除所有丢失 Git 文件的仓库

148
package-lock.json generated
View File

@ -43,7 +43,7 @@
"dev": true,
"optional": true,
"requires": {
"tweetnacl": "0.14.5"
"tweetnacl": "^0.14.3"
}
},
"caseless": {
@ -59,8 +59,8 @@
"integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
"dev": true,
"requires": {
"commander": "2.8.1",
"source-map": "0.4.4"
"commander": "2.8.x",
"source-map": "0.4.x"
},
"dependencies": {
"source-map": {
@ -69,7 +69,7 @@
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": "1.0.1"
"amdefine": ">=0.0.4"
}
}
}
@ -87,7 +87,7 @@
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
"delayed-stream": "1.0.0"
"delayed-stream": "~1.0.0"
}
},
"commander": {
@ -96,7 +96,7 @@
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
"dev": true,
"requires": {
"graceful-readlink": "1.0.1"
"graceful-readlink": ">= 1.0.0"
}
},
"core-util-is": {
@ -113,7 +113,7 @@
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0"
"assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@ -138,7 +138,7 @@
"dev": true,
"optional": true,
"requires": {
"jsbn": "0.1.1"
"jsbn": "~0.1.0"
}
},
"errno": {
@ -148,7 +148,7 @@
"dev": true,
"optional": true,
"requires": {
"prr": "1.0.1"
"prr": "~1.0.1"
}
},
"extend": {
@ -192,7 +192,7 @@
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0"
"assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@ -294,14 +294,14 @@
"integrity": "sha512-q3SyEnPKbk9zh4l36PGeW2fgynKu+FpbhiUNx/yaiBUQ3V0CbACCgb9FzYWcRgI2DJlP6eI4jc8XPrCTi55YcQ==",
"dev": true,
"requires": {
"errno": "0.1.7",
"graceful-fs": "4.1.11",
"image-size": "0.5.5",
"mime": "1.6.0",
"mkdirp": "0.5.1",
"promise": "7.3.1",
"request": "2.85.0",
"source-map": "0.6.1"
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"mime": "^1.4.1",
"mkdirp": "^0.5.0",
"promise": "^7.1.1",
"request": "^2.83.0",
"source-map": "~0.6.0"
},
"dependencies": {
"ajv": {
@ -311,10 +311,10 @@
"dev": true,
"optional": true,
"requires": {
"co": "4.6.0",
"fast-deep-equal": "1.1.0",
"fast-json-stable-stringify": "2.0.0",
"json-schema-traverse": "0.3.1"
"co": "^4.6.0",
"fast-deep-equal": "^1.0.0",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.3.0"
}
},
"assert-plus": {
@ -338,7 +338,7 @@
"dev": true,
"optional": true,
"requires": {
"hoek": "4.2.1"
"hoek": "4.x.x"
}
},
"cryptiles": {
@ -348,7 +348,7 @@
"dev": true,
"optional": true,
"requires": {
"boom": "5.2.0"
"boom": "5.x.x"
},
"dependencies": {
"boom": {
@ -358,7 +358,7 @@
"dev": true,
"optional": true,
"requires": {
"hoek": "4.2.1"
"hoek": "4.x.x"
}
}
}
@ -370,9 +370,9 @@
"dev": true,
"optional": true,
"requires": {
"asynckit": "0.4.0",
"asynckit": "^0.4.0",
"combined-stream": "1.0.6",
"mime-types": "2.1.18"
"mime-types": "^2.1.12"
}
},
"har-schema": {
@ -389,8 +389,8 @@
"dev": true,
"optional": true,
"requires": {
"ajv": "5.5.2",
"har-schema": "2.0.0"
"ajv": "^5.1.0",
"har-schema": "^2.0.0"
}
},
"hawk": {
@ -400,10 +400,10 @@
"dev": true,
"optional": true,
"requires": {
"boom": "4.3.1",
"cryptiles": "3.1.2",
"hoek": "4.2.1",
"sntp": "2.1.0"
"boom": "4.x.x",
"cryptiles": "3.x.x",
"hoek": "4.x.x",
"sntp": "2.x.x"
}
},
"hoek": {
@ -419,9 +419,9 @@
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0",
"jsprim": "1.4.1",
"sshpk": "1.14.1"
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"performance-now": {
@ -445,28 +445,28 @@
"dev": true,
"optional": true,
"requires": {
"aws-sign2": "0.7.0",
"aws4": "1.7.0",
"caseless": "0.12.0",
"combined-stream": "1.0.6",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.3.2",
"har-validator": "5.0.3",
"hawk": "6.0.2",
"http-signature": "1.2.0",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.18",
"oauth-sign": "0.8.2",
"performance-now": "2.1.0",
"qs": "6.5.2",
"safe-buffer": "5.1.2",
"stringstream": "0.0.5",
"tough-cookie": "2.3.4",
"tunnel-agent": "0.6.0",
"uuid": "3.2.1"
"aws-sign2": "~0.7.0",
"aws4": "^1.6.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.5",
"extend": "~3.0.1",
"forever-agent": "~0.6.1",
"form-data": "~2.3.1",
"har-validator": "~5.0.3",
"hawk": "~6.0.2",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.17",
"oauth-sign": "~0.8.2",
"performance-now": "^2.1.0",
"qs": "~6.5.1",
"safe-buffer": "^5.1.1",
"stringstream": "~0.0.5",
"tough-cookie": "~2.3.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.1.0"
}
},
"sntp": {
@ -476,7 +476,7 @@
"dev": true,
"optional": true,
"requires": {
"hoek": "4.2.1"
"hoek": "4.x.x"
}
},
"source-map": {
@ -494,7 +494,7 @@
"integrity": "sha1-zFeveqM5iVflbezr5jy2DCNClwM=",
"dev": true,
"requires": {
"clean-css": "3.4.28"
"clean-css": "^3.0.1"
}
},
"mime": {
@ -516,7 +516,7 @@
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
"mime-db": "1.33.0"
"mime-db": "~1.33.0"
}
},
"minimist": {
@ -550,7 +550,7 @@
"dev": true,
"optional": true,
"requires": {
"asap": "2.0.6"
"asap": "~2.0.3"
}
},
"prr": {
@ -580,14 +580,14 @@
"dev": true,
"optional": true,
"requires": {
"asn1": "0.2.3",
"assert-plus": "1.0.0",
"bcrypt-pbkdf": "1.0.1",
"dashdash": "1.14.1",
"ecc-jsbn": "0.1.1",
"getpass": "0.1.7",
"jsbn": "0.1.1",
"tweetnacl": "0.14.5"
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"tweetnacl": "~0.14.0"
},
"dependencies": {
"assert-plus": {
@ -613,7 +613,7 @@
"dev": true,
"optional": true,
"requires": {
"punycode": "1.4.1"
"punycode": "^1.4.1"
}
},
"tunnel-agent": {
@ -623,7 +623,7 @@
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "5.1.2"
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
@ -647,9 +647,9 @@
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0",
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "1.3.0"
"extsprintf": "^1.2.0"
},
"dependencies": {
"assert-plus": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -80,6 +80,23 @@
}
}
}
@media only screen and (min-width: 768px) {
.g-recaptcha {
margin: 0 auto !important;
width: 304px;
padding-left: 30px;
}
}
@media screen and (max-height: 575px){
#rc-imageselect, .g-recaptcha {
transform:scale(0.77);
-webkit-transform:scale(0.77);
transform-origin:0 0;
-webkit-transform-origin:0 0;
}
}
.user.activate,
.user.forgot.password,
.user.reset.password,

View File

@ -0,0 +1,3 @@
// TODO: Instead of having each theme file define each
// CSS/LESS item in this file and then overide
// in the theme files

View File

@ -0,0 +1,751 @@
@import "_base";
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background-color: #2b2b2b !important;
color: #bababa;
}
.repository.file.list .non-diff-file-content .code-view .lines-num, .repository.file.list .non-diff-file-content .code-view .lines-code ol {
background-color: #2b2b2b !important;
}
.hljs-strong, .hljs-emphasis {
color: #a8a8a2;
}
.hljs-bullet, .hljs-quote, .hljs-link, .hljs-number, .hljs-regexp, .hljs-literal {
color: #6896ba;
}
.hljs-code, .hljs-selector-class {
color: #a6e22e;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-keyword, .hljs-selector-tag, .hljs-section, .hljs-attribute, .hljs-name, .hljs-variable {
color: #cb7832;
}
.hljs-params {
color: #b9b9b9;
}
.hljs-string {
color: #6a8759;
}
.hljs-subst, .hljs-type, .hljs-built_in, .hljs-builtin-name, .hljs-symbol, .hljs-selector-id, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-template-tag, .hljs-template-variable, .hljs-addition {
color: #e0c46c;
}
.hljs-comment, .hljs-deletion, .hljs-meta {
color: #7f7f7f;
}
.repository .ui.segment.sub-menu .list .item a {
color:#dbdbdb;
}
.ui.horizontal.segments > .segment {
background-color: #383c4a;
}
body {
background: #383c4a;
color: #9e9e9e;
}
a {
color: #87ab63;
}
a:hover {
color: #a0cc75;
}
.ui.card>.extra a:not(.ui):hover, .ui.cards>.card>.extra a:not(.ui):hover {
color: #a0cc75;
}
.ui.breadcrumb a:hover {
color: #a0cc75;
}
.ui.breadcrumb a {
color: #87ab63;
}
.repository .metas .ui.list a .text {
color: #87ab63;
}
.repository .metas .ui.list a .text:hover {
color: #a0cc75;
}
.repository .label.list .item a {
color: #87ab63;
}
.repository .label.list .item a:hover {
color: #a0cc75;
}
.repository .milestone.list > .item > a {
color: #87ab63;
}
.repository .milestone.list > .item > a:hover {
color: #a0cc75;
}
.repository.release #release-list {
border-top: 1px solid #4c505c;
}
.repository .milestone.list > .item .operate > a {
color: #87ab63;
}
.repository .milestone.list > .item .operate > a:hover {
color: #a0cc75;
}
.ui.green.progress .bar {
background-color: #668844;
}
.ui.progress.success .bar {
background-color: #7b9e57!important;
}
.following.bar.light {
background: #2e323e;
}
.ui.secondary.menu .active.item {
color: #dbdbdb;
}
.ui.secondary.menu .item {
color: #9e9e9e;
}
.following.bar .top.menu a.item:hover {
color: #fff;
}
.repository.view.issue .comment-list .comment .content > .bottom.segment a {
border: solid 1px #353945;
background-color: #353945;
}
.following.bar.light {
border-bottom: 1px solid #313131;
}
.ui.attached.header {
background: #404552;
border: 1px solid #404552;
color: #dbdbdb;
}
.ui.attached.table {
border: 1px solid #304251;
background: #304251;
}
.feeds .list ul li:not(:last-child) {
border-bottom: 1px solid #333640;
}
.feeds .list ul li.private {
background: #353945;
border: 1px solid #333640;
}
.ui.secondary.menu .dropdown.item:hover, .ui.secondary.menu .link.item:hover, .ui.secondary.menu a.item:hover {
color: #fff;
}
.ui.menu .ui.dropdown .menu>.item {
background: #2c303a !important;
color: #9e9e9e !important;
}
.ui.secondary.menu .dropdown.item>.menu, .ui.text.menu .dropdown.item>.menu {
border: 1px solid #434444;
}
footer {
background: #2e323e;
border-top: 1px solid #313131;
}
.ui.menu .dropdown.item .menu {
background: #2c303a;
}
.ui.menu .ui.dropdown .menu>.item:hover, .ui.menu .ui.dropdown .menu>.selected.item {
color: #fff!important;
}
.ui.dropdown .menu>.header {
color: #dbdbdb;
}
.ui.red.label, .ui.red.labels .label {
background-color: #7d3434!important;
border-color: #8a2121!important;
}
.ui.menu {
background: #404552;
border: 1px solid #353945;
}
.ui.menu .active.item:hover, .ui.vertical.menu .active.item:hover {
color: #dbdbdb;
background: #4B5162;
}
.ui.link.menu .item:hover, .ui.menu .dropdown.item:hover, .ui.menu .link.item:hover, .ui.menu a.item:hover {
color: #dbdbdb;
background: #454b5a;
}
.ui.menu .active.item {
background: #4B5162;
color: #dbdbdb;
}
.ui.input input {
background: #404552;
border: 2px solid #353945;
color: #dbdbdb;
}
.ui.input input:focus, .ui.input.focus input {
background: #404552;
border: 2px solid #353945;
color: #dbdbdb;
}
.ui.label {
color: #dbdbdb;
background-color: #404552;
}
.issue.list > .item .title {
color: #87ab63;
}
.issue.list > .item .title:hover {
color: #a0cc75;
}
.issue.list > .item {
border-bottom: 1px dashed #475767;
}
.ui.green.label, .ui.green.labels .label {
background-color: #2d693b!important;
border-color: #2d693b!important;
}
.issue.list > .item .comment {
color: #129c92;
}
.ui.basic.button, .ui.basic.buttons .button {
color: #797979!important;
}
.ui.basic.red.active.button, .ui.basic.red.buttons .active.button {
box-shadow: 0 0 0 1px #c75252 inset!important;
color: #c75252!important;
}
.ui.basic.button:focus, .ui.basic.button:hover, .ui.basic.buttons .button:focus, .ui.basic.buttons .button:hover {
background: transparent!important;
color: #dbdbdb!important;
}
.ui.menu .item {
background: #404552;
color: #9e9e9e;
}
.ui.menu .item.disabled, .ui.menu .item.disabled:hover {
color: #626773;
}
.ui.pagination.menu .active.item {
color: #dbdbdb;
background-color: #609926;
}
.repository .header-wrapper {
background-color: #2a2e3a;
}
.ui.tabular.menu .active.item {
background: #383c4a;
color: #dbdbdb;
border-left: 1px solid transparent;
border-right: 1px solid transparent;
border-top: none;
}
.ui.tabular.menu .item {
color: #9e9e9e;
}
.ui.tabular.menu .item:hover {
color: #dbdbdb;
}
.ui.header, .ui.breadcrumb .divider {
color: #9e9e9e;
}
.ui.blue.label, .ui.blue.labels .label {
background-color: #26577b!important;
border-color: #26577b!important;
}
.ui.menu .item>.label {
background: #565454;
}
.ui.blue.button, .ui.blue.buttons .button {
background-color: #609926;
}
.ui.blue.button:hover, .ui.blue.buttons .button:hover {
background-color: #73ad36;
}
.ui.form input:not([type]), .ui.form input[type=text], .ui.form input[type=email], .ui.form input[type=search], .ui.form input[type=password], .ui.form input[type=date], .ui.form input[type=datetime-local], .ui.form input[type=tel], .ui.form input[type=time], .ui.form input[type=url], .ui.form input[type=number] {
background: #404552;
border: 2px solid #353945;
}
.ui.form input:not([type]):focus, .ui.form input[type=text]:focus, .ui.form input[type=email]:focus, .ui.form input[type=search]:focus, .ui.form input[type=password]:focus, .ui.form input[type=date]:focus, .ui.form input[type=datetime-local]:focus, .ui.form input[type=tel]:focus, .ui.form input[type=time]:focus, .ui.form input[type=url]:focus, .ui.form input[type=number]:focus {
background: #404552;
border: 2px solid #4b505f;
color: #dbdbdb;
}
.ui.action.input:not([class*="left action"]) input:focus {
border-right-color: #4b505f!important;
}
.ui.green.button, .ui.green.buttons .button {
background-color: #609926;
}
.ui.green.button:hover, .ui.green.buttons .button:hover {
background-color: #73ad36;
}
.ui.button {
background: #383c4a;
border: 1px solid #4c505c;
color: #dbdbdb;
}
.ui.labeled.button:not([class*="left labeled"])>.label, .ui[class*="left labeled"].button>.button {
background: #404552;
border: 1px solid #4c505c;
color: #87ab63;
}
.ui.button:hover {
background-color: #404552;
color: #dbdbdb;
}
.ui.table thead th {
background: #404552;
color: #dbdbdb;
}
.repository.file.list #repo-files-table tr:hover {
background-color: #393d4a;
}
.ui.table {
color: #a5a5a5!important;
border: 1px solid #4c505c;
background: #353945;
}
.ui.table tbody tr {
border-bottom: 1px solid #333640;
background: #2a2e3a;
}
.ui .text.grey {
color: #808084 !important;
}
.ui.attached.table.segment {
background: #353945;
color: #dbdbdb!important;
}
.markdown:not(code) h2 {
border-bottom: 1px solid #304251;
}
.hljs, .hljs-keyword, .hljs-selector-tag, .hljs-subst {
color: #9daccc;
}
.markdown:not(code) .highlight pre, .markdown:not(code) pre {
background-color: #2a2e3a;
border: 1px solid #404552;
}
.ui.dropdown .menu {
background: #2c303a;
}
.ui.dropdown .menu>.message:not(.ui) {
color: rgb(99, 99, 99);
}
.ui.input {
color: #dbdbdb;
}
.overflow.menu .items .item {
color: #9d9d9d;
}
.overflow.menu .items .item:hover {
color: #dbdbdb;
}
.ui.segment {
background: #353945;
color: #9e9e9e!important;
border: 1px solid #404552;
}
.ui.active.button:active, .ui.button:active, .ui.button:focus {
background-color: #2e3e4e;
color: #dbdbdb;
}
.ui.dropdown .menu .selected.item, .ui.dropdown.selected {
color: #dbdbdb;
}
.ui.dropdown .menu>.item:hover {
color: #dbdbdb;
}
.ui.dropdown .menu>.item {
color: #9e9e9e;
}
.ui.attached.segment {
border: 1px solid #404552;
}
.repository.view.issue .comment-list .comment .content > .bottom.segment {
background: #353945;
}
.repository.view.issue .comment-list .comment .content .header {
color: #dbdbdb;
background-color: #404552;
border-bottom: 1px solid #353944;
}
.ui .text.grey a {
color: #b3b3b3 !important;
}
.ui.comments .comment .actions a {
color: #dbdbdb;
}
.repository.view.issue .comment-list .comment .content .header:after {
border-right-color: #404552;
}
.repository.new.issue .comment.form .content:after {
border-right-color: #353945;
}
.repository.view.issue .comment-list .comment .content .header:before {
border-right-color: #404552;
}
.repository.new.issue .comment.form .content:before {
border-right-color: #353945;
}
.repository.view.issue .comment-list:before {
background-color: #313c47;
}
.repository .comment.form .content .form:after {
border-right-color: #313c47;
}
.repository .comment.form .content .form:before {
border-right-color: #313c47;
}
.ui .text.grey a {
color: #dbdbdb !important;
}
.ui .text.grey a:hover {
color: #dbdbdb !important;
}
.ui.basic.green.active.button, .ui.basic.green.buttons .active.button {
color: #13ae38!important;
}
.ui.form textarea, .ui.form textarea:focus {
background: #1a2632;
border: 1px solid #313c47;
color: #dbdbdb;
}
.ui.form textarea:focus {
border: 1px solid #456580;
}
.ui .info.segment.top {
background-color: #404552 !important;
}
.repository .diff-file-box .code-diff-unified tbody tr.del-code td {
background-color: #3c2626 !important;
border-color: #634343 !important;
}
.repository .diff-file-box .code-diff-unified tbody tr.add-code td {
background-color: rgb(40, 62, 45) !important;
border-color: #314a37 !important;
}
.repository .diff-file-box .code-diff tbody tr .added-code {
background-color: #3a523a;
}
.repository .diff-file-box .code-diff .lines-num {
border-right: 1px solid #2d2d2d;
}
.repository .diff-file-box .file-body.file-code .lines-num {
color: #9e9e9e;
background: #2e323e;
}
.repository .diff-file-box .code-diff tbody tr.tag-code td, .repository .diff-file-box .code-diff tbody tr td.tag-code {
border-color: #2d2d2d !important;
}
.repository .diff-file-box .file-body.file-code .lines-num-old {
border-right: 1px solid #2d2d2d;
}
.hljs-title, .hljs-section, .hljs-selector-id {
color: #986c88;
}
.hljs-string, .hljs-doctag {
color: #949494;
}
.repository .diff-file-box .code-diff tbody tr .removed-code {
background-color: #5f3737;
}
.repository .diff-file-box .code-diff tbody tr.tag-code td, .repository .diff-file-box .code-diff tbody tr td.tag-code {
background-color: #292727 !important;
}
.ui.vertical.menu .active.item {
background: #4B5162;
}
.ui.vertical.menu .item {
background: #353945;
}
.ui.vertical.menu .header.item {
background: #404552;
}
.ui.vertical.menu {
background: #353945;
border: 1px solid #333640;
}
.ui.repository.list .item:not(:first-child) {
border-top: 1px solid #4c505c;
}
.ui .text.blue {
color: #609926 !important;
}
.ui.selection.active.dropdown, .ui.selection.active.dropdown .menu {
border-color: #4e5361;
box-shadow: 0 2px 3px 0 rgba(34,36,38,.15);
}
.ui.selection.active.dropdown:hover, .ui.selection.active.dropdown:hover .menu {
border-color: #4e5361;
box-shadow: 0 2px 3px 0 rgba(34,36,38,.15);
}
.ui.selection.dropdown {
background: #404552;
border: 1px solid rgb(64, 69, 82);
color: #9e9e9e;
}
.ui.menu .ui.dropdown .menu>.active.item {
color: #dbdbdb !important;
}
.ui.tabular.menu {
border-bottom: 1px solid #313c47;
}
.ui.card, .ui.cards>.card {
background: #353945;
box-shadow: 0 1px 3px 0 #4c505c, 0 0 0 1px #4c505c;
}
.ui.card>.content>.header, .ui.cards>.card>.content>.header {
color: #dbdbdb;
}
.ui.card>.extra a:not(.ui), .ui.cards>.card>.extra a:not(.ui) {
color: #87ab63;
}
.ui .text.black {
color: #9e9e9e;
}
.ui .text.black:hover {
color: #dbdbdb;
}
.ui.secondary.segment {
background: #353945;
}
.ui.secondary.pointing.menu .active.item {
border-color: #609926;
color: #dbdbdb;
background: #404552;
}
.ui.user.list .item:not(:first-child) {
border-top: 1px solid #4c505c;
}
.ui.secondary.pointing.menu .active.item:hover {
border-color: #af8b4c;
color: #dbdbdb;
background: #4b5162;
}
.ui.secondary.pointing.menu .dropdown.item:hover, .ui.secondary.pointing.menu .link.item:hover, .ui.secondary.pointing.menu a.item:hover {
color: #dbdbdb;
}
.ui.checkbox label, .ui.checkbox+label, .ui.form .field>label {
color: #9e9e9e;
}
.ui.form .inline.field>label, .ui.form .inline.field>p, .ui.form .inline.fields .field>label, .ui.form .inline.fields .field>p, .ui.form .inline.fields>label {
color: #9e9e9e;
}
.user.settings .email.list .item:not(:first-child) {
border-top: 1px solid #3f4451;
}
.explore .navbar {
background-color: #2a2e3a!important;
}
.ui.menu.new-menu {
background-color: #2a2e3a!important;
}
input {
background: #2e323e;
}
.ui.secondary.pointing.menu .active.item {
border: none;
background: #383c4a;
}
.settings .key.list .item:not(:first-child) {
border-top: 1px solid #404552;
}
.ui.form input:not([type]), .ui.form input[type=text], .ui.form input[type=email], .ui.form input[type=search], .ui.form input[type=password], .ui.form input[type=date], .ui.form input[type=datetime-local], .ui.form input[type=tel], .ui.form input[type=time], .ui.form input[type=url], .ui.form input[type=number] {
color: #9e9e9e;
}
.ui.attached.info.message, .ui.info.message {
box-shadow: 0 0 0 1px #4b5e71 inset, 0 0 0 0 transparent;
}
.ui.info.message {
background-color: #2c3b4a;
color: #9ebcc5;
}
.ui .warning.header {
background-color: #5d3a22 !important;
border-color: #794f31;
}
.ui.red.message {
background-color: rgba(80, 23, 17, 0.6);
color: #f9cbcb;
box-shadow: 0 0 0 1px rgba(121, 71, 66, 0.5) inset, 0 0 0 0 transparent;
}
.ui.red.button, .ui.red.buttons .button {
background-color: #7d3434;
}
.ui.red.button:hover, .ui.red.buttons .button:hover {
background-color: #984646;
}
.ui.checkbox label:hover, .ui.checkbox+label:hover {
color: #dbdbdb !important;
}
.ui.checkbox input:checked~.box:after, .ui.checkbox input:checked~label:after {
color: rgb(127, 152, 173);
}
.ui.checkbox input:checked~.box:before, .ui.checkbox input:checked~label:before {
background: #304251;
}
.ui.checkbox .box:hover::before, .ui.checkbox label:hover::before {
background: #304251;
}
.ui.checkbox .box:before, .ui.checkbox label:before {
background: #304251;
border: 1px solid #304251;
}
.ui.checkbox .box:active::before, .ui.checkbox label:active::before {
background: #304251;
border-color: rgba(34,36,38,.35);
}
.ui.checkbox input:checked~.box:before, .ui.checkbox input:checked~label:before {
border-color: #304251;
background: #304251;
}
.ui.checkbox input:focus~.box:before, .ui.checkbox input:focus~label:before {
border-color: #304251;
background: #304251;
}
.ui.checkbox input:checked:focus~.box:before, .ui.checkbox input:checked:focus~label:before, .ui.checkbox input:not([type=radio]):indeterminate:focus~.box:before, .ui.checkbox input:not([type=radio]):indeterminate:focus~label:before {
border-color: #304251;
background: #304251;
}
.ui.checkbox input:checked~.box:after, .ui.checkbox input:checked~label:after {
opacity: 1;
color: rgb(127, 152, 173);
}
.ui.checkbox input:checked:focus~.box:after, .ui.checkbox input:checked:focus~label:after, .ui.checkbox input:not([type=radio]):indeterminate:focus~.box:after, .ui.checkbox input:not([type=radio]):indeterminate:focus~label:after {
color: rgb(127, 152, 173);
}
.ui.checkbox input:focus~.box:after, .ui.checkbox input:focus~label, .ui.checkbox input:focus~label:after {
color: #9a9a9a;
}
.ui.selection.dropdown:hover {
border-color: rgba(34,36,38,.35);
border: 1px solid #456580;
}
.ui.selection.dropdown .menu>.item {
border-top: 1px solid #313c47;
}
.ui.selection.visible.dropdown>.text:not(.default) {
color: #9e9e9e;
}
.ui.negative.message {
background-color: rgba(80, 23, 17, 0.6);
color: #f9cbcb;
box-shadow: 0 0 0 1px rgba(121, 71, 66, 0.5) inset, 0 0 0 0 transparent;
}
.hljs-tag, .hljs-name, .hljs-attribute {
color: #ef5e77;
}
.user.profile .ui.card .extra.content ul li:not(:last-child) {
border-bottom: 1px solid #4c505c;
}
.ui.form textarea, .ui.form textarea:focus {
background: #404552;
border: 2px solid #353945;
}
.hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {
color: #bd84bf;
}
.hljs-string, .hljs-doctag {
color: #8ab398;
}
.ui.form .dropzone {
border: 2px dashed #4c505c;
}
.ui.basic.red.button, .ui.basic.red.buttons .button {
box-shadow: 0 0 0 1px #a04141 inset!important;
color: #a04141!important;
}
.ui.list .list>.item .header, .ui.list>.item .header {
color: #dedede;
}
.ui.list .list>.item .description, .ui.list>.item .description {
color: #9e9e9e;
}
.ui.user.list .item .description a {
color: #668cb1;
}
.repository.file.list #file-content .code-view .lines-num {
background: #2e323e;
}
.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory, .repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule {
color: #7c9b5e;
}
.ui.blue.button:focus, .ui.blue.buttons .button:focus {
background-color: #609926;
}
.ui.basic.blue.button:hover, .ui.basic.blue.buttons .button:hover {
box-shadow: 0 0 0 1px #609926 inset!important;
color: #609926!important;
}
.ui.basic.blue.button:focus, .ui.basic.blue.buttons .button:focus {
box-shadow: 0 0 0 1px #609926 inset!important;
color: #609926!important;
}
.repository.file.list #file-content .code-view .lines-num pre, .repository.file.list #file-content .code-view .lines-code pre, .repository.file.list #file-content .code-view .lines-num ol, .repository.file.list #file-content .code-view .lines-code ol, .repository.file.list #file-content .code-view .lines-num .hljs, .repository.file.list #file-content .code-view .lines-code .hljs {
background-color: #2a2e3a;
}
a.ui.label:hover, a.ui.labels .label:hover {
background-color: #505667;
color: rgb(219, 219, 219);
}
.repository .label.list .item {
border-bottom: 1px dashed #4c505c;
}
.repository.file.list #file-content .code-view .lines-num {
background: #2e323e;
}
.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory, .repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule {
color: #7c9b5e;
}
.ui.basic.blue.button, .ui.basic.blue.buttons .button {
box-shadow: 0 0 0 1px #a27558 inset !important;
color: #a27558 !important;
}
.repository.file.list #file-content .code-view .lines-num pre, .repository.file.list #file-content .code-view .lines-code pre, .repository.file.list #file-content .code-view .lines-num ol, .repository.file.list #file-content .code-view .lines-code ol, .repository.file.list #file-content .code-view .lines-num .hljs, .repository.file.list #file-content .code-view .lines-code .hljs {
background-color: #2a2e3a;
}
a.ui.label:hover, a.ui.labels .label:hover {
background-color: #505667;
color: rgb(219, 219, 219);
}
.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1), .repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2), .repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3), .repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4) {
background-color: #2a2e3a;
}
.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3), .repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4), .repository .diff-file-box .code-diff-split tbody tr td.add-code {
background-color: #283e2d !important;
border-color: #314a37 !important;
}
.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1), .repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2), .repository .diff-file-box .code-diff-split tbody tr td.del-code {
background-color: #3c2626 !important;
border-color: #634343 !important;
}
.ui.blue.button:focus, .ui.blue.buttons .button:focus {
background-color: #a27558;
}
.ui.blue.button:active, .ui.blue.buttons .button:active {
background-color: #a27558;
}
#git-graph-container li a {
color: #c79575;
}
#git-graph-container li .author {
color: #c79575;
}
.ui.header .sub.header {
color: #9e9e9e;
}
.ui.dividing.header {
border-bottom: 1px solid #4c505c;
}
.ui.modal>.header {
background: #404552;
color: #dbdbdb;
}
.ui.modal>.actions {
background: #404552;
border-top: 1px solid #404552;
}
.ui.modal>.content {
background: #383c4a;
}
.ui.basic.blue.button, .ui.basic.blue.buttons .button {
box-shadow: 0 0 0 1px #609926 inset!important;
color: #609926!important;
}

View File

@ -5441,6 +5441,39 @@
}
}
},
"/users/{username}/tokens/{token}": {
"delete": {
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "delete an access token",
"operationId": "userDeleteAccessToken",
"parameters": [
{
"type": "string",
"description": "username of user",
"name": "username",
"in": "path",
"required": true
},
{
"type": "integer",
"description": "token to be deleted",
"name": "token",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"$ref": "#/responses/empty"
}
}
}
},
"/version": {
"get": {
"produces": [
@ -7479,6 +7512,10 @@
"AccessToken": {
"description": "AccessToken represents a API access token.",
"headers": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
},

View File

@ -302,6 +302,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Group("/tokens", func() {
m.Combo("").Get(user.ListAccessTokens).
Post(bind(api.CreateAccessTokenOption{}), user.CreateAccessToken)
m.Combo("/:id").Delete(user.DeleteAccessToken)
}, reqBasicAuth())
})
})

View File

@ -133,7 +133,7 @@ func IsMember(ctx *context.APIContext) {
ctx.Error(500, "IsOrgMember", err)
return
} else if userIsMember {
userToCheckIsMember, err := ctx.Org.Organization.IsOrgMember(ctx.User.ID)
userToCheckIsMember, err := ctx.Org.Organization.IsOrgMember(userToCheck.ID)
if err != nil {
ctx.Error(500, "IsOrgMember", err)
} else if userToCheckIsMember {

View File

@ -1,4 +1,5 @@
// Copyright 2014 The Gogs Authors. All rights reserved.
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
@ -36,6 +37,7 @@ func ListAccessTokens(ctx *context.APIContext) {
apiTokens := make([]*api.AccessToken, len(tokens))
for i := range tokens {
apiTokens[i] = &api.AccessToken{
ID: tokens[i].ID,
Name: tokens[i].Name,
Sha1: tokens[i].Sha1,
}
@ -72,5 +74,40 @@ func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption
ctx.JSON(201, &api.AccessToken{
Name: t.Name,
Sha1: t.Sha1,
ID: t.ID,
})
}
// DeleteAccessToken delete access tokens
func DeleteAccessToken(ctx *context.APIContext) {
// swagger:operation DELETE /users/{username}/tokens/{token} user userDeleteAccessToken
// ---
// summary: delete an access token
// produces:
// - application/json
// parameters:
// - name: username
// in: path
// description: username of user
// type: string
// required: true
// - name: token
// in: path
// description: token to be deleted
// type: integer
// required: true
// responses:
// "204":
// "$ref": "#/responses/empty"
tokenID := ctx.ParamsInt64(":id")
if err := models.DeleteAccessTokenByID(tokenID, ctx.User.ID); err != nil {
if models.IsErrAccessTokenNotExist(err) {
ctx.Status(404)
} else {
ctx.Error(500, "DeleteAccessTokenByID", err)
}
return
}
ctx.Status(204)
}

View File

@ -18,6 +18,7 @@ import (
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/recaptcha"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@ -646,6 +647,8 @@ func LinkAccount(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("link_account")
ctx.Data["LinkAccountMode"] = true
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
ctx.Data["ShowRegistrationButton"] = false
@ -671,6 +674,8 @@ func LinkAccountPostSignIn(ctx *context.Context, signInForm auth.SignInForm) {
ctx.Data["LinkAccountMode"] = true
ctx.Data["LinkAccountModeSignIn"] = true
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
ctx.Data["ShowRegistrationButton"] = false
@ -737,6 +742,8 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
ctx.Data["LinkAccountMode"] = true
ctx.Data["LinkAccountModeRegister"] = true
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
ctx.Data["ShowRegistrationButton"] = false
@ -760,12 +767,21 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
return
}
if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) {
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplLinkAccount, &form)
return
}
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha {
valid, _ := recaptcha.Verify(form.GRecaptchaResponse)
if !valid {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplLinkAccount, &form)
return
}
}
if (len(strings.TrimSpace(form.Password)) > 0 || len(strings.TrimSpace(form.Retype)) > 0) && form.Password != form.Retype {
ctx.Data["Err_Password"] = true
ctx.RenderWithErr(ctx.Tr("form.password_not_match"), tplLinkAccount, &form)
@ -863,6 +879,9 @@ func SignUp(ctx *context.Context) {
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
ctx.HTML(200, tplSignUp)
@ -876,6 +895,9 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
//Permission denied if DisableRegistration or AllowOnlyExternalRegistration options are true
if !setting.Service.ShowRegistrationButton {
ctx.Error(403)
@ -887,12 +909,21 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
return
}
if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) {
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUp, &form)
return
}
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha {
valid, _ := recaptcha.Verify(form.GRecaptchaResponse)
if !valid {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUp, &form)
return
}
}
if form.Password != form.Retype {
ctx.Data["Err_Password"] = true
ctx.RenderWithErr(ctx.Tr("form.password_not_match"), tplSignUp, &form)

View File

@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/generate"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/recaptcha"
"code.gitea.io/gitea/modules/setting"
"github.com/go-macaron/captcha"
@ -308,6 +309,8 @@ func RegisterOpenID(ctx *context.Context) {
ctx.Data["PageIsOpenIDRegister"] = true
ctx.Data["EnableOpenIDSignUp"] = setting.Service.EnableOpenIDSignUp
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["OpenID"] = oid
userName, _ := ctx.Session.Get("openid_determined_username").(string)
if userName != "" {
@ -333,14 +336,26 @@ func RegisterOpenIDPost(ctx *context.Context, cpt *captcha.Captcha, form auth.Si
ctx.Data["PageIsOpenIDRegister"] = true
ctx.Data["EnableOpenIDSignUp"] = setting.Service.EnableOpenIDSignUp
ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
ctx.Data["CaptchaType"] = setting.Service.CaptchaType
ctx.Data["RecaptchaSitekey"] = setting.Service.RecaptchaSitekey
ctx.Data["OpenID"] = oid
if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) {
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ImageCaptcha && !cpt.VerifyReq(ctx.Req) {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUpOID, &form)
return
}
if setting.Service.EnableCaptcha && setting.Service.CaptchaType == setting.ReCaptcha {
ctx.Req.ParseForm()
valid, _ := recaptcha.Verify(form.GRecaptchaResponse)
if !valid {
ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), tplSignUpOID, &form)
return
}
}
len := setting.MinPasswordLength
if len < 256 {
len = 256

View File

@ -34,33 +34,35 @@
</tr>
{{end}}
</tbody>
<tfoot class="full-width">
<tr>
<th></th>
<th colspan="5">
<div class="ui right">
<a class="ui red small button" href="{{AppSubUrl}}/admin/notices/empty">{{.i18n.Tr "admin.notices.delete_all"}}</a>
</div>
<div class="ui floating upward dropdown small button">
<span class="text">{{.i18n.Tr "admin.notices.actions"}}</span>
<div class="menu">
<div class="item select action" data-action="select-all">
{{.i18n.Tr "admin.notices.select_all"}}
{{ if .Notices }}
<tfoot class="full-width">
<tr>
<th></th>
<th colspan="5">
<div class="ui right">
<a class="ui red small button" href="{{AppSubUrl}}/admin/notices/empty">{{.i18n.Tr "admin.notices.delete_all"}}</a>
</div>
<div class="item select action" data-action="deselect-all">
{{.i18n.Tr "admin.notices.deselect_all"}}
<div class="ui floating upward dropdown small button">
<span class="text">{{.i18n.Tr "admin.notices.actions"}}</span>
<div class="menu">
<div class="item select action" data-action="select-all">
{{.i18n.Tr "admin.notices.select_all"}}
</div>
<div class="item select action" data-action="deselect-all">
{{.i18n.Tr "admin.notices.deselect_all"}}
</div>
<div class="item select action" data-action="inverse">
{{.i18n.Tr "admin.notices.inverse_selection"}}
</div>
</div>
</div>
<div class="item select action" data-action="inverse">
{{.i18n.Tr "admin.notices.inverse_selection"}}
<div class="ui small teal button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="{{.Link}}?page={{.Page.Current}}">
{{.i18n.Tr "admin.notices.delete_selected"}}
</div>
</div>
</div>
<div class="ui small teal button" id="delete-selection" data-link="{{.Link}}/delete" data-redirect="{{.Link}}?page={{.Page.Current}}">
{{.i18n.Tr "admin.notices.delete_selected"}}
</div>
</th>
</tr>
</tfoot>
</th>
</tr>
</tfoot>
{{ end }}
</table>
</div>

View File

@ -67,6 +67,11 @@
{{if .RequireU2F}}
<script src="{{AppSubUrl}}/vendor/plugins/u2f/index.js"></script>
{{end}}
{{if .EnableCaptcha}}
{{if eq .CaptchaType "recaptcha"}}
<script src="https://www.google.com/recaptcha/api.js" async></script>
{{end}}
{{end}}
{{if .RequireTribute}}
<script src="{{AppSubUrl}}/vendor/plugins/tribute/tribute.min.js"></script>

View File

@ -127,6 +127,9 @@
<meta property="og:url" content="{{AppUrl}}" />
<meta property="og:description" content="{{MetaDescription}}">
{{end}}
{{if ne DefaultTheme "gitea"}}
<link rel="stylesheet" href="{{AppSubUrl}}/css/theme-{{DefaultTheme}}.css">
{{end}}
{{template "custom/header" .}}
</head>
<body>

View File

@ -29,7 +29,7 @@
<label for="retype">{{.i18n.Tr "re_type"}}</label>
<input id="retype" name="retype" type="password" value="{{.retype}}" autocomplete="off" required>
</div>
{{if .EnableCaptcha}}
{{if and .EnableCaptcha (eq .CaptchaType "image")}}
<div class="inline field">
<label></label>
{{.Captcha.CreateHtml}}
@ -39,6 +39,11 @@
<input id="captcha" name="captcha" value="{{.captcha}}" autocomplete="off">
</div>
{{end}}
{{if and .EnableCaptcha (eq .CaptchaType "recaptcha")}}
<div class="inline field required">
<div class="g-recaptcha" data-sitekey="{{ .RecaptchaSitekey }}"></div>
</div>
{{end}}
<div class="inline field">
<label></label>

View File

@ -20,7 +20,7 @@
<label for="email">{{.i18n.Tr "email"}}</label>
<input id="email" name="email" type="email" value="{{.email}}" required>
</div>
{{if .EnableCaptcha}}
{{if and .EnableCaptcha (eq .CaptchaType "image")}}
<div class="inline field">
<label></label>
{{.Captcha.CreateHtml}}
@ -30,6 +30,11 @@
<input id="captcha" name="captcha" value="{{.captcha}}" autocomplete="off">
</div>
{{end}}
{{if and .EnableCaptcha (eq .CaptchaType "recaptcha")}}
<div class="inline field required">
<div class="g-recaptcha" data-sitekey="{{ .RecaptchaSitekey }}"></div>
</div>
{{end}}
<div class="inline field">
<label for="openid">OpenID URI</label>
<input id="openid" value="{{ .OpenID }}" readonly>

View File

@ -7,7 +7,7 @@
<div class="ui thirteen wide column">
<div class="{{if eq .GetOpType 5}}push news{{end}}">
<p>
<a href="{{AppSubUrl}}/{{.GetActUserName}}">{{.ShortActUserName}}</a>
<a href="{{AppSubUrl}}/{{.GetActUserName}}" title="{{.GetActFullName}}">{{.ShortActUserName}}</a>
{{if eq .GetOpType 1}}
{{$.i18n.Tr "action.create_repo" .GetRepoLink .ShortRepoPath | Str2html}}
{{else if eq .GetOpType 2}}

View File

@ -20,6 +20,7 @@ func BasicAuthEncode(user, pass string) string {
// AccessToken represents a API access token.
// swagger:response AccessToken
type AccessToken struct {
ID int64 `json:"id"`
Name string `json:"name"`
Sha1 string `json:"sha1"`
}
@ -54,3 +55,9 @@ func (c *Client) CreateAccessToken(user, pass string, opt CreateAccessTokenOptio
"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}},
bytes.NewReader(body), t)
}
// DeleteAccessToken delete token with key id
func (c *Client) DeleteAccessToken(user string, keyID int64) error {
_, err := c.getResponse("DELETE", fmt.Sprintf("/user/%s/tokens/%d", user, keyID), nil, nil)
return err
}