1. Добавлен файл .gitignore.
2. Добавлен файл 500.html. Теперь сервер может отправить содержимое этого файла, вместо какой-либо HTML-страницы, если во время её открытия произошла внутренняя ошибка сервера.
This commit is contained in:
parent
91e1e10501
commit
3657cb0956
3 changed files with 66 additions and 2 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
classes
|
||||||
|
main
|
34
500.html
Normal file
34
500.html
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2023 Nikita Osokin.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>500</h1>
|
||||||
|
<p>Произошла внутренняя ошибка сервера при открытии данной страницы. Попробуйте повторить свой запрос позже.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
32
main.go
32
main.go
|
@ -36,6 +36,7 @@ import (
|
||||||
var schedFileRWMutex sync.RWMutex
|
var schedFileRWMutex sync.RWMutex
|
||||||
var classesRWMutexes map[string]*sync.RWMutex
|
var classesRWMutexes map[string]*sync.RWMutex
|
||||||
var classesNames []string
|
var classesNames []string
|
||||||
|
var error500Text []byte
|
||||||
|
|
||||||
func isValidClass(class string) bool {
|
func isValidClass(class string) bool {
|
||||||
for i := 0; i < len(classesNames); i++ {
|
for i := 0; i < len(classesNames); i++ {
|
||||||
|
@ -122,12 +123,14 @@ func respondWithFile(writer http.ResponseWriter, filename string) {
|
||||||
file, err := os.Open(filename)
|
file, err := os.Open(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writer.WriteHeader(http.StatusInternalServerError)
|
writer.WriteHeader(http.StatusInternalServerError)
|
||||||
|
writer.Write(error500Text)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stat, err := file.Stat()
|
stat, err := file.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writer.WriteHeader(http.StatusInternalServerError)
|
writer.WriteHeader(http.StatusInternalServerError)
|
||||||
|
writer.Write(error500Text)
|
||||||
file.Close()
|
file.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -136,6 +139,7 @@ func respondWithFile(writer http.ResponseWriter, filename string) {
|
||||||
_, err = file.Read(buffer);
|
_, err = file.Read(buffer);
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writer.WriteHeader(http.StatusInternalServerError)
|
writer.WriteHeader(http.StatusInternalServerError)
|
||||||
|
writer.Write(error500Text)
|
||||||
file.Close()
|
file.Close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -328,7 +332,7 @@ func handleEditPage(writer http.ResponseWriter, request *http.Request) {
|
||||||
respondWithFile(writer, "editpage.html")
|
respondWithFile(writer, "editpage.html")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* TODO: в эту и похожие функции нужно добавть возможность отправить статус 500 */
|
|
||||||
func handleSchedule(writer http.ResponseWriter, request *http.Request) {
|
func handleSchedule(writer http.ResponseWriter, request *http.Request) {
|
||||||
respondWithFile(writer, "schedule.html")
|
respondWithFile(writer, "schedule.html")
|
||||||
}
|
}
|
||||||
|
@ -371,12 +375,36 @@ func handleScheduleGet(writer http.ResponseWriter, request *http.Request) {
|
||||||
schedFile.Close()
|
schedFile.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Переформатировать эту функцию.
|
||||||
func main() {
|
func main() {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
error500File, err := os.Open("500.html")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("[!!!]Не удалось открыть файл 500.html.\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
error500FileStat, err := error500File.Stat()
|
||||||
|
if err != nil {
|
||||||
|
error500File.Close()
|
||||||
|
fmt.Printf("[!!!]Не удалось прочитать информацию о файле 500.html.\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
error500Text = make([]byte, error500FileStat.Size())
|
||||||
|
|
||||||
|
_, err = error500File.Read(error500Text);
|
||||||
|
if err != nil {
|
||||||
|
error500File.Close()
|
||||||
|
fmt.Printf("[!!!]Не удалось прочитать файл 500.html.\n")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
error500File.Close()
|
||||||
|
|
||||||
classesRWMutexes = make(map[string]*sync.RWMutex)
|
classesRWMutexes = make(map[string]*sync.RWMutex)
|
||||||
|
|
||||||
var classesDir *os.File
|
var classesDir *os.File
|
||||||
var classes []os.DirEntry
|
var classes []os.DirEntry
|
||||||
var err error
|
|
||||||
|
|
||||||
classesDir, err = os.Open("classes")
|
classesDir, err = os.Open("classes")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue