mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2025-01-22 16:16:51 +00:00
Implement registration
This commit is contained in:
parent
49d072a9ed
commit
bcdb38bd68
3
Makefile
3
Makefile
@ -4,6 +4,9 @@ run: build
|
|||||||
config_run: build
|
config_run: build
|
||||||
./mycorrhiza -config-path "assets/config.ini" metarrhiza
|
./mycorrhiza -config-path "assets/config.ini" metarrhiza
|
||||||
|
|
||||||
|
devconfig_run: build
|
||||||
|
./mycorrhiza -config-path "assets/devconfig.ini" metarrhiza
|
||||||
|
|
||||||
build:
|
build:
|
||||||
go generate
|
go generate
|
||||||
go build .
|
go build .
|
||||||
|
@ -339,7 +339,6 @@ table { background-color: #eee; }
|
|||||||
|
|
||||||
/* Other stuff */
|
/* Other stuff */
|
||||||
html { background-color: #ddd;
|
html { background-color: #ddd;
|
||||||
background-image: url("data:image/svg+xml,%3Csvg width='42' height='44' viewBox='0 0 42 44' xmlns='http://www.w3.org/2000/svg'%3E%3Cg id='Page-1' fill='none' fill-rule='evenodd'%3E%3Cg id='brick-wall' fill='%23bbbbbb' fill-opacity='0.4'%3E%3Cpath d='M0 0h42v44H0V0zm1 1h40v20H1V1zM0 23h20v20H0V23zm22 0h20v20H22V23z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
|
||||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='199' viewBox='0 0 100 199'%3E%3Cg fill='%23bbbbbb' %3E%3Cpath d='M0 199V0h1v1.99L100 199h-1.12L1 4.22V199H0zM100 2h-.12l-1-2H100v2z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='199' viewBox='0 0 100 199'%3E%3Cg fill='%23bbbbbb' %3E%3Cpath d='M0 199V0h1v1.99L100 199h-1.12L1 4.22V199H0zM100 2h-.12l-1-2H100v2z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");
|
||||||
} /* heropatterns.com */
|
} /* heropatterns.com */
|
||||||
header { background-color: #bbb; }
|
header { background-color: #bbb; }
|
||||||
@ -468,8 +467,8 @@ function selectionWrapper(cursorPosition, prefix, postfix = null, el = editTexta
|
|||||||
if (postfix == null) {
|
if (postfix == null) {
|
||||||
postfix = prefix
|
postfix = prefix
|
||||||
}
|
}
|
||||||
text = getSelectedText(el)
|
let text = getSelectedText(el)
|
||||||
result = prefix + text + postfix
|
let result = prefix + text + postfix
|
||||||
el.setRangeText(result, start, end, 'select')
|
el.setRangeText(result, start, end, 'select')
|
||||||
el.focus()
|
el.focus()
|
||||||
placeCursor(end + cursorPosition)
|
placeCursor(end + cursorPosition)
|
||||||
|
19
assets/devconfig.ini
Normal file
19
assets/devconfig.ini
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
WikiName = Mycorrhiza (dev)
|
||||||
|
NaviTitleIcon = 🧑💻
|
||||||
|
|
||||||
|
[Hyphae]
|
||||||
|
HomeHypha = home
|
||||||
|
UserHypha = u
|
||||||
|
HeaderLinksHypha = header-links
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
HTTPPort = 1737
|
||||||
|
URL = http://localhost:1737
|
||||||
|
|
||||||
|
[Authorization]
|
||||||
|
UseFixedAuth = true
|
||||||
|
FixedAuthCredentialsPath = mycocredentials.json
|
||||||
|
|
||||||
|
UseRegistration = true
|
||||||
|
RegistrationCredentialsPath = mycoregistration.json
|
||||||
|
LimitRegistration = 3
|
@ -30,8 +30,8 @@ function selectionWrapper(cursorPosition, prefix, postfix = null, el = editTexta
|
|||||||
if (postfix == null) {
|
if (postfix == null) {
|
||||||
postfix = prefix
|
postfix = prefix
|
||||||
}
|
}
|
||||||
text = getSelectedText(el)
|
let text = getSelectedText(el)
|
||||||
result = prefix + text + postfix
|
let result = prefix + text + postfix
|
||||||
el.setRangeText(result, start, end, 'select')
|
el.setRangeText(result, start, end, 'select')
|
||||||
el.focus()
|
el.focus()
|
||||||
placeCursor(end + cursorPosition)
|
placeCursor(end + cursorPosition)
|
||||||
|
3
flag.go
3
flag.go
@ -59,7 +59,4 @@ func parseCliArgs() {
|
|||||||
util.UserHypha = util.CanonicalName(util.UserHypha)
|
util.UserHypha = util.CanonicalName(util.UserHypha)
|
||||||
util.HeaderLinksHypha = util.CanonicalName(util.HeaderLinksHypha)
|
util.HeaderLinksHypha = util.CanonicalName(util.HeaderLinksHypha)
|
||||||
user.AuthUsed = util.UseFixedAuth || util.UseRegistration
|
user.AuthUsed = util.UseFixedAuth || util.UseRegistration
|
||||||
if user.AuthUsed && (util.FixedCredentialsPath != "" || util.RegistrationCredentialsPath != "") {
|
|
||||||
user.ReadUsersFromFilesystem()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
3
main.go
3
main.go
@ -186,6 +186,9 @@ func main() {
|
|||||||
hyphae.Index(WikiDir)
|
hyphae.Index(WikiDir)
|
||||||
log.Println("Indexed", hyphae.Count(), "hyphae")
|
log.Println("Indexed", hyphae.Count(), "hyphae")
|
||||||
|
|
||||||
|
if user.AuthUsed && (util.FixedCredentialsPath != "" || util.RegistrationCredentialsPath != "") {
|
||||||
|
user.ReadUsersFromFilesystem()
|
||||||
|
}
|
||||||
history.Start(WikiDir)
|
history.Start(WikiDir)
|
||||||
shroom.SetHeaderLinks()
|
shroom.SetHeaderLinks()
|
||||||
|
|
||||||
|
@ -13,13 +13,20 @@ import (
|
|||||||
|
|
||||||
// ReadUsersFromFilesystem reads all user information from filesystem and stores it internally. Call it during initialization.
|
// ReadUsersFromFilesystem reads all user information from filesystem and stores it internally. Call it during initialization.
|
||||||
func ReadUsersFromFilesystem() {
|
func ReadUsersFromFilesystem() {
|
||||||
|
if util.UseFixedAuth {
|
||||||
rememberUsers(usersFromFixedCredentials())
|
rememberUsers(usersFromFixedCredentials())
|
||||||
|
}
|
||||||
|
if util.UseRegistration {
|
||||||
|
rememberUsers(usersFromRegistrationCredentials())
|
||||||
|
}
|
||||||
readTokensToUsers()
|
readTokensToUsers()
|
||||||
}
|
}
|
||||||
|
|
||||||
func usersFromFixedCredentials() []*User {
|
func usersFromFile(path string, source UserSource) (users []*User) {
|
||||||
var users []*User
|
contents, err := ioutil.ReadFile(path)
|
||||||
contents, err := ioutil.ReadFile(util.FixedCredentialsPath)
|
if os.IsNotExist(err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -28,12 +35,23 @@ func usersFromFixedCredentials() []*User {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
for _, u := range users {
|
for _, u := range users {
|
||||||
u.Source = SourceFixed
|
u.Source = source
|
||||||
}
|
}
|
||||||
|
return users
|
||||||
|
}
|
||||||
|
|
||||||
|
func usersFromFixedCredentials() (users []*User) {
|
||||||
|
users = usersFromFile(util.FixedCredentialsPath, SourceFixed)
|
||||||
log.Println("Found", len(users), "fixed users")
|
log.Println("Found", len(users), "fixed users")
|
||||||
return users
|
return users
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func usersFromRegistrationCredentials() (users []*User) {
|
||||||
|
users = usersFromFile(registrationCredentialsPath(), SourceRegistration)
|
||||||
|
log.Println("Found", len(users), "registered users")
|
||||||
|
return users
|
||||||
|
}
|
||||||
|
|
||||||
func rememberUsers(uu []*User) {
|
func rememberUsers(uu []*User) {
|
||||||
// uu is used to not shadow the `users` in `users.go`.
|
// uu is used to not shadow the `users` in `users.go`.
|
||||||
for _, user := range uu {
|
for _, user := range uu {
|
||||||
@ -71,9 +89,49 @@ func tokenStoragePath() string {
|
|||||||
if strings.HasPrefix(dir, util.WikiDir) {
|
if strings.HasPrefix(dir, util.WikiDir) {
|
||||||
log.Fatal("Error: Wiki storage directory includes private config files")
|
log.Fatal("Error: Wiki storage directory includes private config files")
|
||||||
}
|
}
|
||||||
|
log.Println("Path for saving tokens:", dir)
|
||||||
return dir
|
return dir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func registrationCredentialsPath() string {
|
||||||
|
path := util.RegistrationCredentialsPath
|
||||||
|
if path == "" {
|
||||||
|
dir, err := xdg.DataFile("mycorrhiza/registration.json")
|
||||||
|
if err != nil {
|
||||||
|
// No error handling, because the program will fail later anyway when trying to read file ""
|
||||||
|
log.Println("Error: cannot get a file to registration credentials, so no registered users will be saved.")
|
||||||
|
} else {
|
||||||
|
path = dir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
|
func dumpRegistrationCredentials() error {
|
||||||
|
tmp := []*User{}
|
||||||
|
|
||||||
|
for u := range YieldUsers() {
|
||||||
|
if u.Source != SourceRegistration {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
copiedUser := u
|
||||||
|
copiedUser.Password = ""
|
||||||
|
tmp = append(tmp, copiedUser)
|
||||||
|
}
|
||||||
|
|
||||||
|
blob, err := json.Marshal(tmp)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = ioutil.WriteFile(registrationCredentialsPath(), blob, 0644)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func dumpTokens() {
|
func dumpTokens() {
|
||||||
tmp := make(map[string]string)
|
tmp := make(map[string]string)
|
||||||
|
|
||||||
|
@ -60,6 +60,10 @@ func Register(username, password string) error {
|
|||||||
Source: SourceRegistration,
|
Source: SourceRegistration,
|
||||||
}
|
}
|
||||||
users.Store(username, &u)
|
users.Store(username, &u)
|
||||||
|
err = dumpRegistrationCredentials()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user